11. Variabel dan Tipe Data
Bab 7 menulis teks langsung di dalam pemanggilan print.
Cara itu berhasil, tapi kalau ada informasi yang perlu dipakai di lebih
dari satu tempat, kamu harus mengetiknya ulang setiap kali. Variabel
menyelesaikan masalah itu. Sebuah variabel adalah nama
yang mewakili sebuah nilai, sehingga kamu cukup menulis nilainya sekali
dan bisa dipakai berkali-kali.
Mendeklarasikan variabel
Bentuk paling umum dari deklarasi variabel di Lua:
local name = "Keiko"
print(name)Ada empat hal yang terjadi pada baris pertama itu:
localadalah keyword yang artinya buat variabel baru yang hidup di dalam file ini. Selalu gunakan ini. Alasannya ada di kotak di bawah.nameadalah nama variabelnya. Kamu yang memilihnya.=adalah operator assignment. Ia memasukkan nilai di sebelah kanan ke dalam variabel di sebelah kiri. Ini bukan berarti "sama dengan" seperti di matematika."Keiko"adalah nilai yang disimpan.
Sekarang name mewakili string "Keiko",
sehingga print(name) mencetak Keiko.
Kalau kamu lupa local, variabelnya tetap bisa dipakai,
tapi ia menjadi variabel global. Variabel global
dipakai bersama di seluruh program dan menyebabkan bug yang susah
ditemukan seiring program berkembang. Selalu tulis local
saat pertama kali menggunakan sebuah nama. Buku ini selalu
melakukannya.
Mengubah nilai variabel
Nilai sebuah variabel bisa diubah. Gunakan = lagi,
tanpa local:
local score = 0
print(score) -- prints 0
score = 50
print(score) -- prints 50local hanya dipakai pada penyebutan pertama
sebuah nama. Mengulangnya akan membuat variabel baru yang kebetulan
punya nama yang sama, dan itu hampir tidak pernah jadi yang kamu
inginkan.
Buka exercises/11/01-variables.lua. Ubah nilai awal
score dan jalankan filenya. Kedua pemanggilan
print seharusnya ikut berubah.
Tipe Data
Di Lua, sebuah nilai juga punya tipe, bukan hanya data. Empat tipe yang kamu butuhkan sekarang:
- string — teks, ditulis di antara tanda kutip:
"hello",'a',""(string kosong). - number — angka apa pun, dengan atau tanpa titik
desimal:
0,-7,3.14. - boolean — hanya dua nilai:
truedanfalse. Tanpa tanda kutip. - nil — ketidakhadiran nilai sama sekali.
type() adalah fungsi bawaan yang mengembalikan tipe
sebuah nilai sebagai string:
print(type("hello")) -- string
print(type(7)) -- number
print(type(true)) -- boolean
print(type(nil)) -- nilNama variabel
Kamu yang memilih nama variabel, tapi Lua punya aturan tentang mana yang diperbolehkan:
- Boleh mengandung huruf, angka, dan garis bawah
_. - Tidak boleh dimulai dengan angka.
level1boleh;1leveltidak boleh. - Sensitif terhadap huruf besar/kecil.
Score,score, danSCOREadalah tiga nama yang berbeda. - Tidak boleh berupa salah satu kata yang sudah dipesan Lua:
and,break,do,else,elseif,end,false,for,function,goto,if,in,local,nil,not,or,repeat,return,then,true,until,while. Kamu akan bertemu sebagian besar kata-kata ini nanti.
Di luar aturan, ikuti kebiasaan berikut:
- Pilih nama yang bermakna.
player_namejauh lebih baik darin.hit_pointslebih baik darihpsaat kode sudah panjang, meskipunhpmasih oke untuk skrip pendek. - Huruf kecil dengan garis bawah adalah gaya Lua yang
umum:
max_score,enemy_count. CamelCase (maxScore) juga umum, terutama di Roblox. Pilih salah satu dan konsisten di dalam satu file.
Mencetak variabel
print tidak perlu tanda kutip di sekitar nama variabel.
Tanda kutip hanya untuk teks yang kamu ketik langsung:
local level = 7
print("Level:", level) -- Level: 7
print("Level: " .. level) -- Level: 7Baris pertama menggunakan pemisah tab milik print. Baris
kedua menggunakan .. untuk menggabungkan
"Level: " dan nilai level menjadi satu
string.
.. antara string dan angka bisa bekerja karena Lua
mengubah angka menjadi teks secara otomatis. Kemudahan itu tidak membuat
angka dan string jadi hal yang sama. 7 dan "7"
adalah tipe yang berbeda, meskipun terlihat mirip.
Multi-assignment
Lua memungkinkan kamu mendeklarasikan beberapa variabel dan memberikan beberapa nilai dalam satu baris. Nama di sebelah kiri dipasangkan dengan nilai di sebelah kanan berdasarkan posisi:
local name, level = "Keiko", 7
print(name, level) -- Keiko 7Ini mengelompokkan deklarasi yang berkaitan dengan rapi. Cara ini juga memungkinkan trik yang berguna — menukar dua variabel dalam satu langkah:
local a, b = 1, 2
a, b = b, a
print(a, b) -- 2 1Lua membaca seluruh sisi kanan terlebih dahulu, baru kemudian
melakukan assignment. Jadi a, b = b, a mengambil nilai
b dan a saat ini lalu menempatkannya
ke slot yang berlawanan.
PR (Pekerjaan Rumah)
Starter PR ada di exercises/11/homework/.
Soal 1 — Data karakter pemain
Buka exercises/11/homework/01-player-vitals.lua.
Deklarasikan empat variabel local bernama
name, level, hit_points, dan
alive, dengan nilai pilihanmu sendiri. Yang pertama harus
berupa string, dua berikutnya angka, dan yang keempat boolean. Cetak
masing-masing di baris tersendiri dengan label, seperti
Name: Keiko.
Soal 2 — Pemeriksa tipe
Buka exercises/11/homework/02-type-checker.lua. Gunakan
type() untuk mencetak tipe dari masing-masing lima nilai
berikut, satu per baris:
- string
"world", - angka
42, - angka
3.14, - boolean
false, nil.
Soal 3 — Ganti nama dan reassign
Buka exercises/11/homework/03-rename-and-reassign.lua.
File starter memiliki tiga variabel a, b, dan
c dengan nilai yang terlihat acak. Ganti namanya menjadi
sesuatu yang bermakna sesuai nilainya, cetak nilai-nilai awalnya, ubah
ketiga variabel tersebut, lalu cetak lagi.
Tantangan — Misteri nil
Buka exercises/11/homework/04-nil-mystery.lua.
Deklarasikan variabel local tanpa nilai dan cetak tipenya.
Kemudian beri nilai string dan cetak tipenya lagi. Tambahkan komentar
multi-baris singkat yang menjelaskan, dengan kata-katamu sendiri, apa
arti nil.
Bingung atau sudah selesai? Buka halaman solusi PR.