Prinsip Dasar: Clean Code

Secara harfiah, clean code adalah kode yang bersih. Artian bersih bisa secara luas, bisa rapih secara tampilan atau rapih secara struktur. Istilah ini populer karena buku legendaris “Clean Code” oleh Robert C. Martin (Uncle Bob).

Clean code bertujuan untuk membuat code bisa lebih mudah dipahami, dan aman.

Prinsip Dasar Clean Code

  • Nama Harus Jelas dan Deskriptif – Gunakan nama variabel, fungsi, dan class yang deskriptif. Contohnya dari pada foreach ($i as $d) lebih baik foreach ($invoices as $invoice) lebih jelas object looping dan hasil loopingnya menggunakan variable apa.
  • Fungsi Harus Pendek dan Fokus – Satu fungsi = satu tujuan. Hindari fungsi panjang yang melakukan banyak hal. Apabila fungsi memiliki tugas yang panjang, bisa di lakukan split / pemisahan fungsi berdasarkan tanggung jawab.
// Contoh salah 
function processPayment($order) {
    validateOrder($order);
    calculateTax($order);
    chargeCard($order);
    sendInvoiceEmail($order);
    updateOrderStatus($order, 'paid');
}

// Lebih baik
function processPayment($order) {
    validateOrder($order);
    handleTransaction($order);
    notifyUser($order);
}

function handleTransaction($order) {
    calculateTax($order);
    chargeCard($order);
    updateOrderStatus($order, 'paid');
}

function notifyUser($order) {
    sendInvoiceEmail($order);
}
  • Hindari Komentar yang Tidak Perlu – kode yang jelas seharusnya bisa “berbicara sendiri” atau mudah di pahami tanpa adanya komentar. Boleh ada komentar apabila benar-benar dibutuhkan.
  • Hindari Ambigu – Buat Kode yang Mudah Dipahami, kode yang baik seharunya bisa dengan mudah dipahami. Contoh : dari pada menggunakan if(!is_null($value)){} lebih baik if($value !== NULL ) . Contoh lain, dari pada if (user) { ... } lebih baik if (user !== null && user !== undefined) { ... }
  • Struktur dan Formatting Konsisten – Gunakan indentasi, spasi, dan konvensi gaya penulisan yang rapi dan konsisten.
  • Hindari duplikasi / redundan code –
// Buruk: Kode sama ditulis dua kali
if ($userType === 'admin') {
  sendEmail();
  logAction();
}
if ($userType === 'editor') {
  sendEmail();
  logAction();
}

// lebih baik
if (in_array($userType, ['admin', 'editor'])) {
  sendEmail();
  logAction();
}

  • Gunakan Error Handling – gunakan try catch dan handle error

Tips - tips dalam coding lainnya :

  • Hindari Nested If yang Dalam – Gunakan early return untuk menghindari indentasi berlapis dan membuat alur logika lebih flat dan mudah dibaca.
// Contoh salah
if ($user) {
    if ($user->isActive()) {
        if ($user->hasPermission('edit')) {
            // Do something
        }
    }
}

// Lebih baik 
if (! $user || ! $user->isActive() || ! $user->hasPermission('edit')) {
    return;
}
  • Gunakan Early Return untuk Validasi – simpan code yang mengandung return di paling atas untuk menghindari sistem membaca keseluruhan code walau pada akhirnya di berikan return.
// Contoh salah
function save(data) {
  if (data) {
    if (data.isValid) {
      // save logic
    }
  }
}

// Lebih baik 
function save(data) {
  if (!data || !data.isValid) return;

  // save logic
}
  • Hindari Magic Number & String – gunakan const untuk data - data yang tidak berubah
// contoh salah
if status_code == 403:
    raise Exception("Access Denied")


// lebih baik
const FORBIDDEN = 403;
if ($status_code == self::FORBIDDEN ){}
  • Pisahkan Logika Bisnis dari Presentasi –
// Buruk: campur logika & tampilan
function renderUser(user) {
  if (user.age > 18 && user.active && user.role === 'admin') {
    return `<p>Admin User</p>`;
  }
}

// Baik: logika dipisah
function isAdultAdmin(user) {
  return user.age > 18 && user.active && user.role === 'admin';
}

function renderUser(user) {
  if (isAdultAdmin(user)) {
    return `<p>Admin User</p>`;
  }
}
  • Pisahkan Tanggung Jawab – Setiap modul/fungsi/class harus fokus pada satu hal ( SRP – Single Responsibility Principle )
  • Deklarasi Fungsi Harus Jelas dan Spesifik – menghindari error karena tipe data tidak sesuai, dan mudah dipahami ekspektasi input / output
// contoh buruk tidak di ketahui tipe datanya, berpotensi error 
function calculate($a, $b) {
    return $a + $b;
}

// lebih baik, jelas input dan output
function calculateTotalPrice(int $price, int $tax): int {
    return $price + $tax;
}

Dan masih banyak lagi tips - tips yang akan ditemui best practicenya ketika melakukan pengembangan. Namun pada dasarnya menggunakan tujuan dari konsep yang sudah dijelaskan tadi. Analoginya, sama seperti kita punya rumah yang ingin terlihat rapi dan bersih, akan mudah untuk kita ketika mencari barang, atau menggunakan barang. Sama halnya kita tidak perlu dua microwave di satu rumah.