Nilai Default Hash di Ruby

Hash merupakan objek yang sangat menarik di Ruby. Terutama di Ruby on Rails, frekeuensi pemakaiannya bisa dikatakan tinggi. Dulu saya ingat saat pertama bertemu dengan Rails dan melihat ada kode seperti ini yang membuat bingung.

Yang membuat bingung dari kode di atas adalah pada bagian method: :delete. Itu apaan ya? Setelah saya tahu hash ternyata itu adalah salah satu bentuk dari hash di Ruby. Ya memang bentuk hash di Ruby bisa ada lebih dari satu macam. Contohnya ada di bawah ini.

Pada intinya adalah, mengenali hash di Ruby adalah salah satu modal yang diperlukan untuk bekerja dengan Ruby itu sendiri dan tentu saja dengan Ruby on Rails juga. Nah salah satunya adalah dengan mengenali nilai default dari suatu hash.

Bisa dilihat pada kode sebelumnya atau kode di bawah ini yang lebih jelas bahwa hash memiliki bentuk yang berpasangan antara key dan value.

Kalau di Python, yang seperti ini disebutnya dictionary sedangkan di PHP dipanggilnya asosiatif array.

Berkaitan dengan nilai default, sesuai namanya, adalah nilai yang diberikan kepada suatu hash jika kita mengakses key yang tidak ada pada hash tersebut. Lebih baik dengan contoh, perhatikan kode berikut.

Pada kode di atas kita sekalian belajar cara lain membuat hash yaitu dengan membuat hash kosong menggunakan {} kemudian dimasukkan nilainya satu persatu ke key yang diinginkan.

Keadaan menjadi “lucu” saat kita mencoba mengakses key price yang belum diberikan nilai sebelumnya. Tentu saja yang diberikan kepada kita adalah nil value. Nilai default digunakan untuk kasus-kasus seperti ini di mana kita menginginkan sebuah hash selalu memiliki nilai meskipun nilai belum diberikan.

Untuk tujuan itu ada satu lagi bentuk yang bisa digunakan untuk membuat hash di Ruby. Perhatikan kode ini.

Kali ini yang beda dari cara sebelumnya adalah alih-alih menggunakan {}, kita menggunakan Hash.new untuk membuat sebuah objek hash baru. Jangan keburu protes karena pada kode di atas pun saat key price diakses nilai yang diberikan masih nil hehehe.

Dengan menggunakan Hash.new kita bisa memberikan nilai default seperti ini.

Nah kali ini ketika kita mencoba mengakses price yang diperoleh bukan lagi objek nil tetapi string belum ada. Kesimpulannya adalah dengan menggunakan bentuk Hash.new(nilai_default) nilai default bisa kita atur. Nilai default yang diberikan bisa apa saja, kebetulan saja saya ngasihnya string. Kalau mau pakai angka atau objek lain juga bisa.

Sepertinya sudah menyelesaikan masalah ya? Untuk kasus tertentu iya tapi untuk beberapa kasus bisa jadi belum. Misal kita memutuskan untuk nilai default yang tadi adalah angka 0 karena harga buku bentuknya angka bukan string. Maka oke kita ubah menjadi seperti ini.

Sudah lihat ada yang “lucu” lagi?

Yap, kali ini saat kita tidak memberikan nilai pada author dan kita mengaksesnya yang didapat adalah 0. Aneh karena nilai dari penulis bagusnya untuk nilai default adalah semacam kalimat “belum ada” bukan angka 0.

Oke kemudian diputuskan, nilai default untuk price adalah 0 sedangkan untuk key sisanya adalah “belum ada”. Bisakah?, mengingat selama ini nilai default yang ada berlaku untuk semua key yang ada.

Jika kita berkelana menyambangi dokumentasi Ruby seputaran hash ini maka kita bisa menemukan fakta kalau dalam membuat nilai default masih ada cara lain lagi yaitu menggunakan block!

Dengan menggunakan block, sekarang bentuknya seperti ini.

Bentuk ini memberikan kebebasan bagi kita untuk menentukan nilai default untuk masing-masing key karena kita memiliki kendali penuh terhadap masing-masingnya. Sekarang kita implementasikan kebutuhan di atas tadi.

Dengan memanfaatkan penggunaan block dalam penentuan nilai default dari sebuah hash, kita bisa menentukan nilai defaultnya spesifik untuk key tertentu saja, kontras dengan cara-cara sebelumnya yang mana nilai default otomatis berlaku untuk semua key.

Cara Lain (lagi)

Berbagai macam cara yang sudah kita pelajari tadi kesemuanya membutuhkan definisi sejak awal tentang nilai default yang diinginkan. Sekarang bagaimana kasusnya kalau hash yang ada bukanlah hash yang kita buat sendiri tetapi hash hasil kembalian dari suatu method yang mana kita tidak bisa menentukan nilai defaultnya sejak awal.

Ruby menyediakan method fetch untuk mengambil nilai dari key tertentu dari suatu hash. Seperti ini contohnya.

fetch ini akan melempar exception kalau key yang dicari tidak ada, berbeda dengan menggunakan [] yang mengembalikan nil.

Lho bisa jadi masalah dong?

Tentu bisa, tergantung dengan butuhnya kita, dengan [] kita tidak akan tahu mana yang nil karena memang nilainya nil dan mana yang nil karena key tidak ditemukan. Dengan menggunakan fetch sebaliknya, kita bisa tahu. Masalah exception tentu kita bisa atasi dengan melakukan rescue.

Kembali ke soal nilai default, selain pakai rescue untuk menangkap exception jikalau key tidak ditemukan, kita bisa menambahkan parameter kedua di fetch sebagai nilai default.

Sampai jumpa lagi di tulisan selanjutnya tentang Ruby yang tidak kalah jelas dan menariknya 😉

Facebook Comments
 

Agung Setiawan

Agung Setiawan adalah software engineer di BukaLapak.com, penulis sekaligus pecinta sastra, dan pembaca buku

 
Halo, perkenalkan saya Agung Setiawan.
Saya Software Engineer di BukaLapak.
Simak pemikian saya soal dunia Software Engineering via Twitter di @agungsetiawanmu dan facebook
Blog ini saya update seminggu sekali jadi sering-sering saja mampir
Mau belajar Vim bareng saya?
Belajar ngoding dari nol menggunakan PHP

Leave a Reply

Your email address will not be published. Required fields are marked *