Kod sifati

Izohlar

Izohlar (comments) โ€” kodda dvigatel e'tiborsiz qoldiradigan matn. Ular dasturchilar uchun tushuntirish yozadi. Ammo yaxshi izoh yozish โ€” alohida mahorat. Ko'p izoh har doim ham yaxshi emas.

Izoh sintaksisi

JavaScript'da izohlar ikki xil bo'ladi:

// bir qatorli izoh

/*
  ko'p qatorli
  izoh
*/

let x = 5; // qator oxirida ham yozish mumkin

Yomon izohlar

Ko'plab yangi dasturchilar izohlarni "kod nima qilyapti" ni tushuntirish uchun ishlatadi. Masalan:

// yomon: kod nima qilishini takrorlaydi
let i = 0; // i ni nolga tenglashtiramiz
i = i + 1; // i ni bittaga oshiramiz

Bunday izohlar deyarli befoyda โ€” ular kodda allaqachon ko'rinib turgan narsani takrorlaydi. Yaxshi kodning o'zi "o'zini o'zi tushuntiradi" (self-descriptive) bo'lishi kerak.

Agar kod shu qadar chalkash bo'lsaki, uni tushuntirish uchun izoh kerak bo'lsa โ€” bu ko'pincha kodni qayta yozish kerakligining belgisi. Izoh o'rniga kodni soddalashtiring.

Kodni izoh o'rniga qayta yozish

Ba'zan chalkash kod bo'lagini izohlash o'rniga, uni alohida mazmunli nomli funksiyaga ajratish yaxshiroq:

// izoh bilan
// birlamchi son ekanligini tekshiramiz
for (let i = 2; i < n; i++) {
  if (n % i === 0) return false;
}
// yaxshiroq: mazmunli nomli funksiya
function birlamchiSonmi(n) {
  for (let i = 2; i < n; i++) {
    if (n % i === 0) return false;
  }
  return true;
}

Endi funksiya nomining o'zi maqsadni tushuntiradi โ€” izoh kerak emas.

Yaxshi izohlar: nima uchun?

Foydali izohlar odatda nima qilinayotganini emas, nega shunday qilinayotganini tushuntiradi. Bu "yuqori darajadagi" izohlar. Ular quyidagilarni yoritadi:

// yaxshi: NEGA shunday qilinganini tushuntiradi
// Bu yerda tsiklni teskari tartibda aylantiramiz,
// chunki bu massivdan element o'chirishda
// indekslarning "sirg'anib ketishini" oldini oladi.
for (let i = arr.length - 1; i >= 0; i--) {
  if (arr[i] === null) arr.splice(i, 1);
}

Funksiyalarni hujjatlashtirish

Funksiya nima qilishini, qanday parametr olishini va nima qaytarishini tavsiflash uchun maxsus JSDoc uslubi bor. Bu izohlarni muharringiz o'qib, avtomatik yordam ko'rsatadi:

/**
 * n-darajaga ko'tarish.
 *
 * @param {number} x Ko'tariladigan son.
 * @param {number} n Daraja (butun son bo'lishi kerak).
 * @return {number} x ning n-darajasi.
 */
function pow(x, n) {
  let natija = 1;
  for (let i = 0; i < n; i++) {
    natija *= x;
  }
  return natija;
}
JSDoc izohlarini VS Code va WebStorm tushunadi: funksiyani chaqirganingizda ular parametrlar va tavsifni avtomatik ko'rsatadi.

Xulosa

Yaxshi izoh belgisi โ€” bu izohning yo'qligi. Kodning o'zi imkon qadar tushunarli bo'lsin. Kerakli izohlar:

Kerakmas izohlar esa โ€” kod nima qilishini so'zma-so'z takrorlaydi va faqat chalg'itadi.