Menu

While Loop di Zero: Perulangan di Bahasa untuk Agen

Cara kerja while loop di Zero saat ini: kondisi, isi perulangan, belum adanya for dan do-while di versi awal bahasa ini, dan hubungan perulangan dengan efek yang eksplisit.

Halaman ini dilengkapi editor yang bisa dijalankan. Edit, jalankan, dan lihat output-nya seketika.

Dasar-Dasar

while menjalankan isinya selama kondisi bool tetap true:

while condition {
    // body
}

Compiler mengevaluasi kondisinya sebelum setiap iterasi:

  • true: jalankan isi perulangan, lalu periksa lagi.
  • false: keluar dari perulangan.

Ilustrasi sederhana dari contoh-contoh Zero, dengan kondisi yang sudah false sejak awal:

Jalankan kode itu, dan hanya write kedua yang terjadi. Isi while tidak pernah dijalankan karena kondisinya sudah false saat pertama kali diperiksa.

Kondisinya Berupa bool

Sama seperti if/else, kondisi perulangan harus berupa bool. Zero tidak mengubah integer, string, atau nilai lain menjadi boolean secara otomatis.

while count {              // compile error
    // ...
}

while count > 0 {          // OK
    // ...
}

Kondisinya bisa berupa apa saja yang menghasilkan bool: binding, perbandingan, kombinasi &&/||, atau pemanggilan fungsi. Aturan yang sama dengan if berlaku di sini.

Perulangan dengan Penghitung

Pola klasik "lakukan sesuatu N kali" memakai sebuah penghitung dan while:

let mut i = 0
while i < 10 {
    // do work
    i = i + 1
}

Ada tiga bagian: nilai awal, kondisi yang membandingkan dengan batasnya, dan pembaruan di dalam isi perulangan. Ini pola yang dimiliki setiap bahasa imperatif. Zero hanya tidak membungkusnya dengan kata kunci for.

Catatan tentang penulisan mut di atas: cara Zero menulis binding yang bisa diubah di toolchain kamu mungkin berbeda di versi pra-1.0. Jalankan zero check --json pada test kecil untuk memastikan sintaks persis yang diterima compiler-mu. Konsep polanya (penghitung + kondisi + pembaruan) adalah bagian yang stabil.

Perulangan Tak Terbatas

while yang kondisinya selalu true akan berjalan selamanya:

while true {
    // wait for work, handle it, loop again
}

Ini bentuk yang tepat untuk event loop, REPL, atau server yang berjalan lama. Untuk keluar, kamu bisa menghentikan prosesnya, melempar error dari dalam isi perulangan, atau menyusun ulang kodenya agar kondisinya berubah.

Kapan Memakai Perulangan

Perulangan adalah alat yang sebaiknya dipakai seperlunya. Hal-hal yang terlihat seperti perulangan di bahasa lain sering punya bentuk yang lebih rapi di Zero:

  • Menelusuri koleksi yang tetap: lebih baik pakai fungsi yang disediakan standard library atau shape-mu, misalnya helper bergaya forEach, fungsi fold, atau penelusuran rekursif.
  • Membaca sampai input habis: lakukan perulangan atas pembacaan yang bisa gagal, tetapi pakai check dan raises untuk menangani batasnya dengan rapi, bukan dengan flag status yang bersarang.
  • Menunggu sebuah kondisi (polling): pertimbangkan apakah desainnya sebaiknya memberimu sinyal. Perulangan polling adalah tanda desain yang kurang baik di bahasa sistem mana pun.

Naluri yang sama berlaku untuk agen: bentuk yang ringkas dan deklaratif lebih mudah dinalar daripada perulangan penghitung yang ditulis manual, baik bagi manusia maupun bagi generator kode.

Perulangan dan Efek

Isi while, seperti blok lainnya, bisa melakukan I/O, tetapi hanya kalau punya akses ke capability World (atau sebagian darinya). Fungsi yang signature-nya tidak menyebut World boleh melakukan perulangan sebanyak apa pun, tetapi tidak bisa menulis apa pun ke luar. Sifat itu tetap berlaku di dalam isi perulangan, karena perulangan tidak memberi capability baru.

Ini terdengar jelas, tetapi inilah alasan kamu bisa menaruh while di dalam fungsi perhitungan yang "murni" dan tetap tahu, hanya dari signature-nya, bahwa fungsi itu tidak bisa menampilkan apa pun atau menulis ke disk.

Catatan Gaya

Beberapa kebiasaan kecil yang bermanfaat:

  • Buat kondisinya mudah dipahami. Kalau kondisinya melakukan pekerjaan yang berarti, pindahkan ke fungsi atau binding yang diberi nama agar perulangannya mudah dibaca.
  • Perbarui penghitung di bagian bawah isi perulangan, jangan tersebar di mana-mana. Bug selisih satu (off-by-one) jadi lebih mudah ditemukan.
  • Lebih baik tulis kondisi keluar lebih awal sebagai kondisi perulangan itu sendiri daripada memakai flag yang berubah di tengah iterasi. Bagian yang bergerak jadi lebih sedikit.

Berikutnya: Shape

Sekarang kamu sudah melihat alur kontrol inti Zero. Bab berikutnya membahas pemodelan data, dimulai dari shape, product type ala struct milik Zero.

Pertanyaan yang sering diajukan

Bagaimana cara kerja while loop di Zero?

Pakai while condition { ... }. Kondisinya dievaluasi sebelum setiap iterasi. Kalau nilainya true, isi perulangan dijalankan dan kondisinya diperiksa lagi. Kalau nilainya false, perulangan berhenti dan eksekusi berlanjut setelah kurung kurawal penutup. Kondisinya harus berupa bool.

Apakah Zero punya for loop?

Zero versi awal hanya menyediakan while sebagai konstruksi perulangan. Bahasa ini sengaja dibuat kecil selama masa stabilisasi, karena makin sedikit kata kunci, makin sedikit cara bagi agen untuk memilih bentuk yang salah. for atas sebuah rentang atau koleksi mungkin akan hadir nanti. Sampai saat itu, kamu bisa membuat pola yang sama dengan while dan sebuah penghitung.

Bagaimana cara menulis perulangan dengan penghitung di Zero?

Inisialisasi sebuah penghitung, jalankan while terhadapnya, lalu perbarui nilainya di dalam isi perulangan: let mut i = 0; while i < 10 { ...; i = i + 1 }. Sintaks mutabilitas masih terus berkembang di Zero pra-1.0, jadi cek dokumentasi terbaru untuk penulisan yang tepat. Tetapi pola while + counter + update adalah idiom standar untuk perulangan dengan penghitung.

Apakah ada break atau continue di Zero?

Sebagian besar bahasa yang sekeluarga dengan Zero menyediakan konstruksi untuk keluar lebih awal dari perulangan. Penulisan yang tepat di Zero pra-1.0 adalah salah satu bagian yang mungkin berubah sebelum 1.0. Pendekatan yang aman adalah menyusun perulangan agar kondisinya sendiri yang bekerja, yaitu membalik dan memperbarui kondisi sehingga perulangan berhenti dengan sendirinya, daripada mengandalkan kata kunci alur kontrol tertentu.

Apakah while loop di Zero bisa berjalan selamanya?

Bisa. while true { ... } adalah perulangan tak terbatas. Berguna untuk server, event loop, REPL, dan apa pun yang tidak punya kondisi berhenti yang alami. Berbeda dengan truthiness implisit, true di sini adalah literal bertipe bool, jadi kondisinya tetap bertipe dengan benar.

Ilustrasi bahasa pemrograman di Coddy

Belajar coding dengan Coddy

Mulai