Topik ini membahas variabel pada Julia, mulai dari cara sebuah nama terikat pada nilai, cara memeriksa tipe nilai saat runtime (ketika program berjalan), hingga aturan penamaan yang berlaku, termasuk pengenal Unicode. Pembahasan juga mencakup konstanta yang dideklarasikan dengan const serta perilaku tipe ketika nilai sebuah variabel diganti. Setelah membacanya, deklarasi variabel dan konstanta dapat ditulis dengan mengikuti konvensi Julia secara tepat.
Variabel sebagai nama yang terikat pada nilai#
Variabel di Julia bukan wadah yang tipenya ditetapkan sejak awal. Variabel adalah nama yang terikat pada sebuah nilai, dan tipe konkret dimiliki oleh nilainya, bukan oleh namanya. Operasi = melakukan pengikatan (binding) tersebut, sehingga penulisan sisa_stok = 24 berarti nama sisa_stok menunjuk nilai 24 bertipe Int64. Karena tipe melekat pada nilai, nama yang sama dapat diikat ulang ke nilai dengan tipe lain tanpa deklarasi apa pun.
Potongan berikut mendeklarasikan satu variabel, lalu menampilkan nilainya beserta tipe konkretnya.
sisa_stok = 24
println(sisa_stok)
println(typeof(sisa_stok))24
Int64Keluaran memperlihatkan nilai 24 dengan tipe konkret Int64. Fungsi typeof() tidak menebak dari nama variabel, melainkan membaca tipe dari nilai yang sedang terikat pada nama tersebut. Nama sisa_stok sendiri tidak menyimpan informasi tipe apa pun. Diagram berikut menggambarkan hubungan nama, nilai, dan tipenya.
Model ini berbeda dengan bahasa yang mengikat tipe pada nama variabelnya. Pertanyaan mengenai tipe sebuah variabel pada Julia sebenarnya menanyakan tipe nilai yang sedang terikat pada namanya. Perbedaan tersebut menjadi fondasi banyak perilaku Julia, termasuk kemudahan mengganti nilai dan sistem tipe yang menopang pemilihan metode.
Memeriksa tipe dengan typeof dan isa#
Fungsi typeof() mengembalikan tipe konkret dari sebuah nilai, sedangkan operator isa menguji apakah sebuah nilai termasuk tipe tertentu dan menghasilkan true atau false. Keduanya sering digunakan berdampingan ketika kode baru sedang disusun, karena yang satu melihat tipe persisnya dan yang lain menguji keanggotaan pada kelompok tipe yang lebih luas.
suhu = 36.7
nama = "Citra"
println(typeof(suhu))
println(typeof(nama))
println(suhu isa Float64)
println(nama isa AbstractString)Float64
String
true
trueNilai 36.7 bertipe Float64, sedangkan teks Citra bertipe String. Uji suhu isa Float64 bernilai true karena tipe konkretnya persis sama dengan yang diuji. Uji kedua menggunakan AbstractString, yaitu tipe abstrak yang mencakup String dan tipe string lain, dan hasilnya juga true. Tipe abstrak mengelompokkan tipe-tipe konkret yang berbagi sifat, sehingga pengujian terhadapnya dilakukan pada nilai, bukan pada nama variabelnya.
Mengganti nilai dan tipe yang ikut berubah#
Penggantian nilai dilakukan dengan menuliskan penugasan baru pada nama yang sama. Julia menentukan tipe dari nilai penggantinya saat runtime, sehingga apabila nilai barunya bertipe lain, tipe yang terbaca juga berganti. Tidak ada error yang muncul, dan tidak ada deklarasi ulang yang diperlukan.
jumlah = 10
println(typeof(jumlah))
jumlah = 10.5
println(typeof(jumlah))
jumlah = "sepuluh"
println(typeof(jumlah))Int64
Float64
StringTiga baris keluaran memperlihatkan perjalanan tipe dari Int64 ke Float64 lalu ke String. Nama jumlah tidak pernah berubah, sedangkan yang berubah hanyalah nilai yang terikat padanya. Perilaku ini sah menurut aturan Julia, tetapi kebiasaan membuat satu nama berganti-ganti tipe menyulitkan pembacaan kode. Apabila makna datanya memang berubah, memberi nama baru yang deskriptif lebih mudah diikuti.
Konstanta dengan const#
Deklarasi const membuat pengikatan yang tidak dimaksudkan untuk diganti nilainya. Konstanta membantu Julia menghasilkan kode yang lebih cepat karena tipe nilainya dapat diasumsikan tetap, sehingga menjadi tempat yang tepat untuk nilai yang tidak berubah sepanjang program berjalan. Konvensi penamaannya menggunakan huruf kapital dengan garis bawah sebagai pemisah kata. Julia juga menyediakan konstanta siap pakai seperti π yang bertipe Irrational{:π}.
const GRAVITASI = 9.81
try
global GRAVITASI
GRAVITASI = 10.0
catch err
println(typeof(err))
end
println(GRAVITASI)ErrorException
9.81Penugasan ulang pada konstanta memicu ErrorException, sehingga blok catch menangkapnya dan program selesai secara normal. Nilai GRAVITASI tetap 9.81 karena penugasan barunya ditolak. Kata kunci global di dalam blok try menyatakan bahwa nama tersebut menunjuk konstanta tingkat atas, bukan variabel lokal blok. Tanpa kata kunci itu, penugasan justru menciptakan variabel lokal baru, dan konstanta tidak tersentuh.
println(π)
println(typeof(π))π
Irrational{:π}Konstanta π tersedia sejak awal tanpa perlu diimpor, dan presisinya dijaga selama perhitungan belum dikonversi ke Float64.
Berkas berikut merangkum deklarasi variabel dan konstanta dalam satu program kecil yang menghitung sisa stok buku.
# Program kecil: mencatat sisa stok buku di perpustakaan
const JUDUL = "Pengantar Statistika"
stok = 12
pinjam = 5
stok = stok - pinjam
println("Judul: ", JUDUL)
println("Sisa stok: ", stok)
println("Tipe stok: ", typeof(stok))Judul: Pengantar Statistika
Sisa stok: 7
Tipe stok: Int64Konstanta JUDUL menampung teks yang tidak berubah, sedangkan variabel stok diperbarui mengikuti jumlah peminjaman. Tipe stok tetap Int64 karena nilai penggantinya juga integer.
Aturan penamaan dan pengenal Unicode#
Nama variabel pada Julia peka huruf besar-kecil, sehingga Nilai dan nilai merupakan dua nama yang berbeda. Konvensi yang lazim menggunakan huruf kecil dengan garis bawah sebagai pemisah kata, misalnya sisa_stok. Nama tidak boleh menggunakan kata kunci bahasa seperti function, if, atau true, dan tidak boleh diawali angka. Angka boleh muncul setelah huruf pertama, sehingga x2 sah sebagai nama, sedangkan 2x dibaca sebagai perkalian 2 dengan x. Di luar aturan itu, Julia menerima huruf dari berbagai aksara Unicode, sehingga pengenal seperti δ atau α_sudut sah digunakan.
δ = 0.5
α_sudut = 30
println(δ)
println(typeof(δ))
println(α_sudut)0.5
Float64
30Pengenal Unicode membuat kode numerik terlihat mirip dengan notasi matematisnya, misalnya δ untuk koefisien redaman. Pengetikannya tidak memerlukan papan ketik khusus karena REPL dan editor Julia menyediakan pelengkapan dari notasi LaTeX.
Kesalahan umum#
Kesalahan pertama yang paling sering muncul adalah menggunakan nama yang belum pernah didefinisikan. Julia tidak menyediakan nilai bawaan untuk nama yang belum diikat, sehingga pembacaannya langsung memicu error.
try
println(nama_belum_didefinisikan)
catch err
println(typeof(err))
endUndefVarErrorError UndefVarError semacam ini biasanya berasal dari salah ketik, misalnya stokSisa padahal yang dideklarasikan adalah stok_sisa, atau dari huruf kapital yang tak sengaja ditambahkan. Memeriksa ejaan nama pada baris yang ditunjuk pesan error umumnya sudah cukup untuk memperbaikinya.
Kesalahan kedua adalah mengira nama menyimpan tipe tetap sebagaimana pada bahasa yang tipe variabelnya statis. Ekspektasi tersebut membuat pembaca terkejut ketika jumlah yang semula Int64 berubah menjadi String. Tipe melekat pada nilai, dan penggantian nilai memang boleh mengganti tipenya.
Kesalahan ketiga adalah memberi nilai baru pada konstanta. Penugasan ulang pada nama hasil const selalu ditolak dengan ErrorException, sehingga nilai konstanta terlindungi dari perubahan tanpa sengaja. Apabila nilainya memang perlu berubah selama program berjalan, gunakan variabel biasa dan sisakan const untuk nilai yang benar-benar tetap.
Ringkasan#
- Variabel adalah nama yang terikat pada nilai, dan tipe konkret dimiliki oleh nilai sehingga
typeof()membacanya dari nilai yang terikat. - Penggantian nilai boleh mengganti tipe karena tipe ditentukan saat runtime, sedangkan
isamenguji keanggotaan tipe dengan hasiltrueataufalse. constmembuat pengikatan yang penugasan ulangnya ditolak denganErrorException, dan konstanta siap pakai sepertiπtelah tersedia.- Penamaan peka huruf besar-kecil, mengikuti konvensi huruf kecil dengan garis bawah, dan menerima pengenal Unicode seperti
δ.
Referensi#
- Variables — The Julia Language — Aturan penamaan variabel, pengenal Unicode, dan konstanta bawaan.
- Scope of Variables — The Julia Language
— Lingkup variabel global dan lokal beserta kata kunci
global. - Unicode Input — The Julia Language
— Daftar pelengkapan LaTeX untuk mengetik simbol Unicode seperti
δ.