Saat memproses daftar belanja, yang dibutuhkan bukan nomor posisi melainkan isi tiap item: beras, minyak goreng, telur, dan seterusnya. Foreach loop menyederhanakan pekerjaan itu: statement ini mengunjungi setiap elemen koleksi secara berurutan dan mengikatnya ke satu variabel, tanpa counter dan tanpa risiko salah indeks.
Struktur Foreach #
Foreach loop memuat dua bagian utama: variabel elemen beserta tipenya, dan koleksi yang ditulis setelah kata kunci in. Runtime mengambil elemen satu per satu dari awal sampai akhir, dan loop berhenti otomatis saat seluruh elemen telah dikunjungi.
string[] daftarBelanja = { "Beras", "Minyak goreng", "Telur", "Gula pasir" };
foreach (string item in daftarBelanja)
{
Console.WriteLine($"- {item}");
}Output yang Dihasilkan:
- Beras
- Minyak goreng
- Telur
- Gula pasirMari kita telaah baris demi baris:
- Baris 1: Array
daftarBelanjaberisi empat string sebagai sumber data. - Baris 3 (
foreach (string item in daftarBelanja)): Compiler memeriksa bahwadaftarBelanjadapat diiterasi, lalu runtime menugaskan tiap elemen ke variabelitembergantian. - Baris 5: Body mencetak isi
itemsaat itu; langkah ini diulang untuk setiap elemen berikutnya. - Setelah elemen terakhir: Runtime mengakhiri loop, dan eksekusi berlanjut ke statement setelah blok.
Di balik layar, compiler menerjemahkan foreach menjadi pemanggilan GetEnumerator, MoveNext, dan properti Current pada koleksi. Karena itu, foreach tidak hanya bekerja pada array, tetapi juga pada List, Queue, dan koleksi lain yang mendukung mekanisme tersebut.
Urutan kunjungan mengikuti urutan asli koleksi: elemen yang dideklarasikan pertama dikunjungi paling awal, dan elemen terakhir dikunjungi paling akhir. Variabel elemen juga tidak boleh ditugaskan nilai baru di dalam body, misalnya item = "Garam", karena compiler menandainya sebagai kesalahan kompilasi; setiap elemen bersifat hanya-baca selama iterasi berlangsung.
Menjumlahkan Elemen Koleksi #
Variabel elemen bisa langsung dipakai dalam perhitungan, misalnya menjumlahkan nilai ujian satu kelas.
int[] nilaiSiswa = { 80, 75, 88, 92 };
int total = 0;
foreach (int nilai in nilaiSiswa)
{
total += nilai;
}
Console.WriteLine($"Jumlah nilai: {total}");
Console.WriteLine($"Rata-rata: {total / nilaiSiswa.Length}");Output yang Dihasilkan:
Jumlah nilai: 335
Rata-rata: 83Loop menambahkan 80, 75, 88, dan 92 ke variabel total, sehingga menghasilkan 335. Pembagian total / nilaiSiswa.Length melibatkan dua int, sehingga hasilnya juga int yang memotong bagian desimal: 335 / 4 menghasilkan 83, bukan 83,75. Bila rata-rata desimal dibutuhkan, ubah salah satu operand menjadi double sebelum membagi.
Foreach tidak menyediakan indeks. Bila posisi elemen dibutuhkan, misalnya untuk mencetak nomor urut, pertahankan counter manual di dalam body atau gunakan for loop berdasarkan Length. Keduanya sah; pilih bentuk yang membuat niat kode paling terbaca bagi pembaca berikutnya.