16. if / elseif / else
Selama ini, program kita berjalan dengan cara yang sama setiap kali
dijalankan. Bab ini menambahkan kondisi: sebuah
pertanyaan yang dijawab true atau false.
Jawaban itulah yang menentukan blok kode mana yang dijalankan.
Membandingkan nilai
Kondisi dibangun dari operator perbandingan. Setiap operator membandingkan dua nilai dan mengembalikan boolean.
| Operator | Arti |
|---|---|
== |
sama dengan |
~= |
tidak sama dengan (catatan: ~, bukan
!) |
< |
kurang dari |
> |
lebih dari |
<= |
kurang dari atau sama dengan |
>= |
lebih dari atau sama dengan |
print(7 == 7) -- true
print(7 == 8) -- false
print("a" == "A") -- false (case matters)
print(7 ~= 8) -- true
print(3 < 5) -- true
print(3 >= 3) -- trueOperator kesamaan adalah == (dua tanda sama dengan).
Satu = adalah penugasan — ia mengubah
nilai variabel. Jadi if x = 7 adalah error sintaks; Lua
menolak menjalankannya.
Pernyataan if
if menjalankan sebuah blok kode hanya ketika kondisinya
benar.
local age = 16
if age >= 18 then
print("You can vote.")
endBaca dari kiri ke kanan: jika usianya minimal 18, maka cetak pesannya, akhir dari if. Indentasi (biasanya empat spasi) dibuat untuk kemudahan membaca; Lua tidak mewajibkannya, tapi selalu beri indentasi — itu membuat kesalahan lebih mudah ditemukan.
else untuk kasus
lainnya
else dijalankan ketika kondisinya salah. Bersama
if, keduanya mencakup kedua kemungkinan tepat satu
kali:
local age = 16
if age >= 18 then
print("You can vote.")
else
print("Not old enough to vote yet.")
endTepat satu baris print yang dijalankan, tidak pernah
keduanya sekaligus.
elseif untuk rantai
kondisi
Untuk lebih dari dua kasus, rantaikan dengan elseif. Lua
mencoba setiap kondisi secara berurutan dan berhenti pada yang pertama
kali bernilai benar:
local score = 73
if score >= 90 then
print("Grade: A")
elseif score >= 80 then
print("Grade: B")
elseif score >= 70 then
print("Grade: C")
elseif score >= 60 then
print("Grade: D")
else
print("Grade: F")
endUrutan sangat penting: Lua mengambil kecocokan pertama.
Kalau score >= 60 ditaruh paling atas, semua nilai lulus
akan mendapat D — tidak ada yang dapat A, B, atau C.
Buka exercises/16/01-grade.lua. Ubah nilai
score dan jalankan. Coba nilai tepat di batas (60, 70, 80,
90) untuk memastikan >= menyertakannya.
Menggabungkan kondisi
dengan and, or, not
Kadang satu perbandingan tidak cukup. Lua memiliki tiga operator logika untuk menggabungkan boolean:
| Operator | Arti |
|---|---|
and |
benar jika kedua sisi bernilai benar |
or |
benar jika salah satu sisi bernilai benar |
not |
membalik true menjadi false dan false menjadi true |
local level = 12
local has_key = true
if level >= 10 and has_key then
print("You can enter the dungeon.")
end
if level < 10 or not has_key then
print("You are blocked.")
endTuliskan sebagai kata-kata. Lua tidak menggunakan
&&, ||, maupun !.
Truthy dan falsy
Kondisi-kondisi di atas semuanya menghasilkan boolean sejati, tapi
if menerima nilai apa pun. Aturan Lua:
nildanfalsebersifat falsy —ifmelewati bloknya.- Semua nilai lainnya bersifat truthy —
termasuk
0,"", dan0.0.
Ini mengejutkan banyak orang, terutama bahwa 0 bersifat
truthy. Ini berguna untuk memeriksa apakah sebuah variabel memiliki
nilai:
local name = io.read() -- could be nil if input is empty in some cases
if name then
print("Hello, " .. name)
else
print("No name was entered.")
endBuka exercises/16/02-truthy.lua dan jalankan. Bandingkan
keluarannya dengan apa yang kamu perkirakan. Hasil untuk 0
dan "" sering kali mengejutkan.
PR (Pekerjaan Rumah)
Soal 1 — Genap atau ganjil
Buka exercises/16/homework/01-even-or-odd.lua. Minta
masukan sebuah angka. Cetak even atau odd
berdasarkan apakah n % 2 bernilai 0.
Soal 2 — Gerbang level Roblox
Buka exercises/16/homework/02-level-gate.lua. Ada dua
variabel di bagian atas: level (sebuah angka) dan
has_key (sebuah boolean). Cetak
You can enter the dungeon. hanya ketika pemain berada di
minimal level 10 dan memiliki kuncinya. Jika tidak,
cetak salah satu dari:
Level too low.(jika levelnya saja yang menjadi masalah),Missing the key.(jika levelnya sudah oke tapi kuncinya tidak ada),Level too low and missing the key.(jika keduanya bermasalah).
Soal 3 — Huruf nilai
Buka exercises/16/homework/03-grade-letter.lua. Minta
masukan sebuah skor (0 sampai 100). Cetak huruf nilai A, B, C, D, atau F
menggunakan batas yang sama seperti contoh di bab ini.
Tantangan — Terbesar dari tiga angka
Buka exercises/16/homework/04-largest-of-three.lua. Tiga
variabel menyimpan tiga angka. Cetak yang terbesar, menggunakan
if dan operator perbandingan — tanpa perulangan, tanpa
tabel, tanpa math.max. Tantangannya: tangani nilai seri
dengan rapi (jika dua angka sama-sama terbesar, cetak salah
satunya).
Masih bingung atau sudah selesai? Buka halaman solusi PR.