dartloopperulanganPemula4 mnt baca

Perulangan for

Mengulang kode dengan for klasik dan for-in untuk koleksi.

Melakukan hal berulang tanpa menulis berulang

Bayangkan disuruh menulis "Aku tidak akan mencontek" 100 kali di papan tulis. Menulis manual 100 baris itu gila. Perulangan for adalah cara menyuruh komputer mengulang pekerjaan: tulis instruksinya sekali, tentukan berapa kali diulang.

Analogi: for itu seperti resep "uleni adonan, diamkan 10 menit" yang diulang 3 kali. Kamu tidak menulis ulang resepnya 3 kali, kamu menulis "ulangi langkah ini 3 kali".

Kenapa perulangan ada?

Karena komputer unggul dalam pekerjaan repetitif yang membosankan bagi manusia: memproses 1000 data, mencetak tabel, mengecek tiap item dalam daftar. Tanpa perulangan, program modern tidak mungkin ditulis.

Anatomi for

dart
void main() {
  for (int i = 0; i < 5; i++) {
    print('Putaran ke-$i');
  }
}

Tiga bagian di dalam kurung, dipisah titik koma:

  1. Inisialisasi int i = 0: dijalankan sekali di awal. Biasanya membuat variabel penghitung.
  2. Kondisi i < 5: dicek sebelum tiap putaran. Kalau true, lanjut; kalau false, berhenti.
  3. Update i++: dijalankan di akhir tiap putaran. Biasanya menaikkan penghitung.

Jejak eksekusinya: i=0 cetak, i=1 cetak, i=2 cetak, i=3 cetak, i=4 cetak, i=5 → kondisi false → berhenti. Total 5 putaran.

Contoh kedua, menghitung jumlah:

dart
void main() {
  int total = 0;

  for (int i = 1; i <= 10; i++) {
    total += i; // tambahkan i ke total tiap putaran
    print('i=$i, total sementara=$total');
  }

  print('Total 1 sampai 10 = $total'); // 55
}

Pola ini sangat umum: variabel akumulator (total) di luar loop, diakumulasi di dalam loop. Kamu akan memakainya terus-menerus.

for-in: mengulang isi koleksi

Kalau yang diulang adalah isi daftar (akan dibahas detail di modul List), ada bentuk lebih sederhana:

dart
void main() {
  var buah = ['apel', 'mangga', 'pisang'];

  for (var b in buah) {
    print('Aku suka $b');
  }
}

Tidak perlu penghitung manual. Variabel b otomatis berisi tiap item, satu per satu. Untuk sekarang cukup tahu bentuknya; detail koleksi menyusul.

Kesalahan umum pemula

1. Off-by-one: salah batas

dart
// SALAH (niatnya 5 putaran, dapat 6)
void main() {
  for (int i = 0; i <= 5; i++) {
    print(i); // 0,1,2,3,4,5
  }
}
dart
// BENAR: 5 putaran
void main() {
  for (int i = 0; i < 5; i++) {
    print(i); // 0,1,2,3,4
  }
}

Aturan jempol: mulai dari 0 pakai < n, mulai dari 1 pakai <= n. Keduanya menghasilkan n putaran.

2. Lupa update sehingga loop tak berujung

dart
// SALAH: i tidak pernah berubah, program macet selamanya
// for (int i = 0; i < 5;) {
//   print(i);
// }
dart
// BENAR
void main() {
  for (int i = 0; i < 5; i++) {
    print(i);
  }
}

Kalau program tiba-tiba tidak berhenti, curigai loop yang penghitungnya tidak berubah.

3. Mendeklarasikan penghitung di luar tanpa perlu

dart
// Kurang rapi
void main() {
  int i;
  for (i = 0; i < 5; i++) {
    print(i);
  }
}
dart
// BENAR: deklarasikan di dalam for
void main() {
  for (int i = 0; i < 5; i++) {
    print(i);
  }
  // i tidak bisa diakses di sini, dan itu bagus
}

Variabel i yang dideklarasikan di dalam for hanya hidup di dalam loop (scope terbatas), mencegah kekacauan nama variabel.

Kesimpulan

for klasik untuk pengulangan berbasis hitungan dengan pola inisialisasi-kondisi-update, for-in untuk menjelajahi isi koleksi. Waspadai off-by-one dan loop tak berujung. Di modul berikutnya kamu akan bertemu while, saudara for yang lebih fleksibel.

Catatan teknis: Variabel yang dideklarasikan di bagian inisialisasi for memiliki scope hanya di dalam loop. Ini berbeda dengan JavaScript lama (var) yang bocor ke luar, dan merupakan perilaku yang lebih aman.

Tantangan

Tabel perkalian

Cetak tabel perkalian 7 dari 7x1 sampai 7x10 dengan format "7 x 3 = 21". Pakai for.

text
void main() {
  // TODO: tabel perkalian 7
}