Bahasa
Kendali alur
Percabangan, perulangan, dan cara keluar dari keduanya.
if dan else
Kondisinya tanpa kurung, badannya selalu berkurung kurawal. if juga bisa dipakai sebagai nilai.
let n = 7
if n % 2 == 0 {
wok("genap")
} else if n > 5 {
wok("ganjil dan besar")
} else {
wok("ganjil")
}
let jenis = if n > 5 { "besar" } else { "kecil" }
wok(jenis)ganjil dan besar
besarTernary
Bentuk pendeknya kondisi $ jika_benar : jika_salah. Pembukanya $, bukan ?, karena ? dipakai untuk meneruskan galat (lihat Option dan Result).
let nilai = 72
wok(nilai >= 75 $ "lulus" : "remedial")remedialfor
for punya dua bentuk, dan bedanya penting:
for i, x in koleksi:iindeksnya,xnilainya. Pakai_untuk yang tidak dipakai.for i in koleksi: satu nama selalu berarti indeks, termasuk untuk rentang.
let buah = ["apel", "jeruk"]
for i, b in buah {
wok(i, b)
}
var nilai = []
for _, angka in 5..8 {
nilai = nilai.push(angka)
}
wok(nilai)
var indeks = []
for i in 5..8 {
indeks = indeks.push(i)
}
wok(indeks)0 apel
1 jeruk
[5, 6, 7]
[0, 1, 2]Baris terakhir berisi [0, 1, 2], bukan [5, 6, 7]: dengan satu nama, i adalah indeks ke-0, ke-1, dan ke-2 dari rentang itu. Kalau yang kamu mau nilainya, tulis for _, i in 5..8.
a..b tidak memuat b, a..=b memuat. Bentuk dua nama juga berlaku untuk teks (indeks dan karakternya) dan dict (kunci dan nilainya). Bentuk gaya C juga ada:
for i := 0; i < 10; i += 3 {
wok(i)
}0
3
6
9Rentang di kepala for tidak pernah dijadikan array, jadi for _, i in 0..1000000000 tidak memakan memori.
while dan loop
var n = 27
var langkah = 0
while n != 1 {
n = n % 2 == 0 $ n / 2 : 3 * n + 1
langkah += 1
}
wok("Collatz 27:", langkah, "langkah")
var tebakan = 0
loop {
tebakan += 1
if tebakan * tebakan > 50 { break }
}
wok(tebakan)Collatz 27: 111 langkah
8break dan continue berlabel
break dan continue mengenai perulangan terdekat. Untuk keluar dari perulangan luar, beri label yang diawali tanda petik tunggal.
'cari: for _, i in 1..10 {
for _, j in 1..10 {
if i * j == 42 {
wok("ketemu:", i, j)
break 'cari
}
}
}ketemu: 6 7match
match mencocokkan sebuah nilai dengan pola dan menjalankan cabang pertama yang cocok. Ia juga sebuah ekspresi.
fn hari(n) {
return match n {
0 | 6 => "akhir pekan",
1..=5 => "hari kerja",
_ => "bukan hari",
}
}
wok(hari(0), hari(3), hari(9))akhir pekan hari kerja bukan hariPola lengkapnya (tuple, array, struct, enum, penjaga if, pengikat @) ada di Pola.
defer
defer menunda sebuah panggilan sampai fungsinya selesai, termasuk kalau fungsinya berhenti karena galat. Yang didaftarkan terakhir jalan duluan, dan argumennya dibekukan saat baris defer dibaca.
fn proses() {
var berkas = "laporan.txt"
defer wok("tutup", berkas)
defer wok("simpan")
berkas = "lain.txt"
wok("kerja dengan", berkas)
}
proses()kerja dengan lain.txt
simpan
tutup laporan.txt