Topik ini membahas variabel lokal pada Ruby, mulai dari aturan penamaannya, penugasan yang tidak memerlukan deklarasi tipe, hingga sifat variabel sebagai penunjuk menuju objek. Setelah membacanya, pemberian nama, penyimpanan nilai, dan penghitungan nilai dalam program dapat dilakukan dengan landasan yang benar. Contoh pada topik ini menggunakan ranah penghitungan nilai ujian agar mudah dihitung ulang.
Aturan penamaan variabel lokal#
Variabel lokal diawali huruf kecil atau garis bawah dan hanya boleh memuat huruf, angka, serta garis bawah. Ruby membedakan huruf besar dan huruf kecil, sehingga nilai dan Nilai merupakan dua variabel yang berbeda. Nama yang terdiri atas beberapa kata secara konvensi ditulis dengan gaya snake_case, yaitu huruf kecil sepanjang nama dengan pemisah garis bawah di antara kata, misalnya total_nilai.
Tabel berikut merangkum beberapa bentuk nama beserta statusnya.
| Nama | Sah | Alasan |
|---|---|---|
nilai_ujian | ya | huruf kecil dengan pemisah garis bawah |
total2 | ya | angka boleh muncul setelah huruf |
_sementara | ya | diawali garis bawah |
2nilai | tidak | diawali angka |
nilai-ujian | tidak | tanda hubung dibaca sebagai operasi pengurangan |
nilai ujian | tidak | spasi memisahkan dua nama |
Nama yang mengandung tanda hubung seperti nilai-ujian ditolak Ruby karena tanda hubung pada posisi itu dibaca sebagai operasi pengurangan. Nama yang diawali angka juga ditolak karena bertentangan dengan aturan penulisan bilangan. Dua baris berikut memperlihatkan nama yang memicu error sintaks apabila dijalankan.
# tidak-dijalankan
2nilai = 10 # diawali angka, memicu error sintaks
nilai-ujian = "A" # tanda hubung dibaca sebagai penguranganPenugasan tanpa deklarasi tipe#
Ruby tidak memerlukan deklarasi tipe, sehingga variabel langsung terbentuk pada saat penugasan (assignment) pertama. Bentuk nilai = 80 membuat variabel nilai dan mengaitkannya dengan objek bilangan 80 dalam satu langkah. Tipe yang menyertainya ditentukan oleh nilai yang dirujuk, bukan dinyatakan di depan nama variabel sebagaimana sejumlah bahasa lain.
Karena tipe mengikuti nilai, satu variabel yang sama boleh menunjuk nilai dengan tipe berbeda pada saat yang berbeda. Metode class dipanggil pada variabel untuk menanyakan kelas objek yang dirujuknya. Perhatikan bahwa class juga dipanggil pada bilangan 10, yang berarti bilangan pun berstatus objek.
x = 10
puts x.class
x = "sepuluh"
puts x.classInteger
StringSifat ini disebut dynamic typing, yaitu pemeriksaan tipe yang dilakukan saat program berjalan, bukan saat kode ditulis. Kelebihannya, kode menjadi ringkas dan bebas dari penanda tipe yang berulang-ulang. Konsekuensinya, kesalahan tipe tidak tertangkap sebelum program benar-benar dijalankan, sehingga keluaran program perlu diperiksa dengan saksama.
Contoh penerapannya berupa penghitungan rata-rata tiga nilai ujian berikut. Setiap nilai disimpan pada variabel tersendiri, kemudian dijumlahkan dan dibagi tiga. Interpolasi #{} pada string menyisipkan nilai variabel ke dalam teks keluaran dan dibahas tuntas pada topik String.
# nilai-ujian.rb
# Menghitung rata-rata tiga nilai ujian.
nilai_pertama = 80
nilai_kedua = 90
nilai_ketiga = 100
total = nilai_pertama + nilai_kedua + nilai_ketiga
rata_rata = total / 3
puts "Total nilai : #{total}"
puts "Rata-rata : #{rata_rata}"Total nilai : 270
Rata-rata : 90Penugasan juga dapat dilakukan secara paralel, yaitu beberapa variabel sekaligus dalam satu baris. Bentuk a, b = 10, 20 memberi a nilai 10 dan b nilai 20 dalam satu langkah, dan jumlah variabel di kedua sisi tidak harus sama.
a, b = 10, 20
puts a
puts b10
20Nama variabel adalah penunjuk#
Variabel di Ruby tidak menyimpan objek secara langsung, melainkan menyimpan rujukan (reference) menuju objek yang berada di memori. Satu objek boleh dirujuk oleh lebih dari satu nama, dan penugasan ulang hanya memindahkan rujukan nama tersebut, tidak pernah menyalin objeknya. Diagram berikut menggambarkan hubungan itu.
Akibat berbagi objek itu terlihat pada potongan berikut. Nilai a ikut berubah setelah isi b ditambahkan, karena keduanya menunjuk satu objek string yang sama. Metode << menambahkan teks pada objek yang dirujuknya, bukan pada nama b semata.
a = "data"
b = a
b << " uji"
puts a
puts bdata uji
data ujiPerilaku tersebut berbeda dari penugasan ulang. Penugasan b = "data uji" membuat b menunjuk objek baru yang isinya berbeda, sedangkan a tetap menunjuk objek lamanya.
a = "data"
b = a
b = "data uji"
puts a
puts bdata
data ujiKesalahan umum#
Kesalahan yang paling sering terjadi adalah menggunakan nama yang belum pernah diberi nilai. Keadaan ini menghentikan program dengan NameError, yaitu error yang muncul saat sebuah nama tidak dikenali pada saat program berjalan. Sebagian besar NameError berasal dari salah ketik, misalnya nama_lengap padahal yang diberi nilai adalah nama_lengkap.
Kasus lain yang serupa adalah perbedaan huruf besar dan huruf kecil pada nama. Nama Nilai tidak sama dengan nilai, sehingga penulisan yang tidak konsisten juga memunculkan NameError. Pesan error selalu menyebut nama yang tidak dikenali, sehingga membandingkan nama pada pesan dengan nama pada kode biasanya langsung menunjukkan salah ketiknya. Kebiasaan menamai variabel secara konsisten dengan snake_case sejak awal memperkecil risiko NameError.
Ringkasan#
- Variabel lokal diawali huruf kecil atau garis bawah, ditulis dengan snake_case, dan membedakan huruf besar dengan huruf kecil.
- Variabel terbentuk pada penugasan pertama tanpa deklarasi tipe, dan tipenya mengikuti nilai yang dirujuk.
- Variabel menyimpan rujukan menuju objek, sehingga dua nama dapat menunjuk satu objek yang sama.
- Menggunakan nama yang belum diberi nilai memunculkan NameError pada saat program berjalan.
Referensi#
- Penugasan dalam kode Ruby — Ruby Documentation — Menjelaskan penugasan variabel lokal serta sifat rujukan nilainya.
- Object — Ruby Documentation — Mendokumentasikan metode class yang digunakan untuk menanyakan kelas objek.