Kode yang baik tetap butuh catatan: alasan di balik sebuah keputusan, peringatan untuk pembaca berikutnya, atau penanda pekerjaan yang belum selesai. Komentar (comment) adalah teks di dalam source code yang sengaja diabaikan compiler, sehingga isinya sepenuhnya untuk manusia. C++ menyediakan dua gaya komentar yang keduanya sudah kita lihat sekilas di contoh-contoh sebelumnya. Pada Chapter ini kita membahas sintaks keduanya, satu aturan yang sering mengejutkan pemula (komentar blok tidak bisa bersarang), lalu mendiskusikan kapan komentar bernilai dan kapan justru menutupi kode yang perlu diperbaiki.
Dua Gaya Komentar #
Gaya pertama adalah komentar satu baris yang diawali //: semua teks setelahnya sampai akhir baris diabaikan compiler. Gaya ini paling sering dipakai untuk catatan singkat, penjelasan satu baris, atau menjelaskan satu pernyataan. Gaya kedua adalah komentar blok yang diapit /* dan */: semua teks di antaranya diabaikan, berapa pun panjangnya dan menyeberang banyak baris sekalipun. Karena tidak mengenal akhir baris, komentar blok bisa juga diselipkan di tengah pernyataan:
int stok = 12; // komentar satu baris, sampai akhir baris
/* Komentar blok membentang
dua baris tanpa masalah. */
int /* tinggal di sini */ gudang = 3; // blok di tengah pernyataan
Kedua gaya menghasilkan program yang identik — pilihannya murni soal kenyamanan membaca. Kebiasaan yang umum: // untuk penjelasan berjalan sehari-hari, /* */ untuk blok penjelasan panjang atau untuk “mematikan” sementara sekelompok baris saat mencoba-coba.
Komentar Blok Tidak Bisa Bersarang #
Kesalahan klasik pemula: menganggap /* */ bisa dibuka berulang seperti kurung. Kenyataannya, komentar blok ditutup oleh */ PERTAMA yang ditemukan — tidak peduli ada berapa /* di dalamnya. Baris berikut tampak seperti dua komentar berlapis, tetapi compiler membacanya secara berbeda:
#include <iostream>
/* Komentar luar mulai di sini.
/* komentar dalam */ selesai di sini
int main() {
std::cout << "Halo\n";
return 0;
}Compiler membuka komentar di baris 3, lalu mengabaikan /* komentar dalam sebagai teks biasa, dan MENUTUP komentar tepat di */ baris 4. Akibatnya, teks selesai di sini dan seluruh tubuh program jatuh di luar komentar. Hasil kompilasi nyatanya (flag -Wall -Wextra):
komentar-salah.cpp:4:4: warning: "/*" within comment [-Wcomment]
4 | /* komentar dalam */ selesai di sini
komentar-salah.cpp:4:25: error: ‘selesai’ does not name a type
4 | /* komentar dalam */ selesai di sini
| ^~~~~~~Pesan warning -Wcomment adalah bantuan yang baik: compiler memberi tahu ada /* di dalam komentar yang mungkin bukan niat kita. Error setelahnya lahir karena selesai terbaca sebagai kode di luar komentar — dan di posisi itu, teks memang tidak punya arti. Kesimpulan praktisnya: bila perlu menonaktifkan kode yang di dalamnya sudah ada komentar blok, gunakan beberapa baris // alih-alih membungkus dengan /* */.
Program Kecil dengan Kedua Gaya #
Program berikut memakai kedua gaya komentar; compiler mengabaikan semuanya, sehingga output hanya berisi hasil std::cout:
#include <iostream>
// Program kecil untuk mendemonstrasikan dua gaya komentar.
// Semua baris yang diawali // diabaikan compiler sepenuhnya.
int main() {
/* Komentar blok boleh membentang
beberapa baris sekaligus. */
int stok = 12; // jumlah barang di gudang
std::cout << "Stok tersisa: " << stok << "\n"; /* komentar di akhir baris */
return 0;
}Output yang Dihasilkan:
Stok tersisa: 12Baris demi baris yang perlu dicermati:
- Baris 3-4 (
//di atasmain()): komentar dokumen yang menjelaskan tujuan program secara ringkas — pembaca file tahu isinya sebelum membaca kode. - Baris 8-9 (
/* ... */): komentar blok dua baris yang menjelaskan konteks sebelum kode dijalankan. - Baris 10: deklarasi
stokdengan komentar singkat di akhir baris, gaya yang cocok untuk catatan satu frasa. - Baris 12: komentar blok di akhir pernyataan cetak; ia menempel pada baris yang sama, dan compiler tetap mengabaikannya.
- Baris 13:
return 0;tanpa komentar — tidak semua baris butuh catatan, dan itu wajar.
Kapan Komentar Diperlukan #
Komentar paling bernilai ketika ia menjelaskan MENGAPA, bukan APA. Kode sudah menyatakan apa yang terjadi; yang tidak terlihat dari kode adalah alasan bisnis, batasan yang dipenuhi, atau jebakan yang pernah dialami. Contoh komentar yang layak: “offset +1 karena indeks nol dipakai sebagai penanda kosong”, atau “JANGAN mengurutkan di sini; urutan mengikuti kontrak API versi 2”. Perbandingan berikut menunjukkan komentar yang sia-sia versus nama yang sudah cukup:
// Komentar sia-sia: menjelaskan "apa" yang sudah terbaca
int h; // harga
int j; // jumlah
int t = h * j; // total
// Lebih baik: nama yang bermakna membuat kode bicara sendiri
int harga = 3000;
int jumlah = 4;
int total = harga * jumlah;Selain itu, beberapa kebiasaan yang menyehatkan kode: tandai pekerjaan tertunda dengan TODO dan bug yang sudah dikenali dengan FIXME agar mudah dicari; dokumentasikan kontrak fungsi dan class dengan pola /// atau /** */ yang dibaca alat dokumentasi seperti Doxygen; dan jangan menyimpan kode lama dalam bentuk komentar — tugas menyimpan riwayat kode adalah version control seperti git.
Komentar dan Performa #
Komentar tidak memengaruhi performa program sama sekali — bukan karena compiler mengeja lalu melewatinya, melainkan karena komentar sudah hilang sebelum kompilasi sesungguhnya dimulai. Standar C++ menetapkan tahap translasi (translation phase) ketika setiap komentar diganti satu spasi; yang sampai ke compiler adalah kode tanpa komentar. Konsekuensinya mudah ditebak: komentar tidak menambah ukuran executable, tidak memperlambat eksekusi, dan menghapus ribuan komentar tidak mengubah hasil program sedikit pun. Biaya satu-satunya adalah biaya pemeliharaan — komentar yang basi dan tidak sinkron dengan kode justru menyesatkan, jadi perbarui keduanya bersamaan.
Komentar sudah beres, dan perkakas menulis kode kita kini lengkap. Kita lanjut ke alat berkomunikasi dengan pengguna: Chapter berikutnya membedah std::cout secara menyeluruh — chaining, endl versus "\n", dan cara C++ mencetak angka, karakter, serta boolean.