18. Perulangan
Cara lain untuk menghindari pengulangan kode adalah dengan
perulangan: sebuah blok kode yang berjalan berulang
kali. Lua punya tiga bentuk perulangan, semuanya dibahas di sini, plus
break untuk berhenti lebih awal.
while —
ulangi selama kondisi masih benar
while adalah perulangan yang paling umum. Ia memeriksa
kondisi, menjalankan blok jika benar, lalu memeriksa lagi — terus
berulang sampai kondisinya salah.
local count = 10
while count > 0 do
print(count)
count = count - 1
end
print("Blast off!")Urutan eksekusi:
- Periksa
count > 0. Nilainya10, jadi benar. - Cetak
10, setcountke9. - Kembali ke langkah 1.
countadalah9, masih benar. Cetak, kurangi. - Ulangi sampai
countadalah0. Kondisi gagal, perulangan keluar, danprint("Blast off!")berjalan sekali.
Di dalam blok perulangan, ubah nilai yang menjadi dasar kondisi, atau perulangan tidak akan pernah berhenti. Perulangan tak terbatas mengunci terminal. Hentikan dengan Ctrl + C.
repeat ... until
— jalankan blok dulu, baru periksa
repeat adalah kebalikan dari while. Ia
menjalankan blok minimal satu kali, lalu memeriksa
kondisi, dan berhenti ketika kondisinya menjadi benar —
kebalikan dari while.
local count = 1
repeat
print(count)
count = count + 1
until count > 5Keluaran:
1
2
3
4
5
Gunakan repeat ketika perulangan harus berjalan minimal
sekali — seperti mengajukan pertanyaan dan mengajukannya lagi jika
jawaban tidak valid. Kamu akan menggunakannya di mini-proyek Bagian
4.
for
— ulangi sejumlah kali yang sudah diketahui
Perulangan ketiga adalah for numerik —
alat yang tepat untuk menjalankan sesuatu sejumlah kali yang sudah
diketahui. Bentuknya:
for i = start, stop do
-- body
endi adalah variabel baru yang hanya hidup di dalam
perulangan. Lua mengisinya dengan nilai start, menambah
1 setiap putaran, dan berhenti begitu nilainya melewati
stop. Kedua ujung termasuk dalam perulangan.
for i = 1, 5 do
print(i)
endKeluaran:
1
2
3
4
5
Langkah (step)
Nilai ketiga setelah stop adalah
langkah — seberapa banyak i berubah setiap
putaran. Defaultnya adalah 1; ubah untuk melompat atau
menghitung mundur:
for i = 0, 100, 10 do -- 0, 10, 20, ... 100
io.write(i .. " ")
end
print() -- a blank line at the end
for i = 10, 1, -1 do -- 10, 9, 8, ... 1
io.write(i .. " ")
end
print()Langkah harus punya tanda yang tepat — positif untuk naik,
negatif untuk turun. Langkah 0 menghasilkan perulangan tak
terbatas, dan Lua akan memberitahumu.
Buka exercises/18/01-for-table.lua. Program ini mencetak
tabel perkalian 7, dari 7 * 1 sampai 7 * 10.
Ubah supaya mencetak tabel perkalian angka lain.
break —
keluar dari perulangan lebih awal
Ketiga jenis perulangan bisa dihentikan lebih awal dengan
break, yang langsung melompat ke kode setelah
perulangan.
local n = 1
while true do
if n * n > 100 then
break
end
n = n + 1
end
print("First number whose square is over 100 is " .. n)while true do ... end tidak punya jalan keluar bawaan;
satu-satunya cara keluar adalah break (atau error). Gunakan
ini ketika kondisi keluarnya terlalu rumit untuk satu perbandingan di
atas.
PR
Soal 1 — Hitung sampai 20
Buka exercises/18/homework/01-count-to-20.lua. Gunakan
perulangan while untuk mencetak 1 sampai 20, masing-masing
di baris tersendiri.
Soal 2 — Tabel perkalian 7
Buka exercises/18/homework/02-mult-table-7.lua. Gunakan
perulangan for numerik untuk mencetak tabel perkalian 7,
dari 7 * 1 sampai 7 * 12, dalam bentuk
ini:
7 * 1 = 7
7 * 2 = 14
...
7 * 12 = 84
Soal 3 — Berhenti di ambang batas
Buka exercises/18/homework/03-stop-at-threshold.lua.
Lakukan perulangan dari 1, tambahkan setiap angka ke total yang
berjalan. Hentikan begitu total melebihi 100, lalu cetak total dan nilai
penghitung saat itu.
Tantangan — Jumlahkan 1..N
Buka exercises/18/homework/04-sum-1-to-n.lua. Minta
masukan berupa bilangan bulat positif n. Hitung
1 + 2 + 3 + ... + n dengan perulangan for dan
total yang berjalan. Cetak:
Sum from 1 to N is S
Lalu cetak rumus n * (n + 1) / 2 di baris berikutnya —
jawaban bentuk tertutup. Keduanya harus sama.
Bingung atau sudah selesai? Buka halaman solusi PR.