Penamaan yang Baik — Clean Code

Penamaan adalah skill paling penting dalam clean code. Nama yang baik membuat kode self-documenting — tidak perlu komentar untuk menjelaskan. Prinsip 1: Nama…

Penamaan adalah skill paling penting dalam clean code. Nama yang baik membuat kode self-documenting — tidak perlu komentar untuk menjelaskan.

Prinsip 1: Nama harus menjelaskan tujuan (intent)

// BURUK
const d = new Date();
const arr = users.filter(u => u.a);
let flag = false;

// BERSIH
const currentDate = new Date();
const activeUsers = users.filter(user => user.isActive);
let isFormSubmitted = false;

Prinsip 2: Hindari singkatan misterius

// BURUK
function calcTtlPrc(itms) {
  return itms.reduce((t, i) => t + i.p * i.q, 0);
}

// BERSIH
function calculateTotalPrice(items) {
  return items.reduce((total, item) => total + item.price * item.quantity, 0);
}

Prinsip 3: Boolean harus berbentuk pertanyaan

// BURUK
let open = true;
let user = false;
let data = true;

// BERSIH
let isModalOpen = true;
let hasUser = false;
let isDataLoaded = true;

// Prefix yang umum: is, has, can, should, will

Prinsip 4: Fungsi = verb, Variable = noun

// BURUK
function userData() { ... }      // noun — apa yang dilakukan?
function process() { ... }       // terlalu vague
const calculate = 100;           // verb untuk variable

// BERSIH
function fetchUserData() { ... } // jelas: mengambil data user
function validateEmail() { ... } // jelas: validasi email
const totalPrice = 100;          // noun untuk variable

Prinsip 5: Gunakan konvensi yang konsisten

// Pilih SATU style dan konsisten:
// get/fetch untuk mengambil data
function getUser() { ... }
function getUserOrders() { ... }

// is/has untuk boolean
function isValidEmail(email) { ... }
function hasPermission(user, action) { ... }

// handle untuk event handlers
function handleClick() { ... }
function handleFormSubmit() { ... }

// on untuk callback props
<Button onClick={handleClick} />

Prinsip 6: Panjang nama sesuai scope

// Loop pendek — nama pendek OK
for (let i = 0; i < 10; i++) { ... }
items.map(item => item.name);

// Scope lebar — nama harus deskriptif
const maximumLoginAttempts = 5;
const userAuthenticationToken = "...";

// BUKAN sebaliknya:
const m = 5; // apa ini? scope lebar tapi nama pendek
for (let userItemIndex = 0; userItemIndex < 3; userItemIndex++) { } // overkill untuk loop

Prinsip 7: Jangan encode tipe di nama

// BURUK (Hungarian notation)
const strName = "Budi";
const arrUsers = [1, 2, 3];
const objConfig = {};

// BERSIH
const name = "Budi";
const users = [1, 2, 3];
const config = {};
// IDE modern sudah menunjukkan tipe

Cheat sheet penamaan:

Konteks Buruk Bersih
Array list, data users, products, orderItems
Boolean flag, status isVisible, hasAccess, canEdit
Fungsi ambil data data(), users() fetchUsers(), getOrderById()
Event handler click(), submit() handleClick(), handleSubmit()
Counter c, n retryCount, pageNumber

🎭 Analogi sehari-hari

Penamaan variable itu kayak labelin kotak penyimpanan di gudang. Kotak label "Stuff" / "Misc" — kamu BUKA tiap kotak satu-satu pas nyari sesuatu (waktu terbuang). Kotak label "Documents 2024 Pajak Kuartal 3" / "Spare parts AC unit 2 lantai bawah" — kamu langsung ambil yang benar tanpa buka. Investasi awal beberapa detik nulis label yang jelas = hemat berjam-jam pencarian nanti. Variabel d vs currentDate — bedanya 11 karakter, manfaatnya ribuan jam tim devkamu untuk 5 tahun ke depan.

⚠️ Jebakan yang sering ditemui

🎯 Pilih prefix function — get vs fetch vs load vs find?

  • get* — sync access, gak hit network (getName(), getElementById())
  • fetch* — async + network (fetchUsers(), fetchOrderById())
  • load* — async + first-time load with side effects (loadConfig(), loadDashboard())
  • find* — search dengan kondisi, return null kalau gak ada (findUser(), findById())
  • is* — boolean check (isValid(), isAuthenticated())
  • has* — possession check (hasPermission(), hasErrors())
  • handle* — event handler (handleClick(), handleSubmit())
  • on* — callback prop (onClick, onChange)

Aturan: pilih konvensi tim, dokumentasikan di style guide, follow konsisten.

TL;DR: Penamaan = skill paling penting clean code. Aturan: nama jelaskan TUJUAN (intent), hindari singkatan misterius, boolean prefix is/has/can, fungsi = verb, variable = noun, panjang nama match scope. Konvensi konsisten: get (sync), fetch (async network), is/has (boolean), handle (event). Jangan encode tipe di nama (Hungarian notation outdated). IDE auto-complete bikin nama panjang gak masalah ngetik.

Yang akan kamu pelajari