Episode ini membahas operator aritmatika, logika, bitwise, dan incremental, statement kondisional if, switch, dan ternary, semua jenis perulangan dari for hingga range-based for, serta penggunaan break dan continue untuk mengendalikan alur program.

Program yang hanya menjalankan pernyataan berurutan dari atas ke bawah sangat terbatas. Untuk membangun logika yang nyata, kalian butuh alat pengambil keputusan: operator untuk memanipulasi nilai, statement kondisional untuk bercabang, dan perulangan untuk memproses data berulang.
Episode 4 mengajarkan seluruh bagian kontrol alur C++: operator aritmatika dan bitwise, if, switch, dan ternary, semua bentuk perulangan termasuk range-based for, serta break dan continue untuk mengendalikan alur di dalam perulangan.
C++ menyediakan operator standar: +, -, *, /, dan % (modulo). Ingat bahwa membagi dua int menghasilkan int — 7 / 2 bernilai 3, bukan 3.5. Operator incremental ++ dan decremental -- menambah atau mengurangi nilai satu. Prefix ++x menambah dulu lalu memakai nilai, postfix x++ sebaliknya:
cat > aritmatika.cpp <<'EOF'
#include <iostream>
int main() {
int a = 10, b = 3;
std::cout << (a + b) << " " << (a - b) << " "
<< (a * b) << " " << (a / b) << " "
<< (a % b) << "\n";
int x = 5;
int hasil = ++x;
std::cout << "Prefix ++x: " << hasil << ", x=" << x << "\n";
}
EOF
g++ -std=c++20 aritmatika.cpp -o aritmatika
./aritmatikaOperator perbandingan ==, !=, <, >, <=, >= menghasilkan bool. Operator logika && (dan), || (atau), dan ! (negasi) menggabungkan kondisi. C++ memakai short-circuit evaluation: pada a && b, jika a salah, b tidak dievaluasi.
Operator bitwise bekerja langsung pada bit: & (AND), | (OR), ^ (XOR), ~ (NOT), << (shift kiri), dan >> (shift kanan). Shift kiri dikalikan dua untuk setiap bit, shift kanan membagi dua:
cat > bitwise.cpp <<'EOF'
#include <iostream>
int main() {
int flags = 0b1010;
int mask = 0b0110;
std::cout << "AND: " << (flags & mask) << "\n";
std::cout << "OR: " << (flags | mask) << "\n";
std::cout << "XOR: " << (flags ^ mask) << "\n";
std::cout << "Shift kiri: " << (1 << 3) << "\n";
std::cout << "Shift kanan: " << (16 >> 2) << "\n";
}
EOF
g++ -std=c++20 bitwise.cpp -o bitwise
./bitwiseLiteral 0b1010 menulis angka biner langsung. Bitwise sangat penting di sistem embedded, flags, dan optimasi rendah tingkat.
Statement if menjalankan blok saat kondisi benar. Rantai if ... else if ... else memilih satu cabang dari banyak kemungkinan. switch cocok untuk membandingkan satu nilai terhadap banyak konstanta — setiap cabang diakhiri break. Operator ternary kondisi ? nilaiA : nilaiB adalah if satu baris yang mengembalikan nilai:
cat > kondisi.cpp <<'EOF'
#include <iostream>
#include <string>
int main() {
int hari = 3;
switch (hari) {
case 1: std::cout << "Senin\n"; break;
case 2: std::cout << "Selasa\n"; break;
case 3: std::cout << "Rabu\n"; break;
default: std::cout << "Lainnya\n"; break;
}
int nilai = 75;
std::string status = (nilai >= 60) ? "Lulus" : "Tidak";
std::cout << status << "\n";
}
EOF
g++ -std=c++20 kondisi.cpp -o kondisi
./kondisiPerulangan for memiliki inisialisasi, kondisi, dan increment dalam satu baris. while hanya memeriksa kondisi sebelum menjalankan blok, dan do-while menjamin blok dijalankan minimal sekali karena kondisi diperiksa di akhir:
cat > loop.cpp <<'EOF'
#include <iostream>
int main() {
for (int i = 0; i < 3; ++i) {
std::cout << "for: " << i << "\n";
}
int n = 0;
while (n < 3) {
std::cout << "while: " << n << "\n";
++n;
}
int m = 5;
do {
std::cout << "do-while: " << m << "\n";
--m;
} while (m > 0);
}
EOF
g++ -std=c++20 loop.cpp -o loop
./loopSejak C++11, perulangan atas kontainer jauh lebih ringkas dengan range-based for — tanpa indeks atau iterator manual:
cat > range.cpp <<'EOF'
#include <iostream>
#include <vector>
int main() {
std::vector<int> angka{10, 20, 30};
for (int x : angka) {
std::cout << x << "\n";
}
for (const auto& x : angka) {
std::cout << x * 2 << " ";
}
std::cout << "\n";
}
EOF
g++ -std=c++20 range.cpp -o range
./rangeBentuk for (int x : angka) menyalin setiap elemen, sedangkan for (const auto& x : angka) membaca tanpa menyalin — lebih efisien untuk tipe besar. Range-based for adalah standar di semua kode C++ modern.
break menghentikan perulangan sepenuhnya, sedangkan continue melompat ke iterasi berikutnya tanpa menjalankan sisa blok. Kombinasinya memungkinkan pola yang bersih seperti mencari nilai pertama yang memenuhi syarat.
continue melompati angka genap, dan break menghentikan perulangan saat i melebihi 7. Gunakan keduanya secara hemat — perulangan dengan banyak lompatan sulit dibaca. Pertimbangkan memindahkan logika ke fungsi kecil.
Inti yang harus dibawa pulang:
if ... else if ... else, switch, dan ternary untuk bercabang.for, while, dan do-while untuk perulangan klasik.break menghentikan perulangan, continue melompat ke iterasi berikutnya.Di episode 5 selanjutnya kita akan membahas function dan modular programming — deklarasi dan definisi fungsi, overloading, default arguments, inline dan constexpr, pemisahan header dan source file dengan linkage, serta function pointers, lambda, dan std::function.