17. Logika boolean lebih dalam — Solusi PR
File solusi .lua ada di
exercises/17/homework/solutions/.
Soal 1 — Warna default
Soal. Gunakan "blue" sebagai cadangan
ketika fav bernilai nil.
Solusi.
local fav = nil -- try a real colour here too
local colour = fav or "blue"
print("Your colour is " .. colour)Dengan fav = nil hasilnya
Your colour is blue; dengan fav = "red"
hasilnya Your colour is red.
Kesalahan umum.
- Menulis
if fav == nil then colour = "blue" else colour = fav end. Benar, tapifav or "blue"adalah idiom yang lebih singkat dan layak untuk diketahui.
Soal 2 — Tabel truthy
Soal. Tampilkan apakah setiap nilai bersifat truthy
menggunakan not not value.
Cara memikirkannya. Satu not
menghasilkan boolean yang berlawanan; not kedua
membaliknya lagi, sehingga menghasilkan boolean yang sesuai dengan sifat
truthy nilai tersebut.
Solusi.
print(0, not not 0) -- 0 true
print("", not not "") -- true
print(nil, not not nil) -- nil false
print(false, not not false) -- false false
print("hi", not not "hi") -- hi trueDua hal yang mengejutkan adalah 0 dan "":
keduanya truthy di Lua.
Soal 3 — Pembagian dengan pengaman
Soal. Cetak rata-rata hanya ketika
count lebih dari nol.
Solusi.
local total = 90
local count = 0 -- try a real number too
if count > 0 and total / count > 0 then
print("Average: " .. (total / count))
else
print("no data")
endDengan count = 0, pengecekan count > 0
bernilai false, sehingga Lua melakukan short-circuit dan melewati
pembagian, mencetak no data. Dengan count = 3
hasilnya Average: 30.0.
Kesalahan umum.
- Menulis
if total / count ...tanpa pengamancount > 0. Pembagian kemudian tetap berjalan meskicountbernilai0— dengan pembagian integer itu adalah error. Pengaman mencegah hal itu terjadi.
Tantangan — Nilai pertama yang ada
Soal. Cetak yang pertama dari a,
b, c yang bukan nil.
Solusi.
local a = nil
local b = nil
local c = "third"
print(a or b or c or "none") -- thirdor berjalan dari kiri ke kanan dan mengembalikan nilai
truthy pertama yang ditemukan, sehingga rantai ini berhenti pada
variabel pertama yang berisi sesuatu. Jika ketiganya nil,
ia mengembalikan "none" di akhir.
Kesalahan umum.
- Membuat rangkaian
if/elseifpanjang yang mengecek setiap variabel untuknil. Benar, tapi rantaiormelakukannya dalam satu baris.
Selesai?
Sekarang kamu sudah tahu bahwa and/or
mengembalikan nilai, melakukan short-circuit, dan menggerakkan trik
x or default. Berikutnya adalah
Perulangan, cara lain untuk membuat program melakukan
lebih dari satu hal yang sama berulang kali.