Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Tip
Artikel ini adalah bagian dari bagian Dasar-Dasar untuk pengembang yang sudah mengetahui setidaknya satu bahasa pemrograman dan mempelajari C#. Jika Anda baru menggunakan pemrograman, mulailah dengan tutorial Memulai terlebih dahulu. Untuk sintaks lengkapnya, lihat pernyataan iterasi dalam referensi bahasa.
Berasal dari bahasa lain? Keempat perulangan C# (foreach, , whiledo-while, dan for) memiliki setara langsung dalam Java, C++, dan JavaScript. Anda paling sering menggunakan foreach . Ini mengiterasi koleksi tanpa indeks, seperti for yang disempurnakan di Java atau for...of di JavaScript.
Pernyataan perulangan menjalankan blok kode berulang kali. Setiap kali melewati blok adalah iterasi, dan blok yang berulang adalah perulangan. C# menyediakan empat perulangan. Mulailah dengan foreach untuk koleksi, gunakan while dan do-while saat kondisi mengontrol pengulangan, dan gunakan for saat Anda memerlukan indeks eksplisit.
Iterasikan koleksi dengan foreach
Pernyataan foreach menjalankan isi pernyataannya sekali untuk setiap elemen dalam koleksi, secara berurutan. Ini adalah pilihan paling umum untuk membaca koleksi karena Anda tidak mengelola indeks atau pemeriksaan batas. Pernyataan foreach mencegah kesalahan off-by-one yang umum:
string[] names = ["Ana", "Ben", "Cleo"];
// foreach reads each element in order. It's the default loop for
// collections: no index to manage and no off-by-one mistakes.
foreach (string name in names)
{
Console.WriteLine(name); // => Ana, then Ben, then Cleo
}
foreach bekerja dengan jenis apa pun yang dikenal C# sebagai urutan, termasuk array, List<T>, dan Dictionary<TKey,TValue>. Variabel iterasi (name dalam contoh sebelumnya) bersifat baca-saja, sehingga Anda tidak dapat menetapkannya kembali di dalam perulangan.
Isi perulangan adalah pernyataan tunggal, seperti penugasan atau panggilan metode.
Pernyataan blok adalah pernyataan tunggal yang mengapit nol atau lebih pernyataan dalam kurung kurawal ({ }).
Banyak standar pengkodean menyarankan agar Anda menempatkan isi perulangan di dalam kurung kurawal, meskipun hanya satu pernyataan. Kurung kurawal memperjelas cakupan. Ini mencegah kesalahan umum: menambahkan baris kedua belakangan yang Anda harapkan akan dijalankan pada setiap iterasi, tetapi ternyata hanya dijalankan sekali setelah loop selesai. Hanya kurung kurawal yang menentukan pernyataan mana yang termasuk dalam loop. C# tidak menganggap spasi sebagai sesuatu yang bermakna, jadi indentasi saja juga tidak dianggap bermakna. Kurung kurawal tetap sah bahkan untuk satu baris pun: blok tersebut merupakan satu pernyataan yang diulang oleh loop. Beri inden pada kode Anda agar mudah dibaca, namun gunakan kurung kurawal untuk mendefinisikan blok.
Ulangi selama kondisi terpenuhi dengan while
while loop memeriksa kondisi Boolean-nya sebelum setiap iterasi. Jika kondisi bernilai false di awal, badan tidak akan pernah dijalankan, sehingga perulangan while dijalankan nol kali atau lebih:
int countdown = 3;
// A while loop checks its condition before each iteration, so the body
// runs zero or more times.
while (countdown > 0)
{
Console.WriteLine(countdown); // => 3, then 2, then 1
countdown--;
}
Pastikan ada sesuatu dalam perulangan yang mengubah nilai kondisi. Dalam contoh sebelumnya, countdown-- akhirnya membuat kondisi false. Perulangan yang kondisinya tidak pernah menjadi false akan berjalan selamanya.
Jalankan body setidaknya sekali dengan do-while
Perulangan do-while memeriksa kondisinya setelah setiap iterasi, sehingga tubuh selalu berjalan setidaknya sekali. Gunakan saat pass pertama harus terjadi sebelum Anda dapat mengevaluasi kondisi, seperti meminta input lalu memvalidasinya:
int attempts = 0;
// A do-while loop runs its body once, then checks the condition. Use it
// when the body must run at least one time.
do
{
attempts++;
Console.WriteLine($"Attempt {attempts}"); // => Attempt 1, then Attempt 2, then Attempt 3
}
while (attempts < 3);
Hitung dengan for
Pernyataan for perulangan berisi tiga bagian: penginisialisasi yang berjalan sekali sebelum perulangan, kondisi yang diperiksa sebelum setiap perulangan, dan iterator yang berjalan setelah setiap perulangan. Gunakan for saat Anda membutuhkan indeks itu sendiri, bukan hanya elemen. Biasanya, Anda memerlukan indeks ketika Anda ingin memodifikasi elemen daripada membaca nilainya.
// A for loop fits when you need an explicit index. The three parts are
// the initializer, the condition, and the iterator.
for (int i = 0; i < 3; i++)
{
Console.WriteLine(i); // => 0, then 1, then 2
}
Saat Anda hanya membaca elemen, saat Anda tidak menggunakan posisi atau menetapkan nilai baru, pilih foreach. Ini menyatakan niat lebih jelas dan menghindari aritmatika indeks.
Keluar atau lewati dengan break dan continue
Dua pernyataan lompat memberi Anda kontrol yang lebih baik di dalam perulangan apa pun. Pernyataan break segera keluar dari perulangan, melewati iterasi yang tersisa:
int[] numbers = [2, 4, 7, 8];
// break stops the loop immediately, skipping any remaining elements.
foreach (int number in numbers)
{
if (number % 2 != 0)
{
Console.WriteLine($"First odd number: {number}"); // => First odd number: 7
break;
}
}
Pernyataan ini continue melewati sisa iterasi saat ini dan melanjutkan ke yang berikutnya:
int[] values = [1, 2, 3, 4, 5];
// continue skips the rest of the current iteration and moves to the next.
foreach (int value in values)
{
if (value % 2 == 0)
{
continue; // skip even numbers
}
Console.WriteLine(value); // => 1, then 3, then 5
}
Melakukan iterasi aliran asinkron dengan await foreach
Aliran asinkron adalah pembaca yang menggunakan tugas asinkron untuk menghasilkan setiap elemen berikutnya. C# mewakilinya dengan IAsyncEnumerable<T> antarmuka. Data yang tiba dari waktu ke waktu, seperti halaman dari API web atau baris dari database, cocok dengan model ini: mengambil elemen berikutnya adalah operasi yang dapat ditunggu alih-alih pengembalian segera.
Untuk menggunakan aliran asinkron, letakkan await kata kunci sebelum foreach. Setiap iterasi menanti elemen berikutnya tersedia, sehingga loop ditangguhkan saat elemen tersebut sedang dihasilkan alih-alih memblokir utas:
private static async Task AwaitForeachExample()
{
// await foreach consumes an asynchronous stream. Each iteration can
// suspend while the next element is produced.
await foreach (int value in GenerateAsync())
{
Console.WriteLine(value); // => 0, then 1, then 2
}
}
private static async IAsyncEnumerable<int> GenerateAsync()
{
for (int i = 0; i < 3; i++)
{
await Task.Delay(1); // stand-in for real asynchronous work
yield return i;
}
}
Aliran asinkron dibangun di async dan await. Untuk panduan lengkap, lihat Membuat dan mengonsumsi aliran asinkron.