Prinsip DRY (Don't Repeat Yourself) — BAB 12
Tujuan Pembelajaran
Section titled “Tujuan Pembelajaran”Setelah menyelesaikan halaman ini, kamu diharapkan dapat:
- Menjelaskan arti dan bahaya dari duplikasi kode program.
- Mengidentifikasi bagian kode yang berulang dan memindahkannya ke fungsi helper.
- Menerapkan prinsip DRY untuk menjaga kerapian kode.
Pendahuluan
Section titled “Pendahuluan”Salah satu dosa terbesar seorang programmer adalah duplikasi kode. Jika kamu menulis logika rumus yang sama berkali-kali di berbagai file berbeda, kamu sedang menimbun bom waktu yang siap meledak saat rumus tersebut perlu diubah di masa depan.
Penjelasan
Section titled “Penjelasan”Prinsip DRY (Don’t Repeat Yourself / Jangan Ulangi Dirimu Sendiri) menyatakan bahwa setiap potong pengetahuan atau logika dalam sistem harus memiliki representasi tunggal yang tidak ambigu di dalam codebase.
Mengapa duplikasi kode berbahaya?
Section titled “Mengapa duplikasi kode berbahaya?”Bayangkan kamu menulis rumus diskon 10% di 5 file berbeda. Suatu hari, sekolah memutuskan untuk menaikkan diskon menjadi 15%. Kamu harus mencari dan mengubah angka diskon di 5 file tersebut secara manual. Jika kamu terlewat mengubah 1 file saja, data keuangan sekolah akan menjadi kacau dan tidak sinkron.
Analogi Kehidupan Sehari-hari: Tidak Memfotokopi Dokumen Berulang Kali
Section titled “Analogi Kehidupan Sehari-hari: Tidak Memfotokopi Dokumen Berulang Kali”Bayangkan di kantor tata usaha sekolah:
Ada dokumen “Visi dan Misi Sekolah” sepanjang 3 halaman.
- Melanggar DRY: Staf TU memfotokopi dokumen tersebut sebanyak 50 kali lalu menempelkannya di setiap kelas, di ruang guru, di kantin, dan di mading. Ketika visi misi sekolah diubah oleh kepala sekolah, staf TU harus mencopot 50 kertas tersebut di seluruh sekolah dan memfotokopi ulang 50 lembar baru.
- Mematuhi DRY: Visi misi sekolah ditaruh di dalam satu buku pedoman induk pusat. Di setiap kelas dan mading, cukup ditulis rujukan: “Visi misi sekolah dapat dibaca di Buku Pedoman Induk Halaman 5”. Jika visi misi berubah, staf TU hanya perlu mengedit 1 halaman di Buku Pedoman Induk tersebut.
Visual Illustration: Alur Kerja DRY
Section titled “Visual Illustration: Alur Kerja DRY”LOGIKA DUPLIKAT (Buruk) ├── file_A.ts: hitungTotal(a, b) { return a + b } └── file_B.ts: hitungTotal(a, b) { return a + b }
LOGIKA TERPUSAT (DRY - Bagus) ├── helper.ts: export hitungTotal(a, b) { return a + b } ├── file_A.ts: import { hitungTotal } └── file_B.ts: import { hitungTotal }Example: Refactoring Kode Duplikat
Section titled “Example: Refactoring Kode Duplikat”Bad Code (Duplikasi Formatting Rupiah)
Section titled “Bad Code (Duplikasi Formatting Rupiah)”// Di file transaksi.tsconst hargaBuku = 15000;console.log(`Buku: Rp${hargaBuku.toLocaleString("id-ID")}`);
// Di file laporan.ts (Menulis ulang logika format yang sama!)const totalBelanja = 50000;console.log(`Total: Rp${totalBelanja.toLocaleString("id-ID")}`);Good Code (Logika Dipindahkan ke Helper)
Section titled “Good Code (Logika Dipindahkan ke Helper)”// Di file src/helpers/utility.ts (Terpusat) (BAB 11)export function formatRupiah(nominal: number): string { return `Rp${nominal.toLocaleString("id-ID")}`;}
// Di file transaksi.tsimport { formatRupiah } from "./helpers/utility";console.log(`Buku: ${formatRupiah(15000)}`);
// Di file laporan.tsimport { formatRupiah } from "./helpers/utility";console.log(`Total: ${formatRupiah(50000)}`);Common Mistakes
Section titled “Common Mistakes”- Duplikasi Logika Validasi: Menuliskan pengecekan
nilai >= 0 && nilai <= 100berulang kali dimain.tsdan disiswa-service.ts(BAB 11). Jika batas nilai kelulusan diubah, kamu harus mencarinya di seluruh file.
Best Practice
Section titled “Best Practice”- Letakkan semua fungsi format teks, angka, persentase, dan tanggal ke dalam satu file helper khusus
src/helpers/utility.ts(BAB 11) agar mudah ditemukan oleh timmu.
Ringkasan
Section titled “Ringkasan”- DRY bertujuan menghindari duplikasi logika dan data dalam program.
- Duplikasi kode mempersulit proses pemeliharaan dan rawan memicu bug tidak sinkron.
- Atasi duplikasi dengan memindahkan kode berulang ke fungsi helper terpusat.
Latihan
Section titled “Latihan”- Cari baris kode cetak pembatas
console.log("=".repeat(50))di dalam project final SIAKAD-mu (BAB 11). - Pindahkan ke fungsi helper
cetakGaris()diutility.ts, lalu import dan panggil di seluruh file yang membutuhkannya.