04. Penelusuran program secara manual
Ada dua cara untuk mengetahui apa yang dilakukan sebuah program. Jalankan dan perhatikan, atau jadilah komputernya: baca satu baris setiap kali, berurutan, kerjakan tiap baris di atas kertas. Kemampuan kedua itulah yang disebut penelusuran, hal paling berguna di bagian buku ini. Programmer yang bisa menelusuri kode bisa membacanya, memprediksinya, dan menemukan bugnya — tanpa pernah menekan tombol run.
Menjadi komputer, pelan-pelan
Di Bab 01 kamu belajar bahwa komputer melakukan persis apa yang diperintahkan, berurutan, dari atas ke bawah. Penelusuran adalah pekerjaan yang sama, dilakukan dengan tangan. Baris per baris. Jangan pernah melompat. Jangan berasumsi. Ketika sebuah baris mengubah nilai, coret nilai lama dan tulis yang baru.
Yang membuat ini bisa diandalkan adalah tabel penelusuran: sebuah tabel dengan satu kolom per variabel dan satu baris untuk setiap perubahan. Kamu mengisinya sambil membaca.
Penelusuran yang dikerjakan bersama
Berikut adalah sebuah program singkat. Jangan dijalankan. Baca baris per baris, sambil membuat tabel.
local a = 5
local b = 3
local total = a + b
a = a + 1
print(total)
print(a)Baris local x = ... membuat sebuah nama dan menyimpan
nilai di dalamnya. Baris x = ... biasa mengubah nilai yang
sudah ada. Tabelnya, satu baris setiap kali:
| Baris | a | b | total |
|---|---|---|---|
local a = 5 |
5 | ||
local b = 3 |
5 | 3 | |
local total = a + b |
5 | 3 | 8 |
a = a + 1 |
6 | 3 | 8 |
Pada print(total), tabel mengatakan total
adalah 8. Pada print(a), tabel mengatakan a
adalah 6. Jadi keluarannya adalah:
8
6
Yang perlu diperhatikan: total dihitung sekali
saja, pada baris ketiga, saat a masih 5. Mengubah
a setelahnya tidak menghitung ulang
total. Tabel membuat hal itu jelas — total
tidak pernah berubah setelah baris yang menetapkannya. Penelusuran
mengungkap ini; menebak-nebak menyembunyikannya.
Menelusuri sebuah perulangan
Sebuah perulangan menjalankan baris yang sama beberapa kali, sehingga tabel mendapat beberapa baris untuk satu variabel. Telusuri ini:
local n = 4
local result = 1
for i = 1, n do
result = result * i
end
print(result)Perulangan berjalan dengan i sebagai 1, lalu 2, 3, 4.
Setiap kali, bagian dalam perulangan mengalikan result
dengan i saat itu:
Putaran (i) |
result sebelum | result sesudah |
|---|---|---|
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 2 | 6 |
| 4 | 6 | 24 |
Setelah perulangan, result adalah 24, sehingga program
mencetak 24. (Kamu baru saja menelusuri 1×2×3×4. Jawaban
itu punya nama — "faktorial 4" — tapi kamu tidak perlu tahu itu untuk
menelusurinya.)
Menelusuri sebuah kondisi
Untuk sebuah if, kamu tidak mengisi tabel — kamu
mengikuti satu jalur yang pertanyaannya bernilai benar. Telusuri ini
dengan score sebesar 72:
local score = 72
if score >= 90 then
print("A")
elseif score >= 70 then
print("B")
else
print("C")
endBaca dengan lantang: apakah 72 paling tidak 90? Tidak, lewati.
Apakah 72 paling tidak 70? Ya — cetak B, lewati
sisanya. Keluarannya adalah B. Hanya cabang pertama
yang benar yang dijalankan; sisanya tidak pernah dilirik.
Di atas kertas, ubah baris pertama contoh perulangan menjadi
local n = 5. Tambahkan satu baris lagi ke tabel penelusuran
dan hitung nilai yang dicetak. (Kamu seharusnya mendapat angka lima kali
lebih besar dari sebelumnya.)
Kenapa perlu menelusuri?
- Menemukan bug sebelum dijalankan. Kebanyakan bug adalah sebuah baris yang melakukan sesuatu yang sedikit berbeda dari yang kamu bayangkan. Penelusuran memaksamu membaca apa yang sebenarnya dikatakan tiap baris.
- Membaca kode orang lain. Sebentar lagi kamu akan menempel contoh-contoh Roblox dari internet. Penelusuran adalah cara kamu memahaminya alih-alih sekadar berharap.
- Membuatmu melambat di tempat yang penting. Mengisi tabel penelusuran itu membosankan, dan itulah maksudnya — kebosanan adalah otakmu yang menolak untuk melewatkan baris yang sulit.
PR (Pekerjaan Rumah)
Kertas lagi. Tanpa komputer. Untuk setiap soal, buat tabel penelusuran (atau ikuti cabangnya) dan tuliskan keluaran akhirnya. Hanya setelah kamu yakin dengan jawabanmu boleh kamu memeriksanya, setelah kamu sampai di bab yang mengizinkan menjalankan kode.
Soal 1 — Jumlah hitung mundur
Telusuri program ini dan tuliskan nilai yang dicetak.
local s = 0
for i = 5, 1, -1 do
s = s + i
end
print(s)(Petunjuk: perulangan menghitung mundur — i
adalah 5, lalu 4, 3, 2, 1.)
Soal 2 — Membangun sebuah string
Telusuri ini dan tuliskan persis apa yang dicetak.
local word = "ha"
local out = ""
for i = 1, 3 do
out = out .. word
end
print(out).. menyambung dua potongan teks. out
dimulai kosong.
Soal 3 — Penukaran
Telusuri ini dengan tabel dua kolom untuk a dan
b. Tuliskan baris keluaran akhirnya.
local a = 2
local b = 7
local temp = a
a = b
b = temp
print(a, b)Jelaskan dalam satu kalimat apa pekerjaan variabel
temp.
Tantangan — Temukan kejutannya
Telusuri ini dan tuliskan nilai yang dicetak. Kebanyakan orang menebak salah pada bacaan pertama, jadi lakukan dengan pelan dan percayai tabelnya.
local price = 100
local discount = 20
local final = price - discount
discount = 50
print(final)Lalu tuliskan satu kalimat yang menjelaskan mengapa mengubah
discount pada baris kedua dari bawah memengaruhi atau tidak
memengaruhi final.
Mentok atau sudah selesai? Buka halaman solusi PR.