Percabangan sudah kita kuasai; sekarang program kita butuh kemampuan mengulang. Mencetak sepuluh baris tabel perkalian, menjumlahkan seratus angka, atau memproses setiap item dalam daftar — semuanya membutuhkan perulangan, dan menyalin-tempel pernyataan sepuluh kali bukan jawaban yang layak. Pernyataan for adalah loop yang paling sering dipakai di C++ untuk pengulangan yang jumlahnya sudah diketahui: ia mengumpulkan inisialisasi, kondisi, dan langkah iterasi dalam satu baris header yang padat. Pada Chapter ini kita membongkar tiga klausanya satu per satu, mengamati scope variabel loop, lalu mencoba variasi lanjutan seperti multi-variabel dan klausa kosong.

Anatomi Tiga Klausa #

Header for berisi tiga bagian yang dipisah titik koma: for (init; kondisi; iterasi). Bagian init berjalan SEKALI di awal, biasanya mendeklarasikan counter; bagian kondisi diperiksa sebelum SETIAP putaran, dan loop berhenti bila ia false; bagian iterasi berjalan setelah SETIAP putaran, biasanya menaikkan counter. Urutan eksekusinya: init → cek kondisi → badan → iterasi → cek kondisi → badan → iterasi → … Mari kita lihat program yang mencetak tabel perkalian:

cpp
#include <iostream>

int main() {
    const int n = 7;

    for (int i = 1; i <= 10; ++i) {
        std::cout << n << " x " << i << " = " << n * i << "\n";
    }

    return 0;
}

Output yang Dihasilkan:

text
7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
7 x 4 = 28
7 x 5 = 35
7 x 6 = 42
7 x 7 = 49
7 x 8 = 56
7 x 9 = 63
7 x 10 = 70

Mari kita bedah header dan badannya:

  1. Baris 5 (const int n = 7;): bilangan yang dikalikan disimpan sebagai const — nilainya tetap sepanjang loop, dan compiler akan menegur bila kita tidak sengaja mengubahnya.
  2. Baris 7 (int i = 1): klausa init mendeklarasikan counter i dan mengisinya 1. Ini berjalan tepat satu kali, sebelum putaran pertama.
  3. Baris 7 (i <= 10): kondisi diperiksa sebelum setiap putaran — termasuk putaran pertama. Bila langsung false (misalnya i <= 0), badan tidak pernah dijalankan sama sekali.
  4. Baris 7-8 (badan loop): pernyataan cout mengeksekusi n * i dengan nilai i yang sedang berjalan, dari 1 sampai 10.
  5. Baris 7 (++i): klausa iterasi menaikkan i setelah setiap putaran; operator increment sudah kita bahas pada Chapter Operator Increment dan Decrement. Bila klausa ini terlupa, kondisi i <= 10 akan selalu benar dan loop tidak pernah berakhir — klasik infinite loop.

Scope Variabel Loop #

Perhatikan bahwa i dideklarasikan DI DALAM header for. Sejak C++99, variabel semacam itu hanya hidup di dalam loop: setelah kurung kurawal penutup, nama i tidak tersedia lagi. Ini bukan batasan, melainkan keunggulan — counter yang tidak bocor keluar tidak mungkin tertukar dengan variabel lain, dan compiler pun bebas mengoptimalkannya. Bila Anda memang perlu memakai nilai akhir counter sesudah loop (misalnya jumlah putaran yang terjadi), deklarasikan variabelnya di LUAR header:

cpp
int i = 0;
for (i = 0; i < 10; ++i) {
    // pekerjaan berulang
}
// i masih bisa dibaca di sini, bernilai 10

Pola di atas sah, tetapi simpan untuk kasus yang benar-benar membutuhkannya; scope sekecil mungkin adalah aturan yang akan terus kita pegang, dan diulang tuntas pada Chapter Scope dan Lifetime Variabel. Rincian ketiga klausa for sepanjang sejarah standarnya tersaji di cppreference .

Jumlah Deret: Akumulasi dalam Loop #

Pola paling umum kedua setelah pencetakan adalah akumulasi: sebuah variabel pengumpul diperbarui setiap putaran. Program berikut menjumlahkan bilangan 1 sampai n dengan cara menambahkan satu per satu:

cpp
#include <iostream>

int main() {
    const int n = 100;
    int jumlah = 0;

    for (int i = 1; i <= n; ++i) {
        jumlah += i;
    }

    std::cout << "Jumlah 1 sampai " << n << " = " << jumlah << "\n";
    return 0;
}

Output yang Dihasilkan:

text
Jumlah 1 sampai 100 = 5050

Variabel jumlah dideklarasikan sebelum loop dan diinisialisasi 0 — titik awal yang benar untuk penjumlahan. Setiap putaran menambahkan nilai i ke pengumpul: setelah putaran pertama jumlah = 1, setelah kedua = 3, dan seterusnya sampai 5050. Inisialisasi pengumpul di LUAR loop adalah kuncinya; bila int jumlah = 0 dipindahkan ke dalam badan loop, nilai itu di-reset setiap putaran dan hasil akhirnya hanya 100.

Variasi: Multi-Variabel dan Klausa Kosong #

Ketiga klausa for semuanya opsional, dan klausanya boleh berisi lebih dari satu pernyataan yang dipisah koma. Contoh berikut menjalankan dua counter sekaligus — i naik dari 0, j turun dari 5, dan loop berhenti saat keduanya bertemu:

cpp
#include <iostream>

int main() {
    // Dua variabel loop: i naik, j turun, bertemu di tengah
    for (int i = 0, j = 5; i < j; ++i, --j) {
        std::cout << "i = " << i << ", j = " << j << "\n";
    }

    return 0;
}

Output yang Dihasilkan:

text
i = 0, j = 5
i = 1, j = 4
i = 2, j = 3

Klausa init mendeklarasikan i dan j sekaligus, sedangkan klausa iterasi berisi dua ekspresi ++i, --j yang dijalankan berurutan setiap putaran. Loop berhenti saat kondisi i < j gagal pada i = 3 dan j = 2. Kasus ekstrem dari fleksibilitas ini: bila ketiga klausa dikosongkan, for (;;) menjadi loop tanpa syarat berhenti — padanan while (true) yang hanya berhenti lewat break (alat yang menanti pada Chapter break dan continue). Bentuk for (;;) sering dipakai programmer C++ sebagai ungkapan “loop yang sengaja dibuat tanpa ujung”.

Dibandingkan while, for menyatukan seluruh “pengaturan loop” dalam satu baris sehingga counter yang lupa dinaikkan mudah terlihat. Keduanya setara dalam kekuatan — loop apa pun bisa ditulis dengan salah satunya — dan Chapter berikutnya memperlihatkan kapan while unggul.