- Saat meninjau codebase baru-baru ini, muncul pengalaman merasa lelah secara mental meskipun kualitas kodenya baik
- Hal ini berkaitan dengan keterbacaan, bukan kompleksitas kode itu sendiri
- Dihasilkan 8 pola untuk meningkatkan keterbacaan kode
Metrik keterbacaan kode dan metrik kompleksitas alternatif
- Tidak ada metrik yang universal dan digunakan secara luas untuk mengukur keterbacaan kode
- Yang ada hanya makalah akademik yang tidak dipakai di dunia nyata atau pendapat pribadi
- Alih-alih membuat metrik baru, fokus diberikan pada pola visual yang mudah didiskusikan siapa pun
- Syarat penting dalam metrik kompleksitas:
- Harus bisa diterapkan pada cuplikan source code atau fungsi individual
- Berfokus pada cara kode ditulis, bukan kompleksitas algoritme
- Tidak berfokus pada elemen gaya (nama variabel, spasi, indentasi, dll.)
Metrik kompleksitas Halstead
- Metrik kompleksitas kode yang dikembangkan oleh Maurice Halstead pada 1970-an
- Dapat mengkuantifikasi cara penulisan kode tanpa bergantung pada bahasa atau platform
- Menghitung panjang, volume, dan tingkat kesulitan program berdasarkan jumlah operator dan operan
- Nilai pengukuran utama:
- Jumlah operator unik (
n1)
- Jumlah operan unik (
n2)
- Jumlah total operator (
N1)
- Jumlah total operan (
N2)
- Semakin banyak operator dan operan yang digunakan, semakin tinggi kompleksitas kode
- Karena definisi operator dan operan tidak selalu jelas di semua bahasa, penting untuk memakai alat yang konsisten
Insight dari kompleksitas Halstead
- Fungsi yang pendek dan memiliki sedikit variabel lebih mudah dibaca
- Minimalkan penggunaan operator atau syntactic sugar yang spesifik bahasa
- Penggunaan chain dalam functional programming (
map/reduce/filter dan sejenisnya) akan menurunkan keterbacaan bila terlalu panjang
Kompleksitas kognitif (Cognitive Complexity)
- Metrik kompleksitas yang dikembangkan oleh SonarSource
- Upaya untuk mengukur kesulitan membaca kode dengan lebih akurat
- Tiga prinsip utama:
- Sintaks ringkas (shorthand constructs) mengurangi tingkat kesulitan membaca
- Putusnya alur nonlinier meningkatkan tingkat kesulitan
- Alur kontrol yang bertingkat meningkatkan tingkat kesulitan
Insight dari kompleksitas kognitif
- Sintaks ringkas itu padat, tetapi memiliki potensi risiko bug
- Pernyataan kondisi dan operator logika bila dipakai berlebihan akan menurunkan keterbacaan
- Penanganan exception adalah salah satu penyebab utama meningkatnya kompleksitas kode
goto umumnya sebaiknya dihindari, tetapi dalam situasi tertentu bisa berguna
- Struktur kontrol bertingkat sebaiknya dikurangi sebisa mungkin
Bentuk, pola, dan variabel dalam fungsi
- "Bentuk" visual fungsi memainkan peran penting dalam keterbacaan kode
- Tiga prinsip untuk meningkatkan keterbacaan:
- Gunakan nama variabel yang jelas dan spesifik
- Hindari duplikasi variabel (shadowing)
- Gunakan nama yang mudah dibedakan secara visual (hindari nama mirip seperti
i dan j)
- Perpendek masa hidup (liveness) variabel
- Semakin pendek cakupan penggunaan variabel, semakin baik
- Variabel yang bertahan lama melampaui batas fungsi meningkatkan kompleksitas
- Gunakan ulang pola kode yang sudah familier
- Menjaga pola kode yang konsisten meningkatkan keterbacaan
- Utamakan pola yang sudah dikenal daripada pendekatan baru
8 pola untuk meningkatkan keterbacaan kode
- Kurangi jumlah baris/operator/operan – fungsi kecil dan sedikit variabel meningkatkan keterbacaan
- Hindari pendekatan baru – pertahankan pola yang familier dalam codebase
- Pengelompokan – pisahkan chain fungsi yang panjang, iterator, dan sejenisnya ke fungsi bantu
- Sederhanakan kondisi – jaga pernyataan kondisi tetap pendek dan minimalkan campuran operator logika
- Minimalkan
goto – bila perlu, gunakan secara terbatas hanya untuk penanganan error
- Minimalkan nesting – kurangi logika bertingkat, dan jika perlu pisahkan ke fungsi
- Gunakan nama variabel yang jelas – pakai nama variabel yang spesifik dan tidak tumpang tindih
- Perpendek masa hidup variabel – jaga tetap singkat di dalam fungsi dan jangan melampaui batas fungsi
Kesimpulan
- Keterbacaan kode adalah elemen penting dari kualitas kode
- Halstead dan Cognitive Complexity dapat membantu mengkuantifikasi masalah keterbacaan dan memberi arah perbaikan
- Menulis kode yang ringkas dan jelas membuat pemeliharaan lebih mudah serta mengurangi kemungkinan munculnya bug
- Penulisan kode yang optimal memprioritaskan kesederhanaan, konsistensi, dan kejelasan
1 komentar
Opini Hacker News
Menghubungkan struktur pemrograman fungsional seperti map, reduce, dan filter memang ringkas, tetapi rantai yang panjang cenderung merusak keterbacaan
Aspek penting dari kode yang baik bersifat kualitatif dan literer
Masalah yang paling melelahkan saat membaca kode adalah kemutabelan
Fungsi kecil dan variabel yang sedikit pada umumnya lebih mudah dibaca
TypeScript membuat kode lebih sulit dibaca
Fungsi getOddness4 menimbulkan asimetri
Artikelnya menarik, tetapi kurang memuaskan
Upaya untuk mendefinisikan keterbacaan patut diapresiasi
Kompleksitas kode dapat direpresentasikan oleh ukuran pohon sintaks
Untuk rantai fungsi panjang atau callback, lebih baik membaginya ke dalam kelompok kecil dan menggunakan variabel dengan nama yang jelas