Setelah dokumentasi, buku, dan library, ada satu sumber belajar yang paling dekat dengan pekerjaan nyata: kode yang ditulis orang lain. Membaca contoh yang benar mempercepat pemahaman idiom, tetapi membaca contoh yang buruk diam-diam menanamkan kebiasaan yang salah — justru karena terlihat “berjalan dengan baik”. Chapter ini menunjuk sumber contoh yang terpercaya, memberi metode membaca kode secara sistematis, dan menutup dengan program kecil yang memeriksa potongan kode berdasarkan ceklis pola yang perlu kita waspadai.

Sumber Contoh yang Terpercaya #

Empat sumber berikut konsisten memberi contoh yang benar dan bisa diandalkan:

  • cppreference.com — hampir setiap halaman fitur memiliki bagian Example yang ringkas dan menunjukkan pemakaian minimal yang benar; bagi kita, ini titik mulai tercepat untuk fitur apa pun.
  • Contoh resmi GoogleTest — sepuluh sampel progresif dari test sederhana hingga fixture dan mock; membaca sampel resminya lebih andal daripada artikel acak tentang framework testing.
  • Test suite libstdc++ — ribuan test kecil yang memverifikasi setiap bagian standard library; bukan bacaan santai, tetapi sumber kebenaran untuk perilaku paling presisi.
  • GitHub topic c++ dan awesome-cpp — indeks proyek nyata per kategori; berguna untuk melihat pola arsitektur pada skala besar, bukan hanya potongan kecil.

Urutan yang kita anjurkan saat mencari contoh: mulai dari cppreference untuk sintaks, lanjut ke sampel resmi library untuk pemakaian nyata, baru jelajahi proyek opensource untuk skala besar. Terbalik dari itu — meniru potongan dari forum tanpa memeriksa konteksnya — adalah cara tercepat mengadopsi kebiasaan yang keliru.

Metode Membaca Kode Orang Lain #

Membaca kode butuh strategi berbeda dari membaca prosa; lima langkah ini kita pakai sepanjang course:

  1. Jalankan dulu sebelum membaca — bangun programnya, amati keluarannya; perilaku nyata memberi konteks yang membuat baris kode bermakna.
  2. Temukan titik masuk dan ikuti alur data — mulai dari main() atau API publik, lalu telusuri bagaimana data berubah dari input ke output.
  3. Catat siapa memiliki resource — setiap alokasi manual harus punya jawaban “siapa yang membebaskan”; jika jawabannya kabur, itu temuan penting.
  4. Tandai pola rawan — akses indeks tanpa pemeriksaan, batas loop yang mencurigakan, dan cast yang dipaksakan layak diberi tanda saat dibaca.
  5. Ubah satu hal kecil dan amati — ganti satu nilai, hapus satu pemeriksaan, jalankan ulang; eksperimen terkendali mempercepat pemahaman jauh melampaui membaca pasif.

Langkah keempat dan kelima inilah yang dicontohkan program di bawah: ceklis pola rawan diterapkan secara mekanis ke potongan kode. Pola seperti alokasi manual dan batas loop <= memang sering tidak masalah, tetapi keduanya selalu layak mendapat tatapan kedua — persis seperti linter mengingatkan kita.

Lisensi Kode yang Kita Tiru #

Menyalin kode orang lain bukan sekadar soal teknis, melainkan soal lisensi. Repositori GitHub standar menyertakan berkas LICENSE di akarnya; lisensi MIT, BSD, dan Apache membolehkan pemakaian ulang asal atribusi dijaga, sedangkan GPL menuntut kode turunan ikut terbuka. Contoh di cppreference dilindungi lisensi Creative Commons Attribution-ShareAlike, jadi bila potongannya dipakai di proyek kita, sumber dan lisensinya perlu dicatat. Aturan praktis yang aman: pelajari contohnya, pahami idiomnya, lalu tulis versi sendiri — pemahaman yang kita peroleh tidak dilisensikan siapa pun.

Membaca dengan Ceklis dalam Program #

Program berikut menerapkan metode di atas secara kecil-kecilan: potongan kode disimpan sebagai data, ceklis pola diperiksa baris demi baris, dan temuan dicetak dengan nomor barisnya:

cpp
#include <iostream>
#include <iterator>
#include <string>
#include <string_view>
#include <utility>
#include <vector>

// "Kode orang lain" yang sedang kita baca — disimpan sebagai data agar
// program ini bisa memeriksanya baris demi baris.
constexpr std::string_view potongan[] = {
    "int* data = new int[100];",
    "delete[] data;",
    "for (int i = 0; i <= 100; ++i) {",
    "    data[i] = i;",
    "}",
};

// Pasangan pola dan catatan yang perlu kita periksa saat menemukannya.
constexpr std::pair<std::string_view, std::string_view> pola[] = {
    {"new ",   "alokasi manual: siapa yang bertanggung jawab membebaskan?"},
    {"delete", "pembebasan manual: rawan kebocoran dan double free"},
    {"<=",     "batas loop bisa off-by-one: cocokkan dengan ukuran array"},
    {"data[",  "akses indeks: pastikan berada di dalam batas"},
};

int main() {
    for (std::size_t i = 0; i < std::size(potongan); ++i) {
        for (const auto& [teks, catatan] : pola) {
            if (potongan[i].find(teks) != std::string_view::npos) {
                std::cout << "baris " << (i + 1) << ": " << potongan[i] << "\n"
                          << "   -> " << catatan << "\n";
            }
        }
    }
    return 0;
}

Output yang Dihasilkan:

text
baris 1: int* data = new int[100];
   -> alokasi manual: siapa yang bertanggung jawab membebaskan?
baris 2: delete[] data;
   -> pembebasan manual: rawan kebocoran dan double free
baris 3: for (int i = 0; i <= 100; ++i) {
   -> batas loop bisa off-by-one: cocokkan dengan ukuran array
baris 4:     data[i] = i;
   -> akses indeks: pastikan berada di dalam batas

Bedah program di atas:

  1. std::string_view untuk potongan dan pola: kita hanya membaca teks, bukan memiliki string — string_view cukup dan tidak ada alokasi sama sekali.
  2. std::pair<std::string_view, std::string_view>: setiap pola disandingkan dengan catatannya di satu tempat; menambah aturan baru berarti menambah satu baris pada pola.
  3. potongan[i].find(teks) != std::string_view::npos: pencarian substring sederhana; npos berarti “tidak ditemukan”, pemeriksaan yang sudah kita kenal dari std::string::find.
  4. Loop luar baris, loop dalam pola: temuan dicetak terurut per baris, meniru cara compiler melaporkan masalah — dan persis begitulah sebaiknya kita membaca laporan compiler: baris demi baris.

Membaca kode dan dokumentasi akan terus membawa kita pada istilah asing — dari allocator hingga vtable. Chapter terakhir dari course ini merangkum istilah-istilah itu menjadi glosarium yang siap dijadikan kamus saku kita.