Як нам вÑдомо з ÑоздÑÐ»Ñ Ð¡ÑÑÑкÑÑÑа кодÑ, коменÑаÑÑ Ð¼Ð¾Ð¶Ð½Ð° пиÑаÑи Ñк на Ð¾Ð´Ð½Ð¾Ð¼Ñ ÑÑдкÑ: поÑинаÑÑи його з // Ñак Ñ Ð½Ð° декÑлÑкоÑ
ÑÑдкаÑ
, ÑоздÑлÑÑÑи ÑÑ
за Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ /* ... */.
ÐазвиÑай ми викоÑиÑÑовÑÑмо коменÑаÑÑ Ð´Ð»Ñ Ð¾Ð¿Ð¸ÑÑ Ñого, Ñк Ñ ÑÐ¾Ð¼Ñ Ð½Ð°Ñ ÐºÐ¾Ð´ пÑаÑÑÑ.
Ðа пеÑÑий поглÑд, коменÑÑÐ²Ð°Ð½Ð½Ñ Ð¼Ð¾Ð¶Ðµ здаваÑиÑÑ Ð¾Ñевидним, пÑоÑе поÑаÑкÑвÑÑ ÑаÑÑо викоÑиÑÑовÑÑÑÑ ÑÑ Ð½ÐµÐ¿ÑавилÑно.
ÐÐ¾Ð³Ð°Ð½Ñ ÐºÐ¾Ð¼ÐµÐ½ÑаÑÑ
ÐоÑаÑкÑвÑÑ Ð½Ð°Ð¼Ð°Ð³Ð°ÑÑÑÑÑ Ð²Ð¸ÐºÐ¾ÑиÑÑовÑваÑи коменÑаÑÑ, Ñоб поÑÑниÑи âÑо Ñаме вÑдбÑваÑÑÑÑÑ Ñ ÐºÐ¾Ð´Ñâ. ÐапÑиклад:
// Цей код зÑобиÑÑ Ñе (...) а поÑÑм оÑÑ Ñе (...)
// ...Ñ Ñ
Ñо Ð·Ð½Ð°Ñ Ñо Ñе...
дÑже;
Ñкладний;
код;
ÐÑоÑе в ÑкÑÑÐ½Ð¾Ð¼Ñ ÐºÐ¾Ð´Ñ, кÑлÑкÑÑÑÑ ÑÐ°ÐºÐ¸Ñ âпоÑÑнÑвалÑÐ½Ð¸Ñ â коменÑаÑÑв повинна бÑÑи мÑнÑмалÑноÑ. СеÑйозно, код повинен бÑÑи зÑозÑмÑлим без Ð½Ð¸Ñ .
Ð Ñ Ð¾ÑоÑе пÑавило з пÑÐ¸Ð²Ð¾Ð´Ñ ÑÑого: âÑкÑо код наÑÑÑлÑки не зÑозÑмÑлий, Ñо поÑÑебÑÑ ÐºÐ¾Ð¼ÐµÐ½ÑаÑÑв, можливо його кÑаÑе пеÑепиÑаÑиâ.
РеÑепÑ: виноÑÑÑе код Ñ ÑÑнкÑÑÑ
ÐÐ½Ð¾Ð´Ñ Ð¼Ð°Ñ ÑÐµÐ½Ñ Ð·Ð°Ð¼ÑниÑи ÑаÑÑÐ¸Ð½Ñ ÐºÐ¾Ð´Ñ Ð½Ð° ÑÑнкÑÑÑ, напÑиклад:
function showPrimes(n) {
nextPrime:
for (let i = 2; i < n; i++) {
// пеÑевÑÑка Ñи Ñ `i` пÑоÑÑим ÑиÑлом
for (let j = 2; j < i; j++) {
if (i % j == 0) continue nextPrime;
}
alert(i);
}
}
ÐÑаÑим ваÑÑанÑом бÑло б обгоÑнÑÑи код в окÑÐµÐ¼Ñ ÑÑнкÑÑÑ isPrime:
function showPrimes(n) {
for (let i = 2; i < n; i++) {
if (!isPrime(i)) continue;
alert(i);
}
}
function isPrime(n) {
for (let i = 2; i < n; i++) {
if (n % i == 0) return false;
}
return true;
}
Ð¢ÐµÐ¿ÐµÑ Ð¼Ð¸ можемо легко зÑозÑмÑÑи код. Сама ÑÑнкÑÑÑ Ð·Ð°Ð¼Ñнила нам коменÑаÑ. Такий код називаÑÑÑÑÑ ÑамоопиÑним.
РеÑепÑ: ÑÑвоÑÑйÑе ÑÑнкÑÑÑ
Ð ÑкÑо ми маÑмо Ñакий довгий ÑÑÐ°Ð³Ð¼ÐµÐ½Ñ ÐºÐ¾Ð´Ñ:
// ÑÑÑ Ð¼Ð¸ додаÑмо вÑÑкÑ
for(let i = 0; i < 10; i++) {
let drop = getWhiskey();
smell(drop);
add(drop, glass);
}
// ÑÑÑ Ð¼Ð¸ додаÑмо ÑÑк
for(let t = 0; t < 3; t++) {
let tomato = getTomato();
examine(tomato);
let juice = press(tomato);
add(juice, glass);
}
// ...
Ð¢Ð¾Ð´Ñ ÐºÑаÑим ваÑÑанÑом бÑде замÑниÑи його на окÑÐµÐ¼Ñ ÑÑнкÑÑÑ:
addWhiskey(glass);
addJuice(glass);
function addWhiskey(container) {
for(let i = 0; i < 10; i++) {
let drop = getWhiskey();
//...
}
}
function addJuice(container) {
for(let t = 0; t < 3; t++) {
let tomato = getTomato();
//...
}
}
ÐÐ½Ð¾Ð²Ñ Ð¶ Ñаки, ÑмâÑ ÑÑнкÑÑй ÑÐ°Ð¼Ñ Ð¾Ð¿Ð¸ÑÑÑÑÑ, Ñо в Ð½Ð¸Ñ Ð²ÑдбÑваÑÑÑÑÑ. ÐÐµÐ¼Ð°Ñ Ð¿Ð¾ÑÑеби коменÑÑваÑи Ñакий код. Також кÑаÑÐ¾Ñ Ñ ÑÑÑÑкÑÑÑа кодÑ, коли вÑн ÑозподÑлений. СÑÐ°Ñ Ð·ÑозÑмÑлим, Ñо ÑÑнкÑÑÑ ÑобиÑÑ, Ñо вона пÑÐ¸Ð¹Ð¼Ð°Ñ Ñ Ñо повеÑÑаÑ.
ÐаÑпÑÐ°Ð²Ð´Ñ Ð¼Ð¸ не можемо ÑникнÑÑи повнÑÑÑÑ âпоÑÑнÑвалÑÐ½Ð¸Ñ â коменÑаÑÑв. Ð ÑÐºÐ»Ð°Ð´Ð½Ñ Ð°Ð»Ð³Ð¾ÑиÑми. Також ÑÑнÑÑÑÑ Ð´ÐµÑÐºÑ âпÑийомиâ Ð´Ð»Ñ Ð¾Ð¿ÑимÑзаÑÑÑ. ÐÑоÑе, Ñк пÑавило, ми Ð¿Ð¾Ð²Ð¸Ð½Ð½Ñ Ð½Ð°Ð¼Ð°Ð³Ð°ÑиÑÑ Ð·Ð°Ð»Ð¸ÑаÑи код пÑоÑÑим Ñа ÑамоопиÑним.
ХоÑоÑÑ ÐºÐ¾Ð¼ÐµÐ½ÑаÑÑ
Тож, поÑÑнÑвалÑÐ½Ñ ÐºÐ¾Ð¼ÐµÐ½ÑаÑÑ Ð·Ð°Ð·Ð²Ð¸Ñай поганÑ. Ð¯ÐºÑ Ð¶ ÑÐ¾Ð´Ñ Ñ Ð¾ÑоÑÑ?
- ÐпиÑÑйÑе аÑÑ ÑÑекÑÑÑÑ
- ÐодавайÑе Ð¾Ð¿Ð¸Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½ÑÑв виÑого ÑÑвнÑ, Ñк вони взаÑмодÑÑÑÑ, Ñкий поÑÑк ÑпÑавлÑÐ½Ð½Ñ Ð¼Ð°ÑÑÑ Ñ ÑÑÐ·Ð½Ð¸Ñ Ð¾Ð±ÑÑÐ°Ð²Ð¸Ð½Ð°Ñ â¦ Ð¯ÐºÑо коÑоÑко â оглÑд ÐºÐ¾Ð´Ñ Ð· виÑоÑÑ Ð¿ÑаÑиного полÑоÑÑ. Ð ÑпеÑÑалÑна мова UML Ð´Ð»Ñ Ð¿Ð¾Ð±Ñдови дÑагÑам виÑокоÑÑÐ²Ð½ÐµÐ²Ð¾Ñ Ð°ÑÑ ÑÑекÑÑÑи кодÑ. ÐÑ Ð¾Ð´Ð½Ð¾Ð·Ð½Ð°Ñно ваÑÑо вÑиÑи.
- ÐокÑменÑÑйÑе паÑамеÑÑи ÑÑнкÑÑÑ Ñа ÑÑ Ð²Ð¸ÐºÐ¾ÑиÑÑаннÑ
- ÐÑнÑÑ ÑпеÑÑалÑний ÑинÑакÑÐ¸Ñ JSDoc Ð´Ð»Ñ Ð´Ð¾ÐºÑменÑаÑÑÑ ÑÑнкÑÑÑ: ÑÑ Ð²Ð¸ÐºÐ¾ÑиÑÑаннÑ, паÑамеÑÑи, знаÑеннÑ, Ñо повеÑÑаÑ.
ÐапÑиклад:
/**
* повеÑÑÐ°Ñ x Ñ n-й ÑÑепенÑ.
*
* @param {number} x ÑиÑло, Ñо ÑÑеба пÑднеÑÑи до ÑÑепенÑ.
* @param {number} n cÑепÑнÑ, повинно бÑÑи наÑÑÑалÑним ÑиÑлом.
* @return {number} x пÑднеÑене Ñ n-Ð½Ð½Ñ ÑÑепÑнÑ.
*/
function pow(x, n) {
...
}
Ð¢Ð°ÐºÑ ÐºÐ¾Ð¼ÐµÐ½ÑаÑÑ Ð´Ð¾Ð·Ð²Ð¾Ð»ÑÑÑÑ Ð½Ð°Ð¼ зÑозÑмÑÑи меÑÑ ÑÑнкÑÑÑ Ñа викоÑиÑÑовÑваÑи ÑÑ Ð¿ÑавилÑно без поÑÑеби зазиÑаÑи Ñ ÑÑ ÐºÐ¾Ð´.
Ðо ÑеÑÑ, багаÑо ÑедакÑоÑÑв, напÑиклад WebStorm можÑÑÑ ÑÑ ÑозÑмÑÑи Ñа викоÑиÑÑовÑваÑи Ð´Ð»Ñ Ð°Ð²ÑÐ¾Ð´Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ñ Ð´ÐµÑÐºÐ¾Ñ Ð°Ð²ÑомаÑиÑÐ½Ð¾Ñ Ð¿ÐµÑевÑÑки кодÑ.
Також Ñ ÑнÑÑÑÑменÑи, напÑиклад JSDoc 3, ÑÐºÑ Ð¼Ð¾Ð¶ÑÑÑ Ð³ÐµÐ½ÐµÑÑваÑи HTML-докÑменÑаÑÑÑ Ð· коменÑаÑÑв. Ðи можеÑе поÑиÑаÑи бÑлÑÑе пÑо JSDoc ÑÑÑ: https://jsdoc.app.
- Ð§Ð¾Ð¼Ñ Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ Ð±Ñло виÑÑÑено Ñ Ñакий ÑпоÑÑб?
- Те, Ñо напиÑано Ñ Ð´Ñже важливим. ÐÑоÑе, Ñе, Ñо не напиÑано може бÑÑи Ñе бÑлÑÑ Ð²Ð°Ð¶Ð»Ð¸Ð²Ð¸Ð¼, Ñоб зÑозÑмÑÑи, Ñо Ñаме вÑдбÑваÑÑÑÑÑ. Ð§Ð¾Ð¼Ñ Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ Ð±Ñло виÑÑÑено Ñаме Ñ Ñакий ÑпоÑÑб? Ðод не Ð´Ð°Ñ Ð²ÑдповÑÐ´Ñ Ð½Ð° Ñе пиÑаннÑ.
ЯкÑо ÑÑнÑÑ Ð´ÐµÐºÑлÑка ÑпоÑобÑв виÑÑÑÐµÐ½Ð½Ñ Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ, ÑÐ¾Ð¼Ñ Ñаме Ñей? ÐÑобливо, ÑкÑо Ñей ÑпоÑÑб не найбÑлÑÑ Ð¾Ñевидний.
Ðез ÑÐ°ÐºÐ¸Ñ ÐºÐ¾Ð¼ÐµÐ½ÑаÑÑв можлива наÑÑÑпна ÑиÑÑаÑÑÑ:
- Ðи (або Ð²Ð°Ñ ÐºÐ¾Ð»ÐµÐ³Ð°) вÑдкÑÐ¸Ð²Ð°Ñ ÐºÐ¾Ð´, напиÑаний колиÑÑ ÑанÑÑе, Ñ Ð±Ð°ÑиÑÑ, Ñо вÑн âнеопÑималÑнийâ.
- Ðи дÑмаÑÑе: âЯкий Ñ Ð±Ñв недоÑвÑдÑений, Ñ Ð½Ð°ÑкÑлÑки ÑозÑмнÑÑим Ñ ÑÑав заÑазâ, Ñ Ð¿ÐµÑепиÑÑÑÑе код викоÑиÑÑовÑÑÑи âбÑлÑÑ Ð¾Ñевидний Ñ Ð¿ÑавилÑнийâ ваÑÑанÑ.
- â¦ÐÐ°Ð¶Ð°Ð½Ð½Ñ Ð¿ÐµÑепиÑаÑи код бÑло Ñ Ð¾ÑоÑим. Ðле в пÑоÑеÑÑ Ð²Ð¸ помÑÑаÑÑе, Ñо âбÑлÑÑ Ð¾Ñевиднеâ ÑÑÑÐµÐ½Ð½Ñ Ð½Ðµ Ñ Ð¾Ð¿ÑималÑним. Ðи навÑÑÑ ÑмÑÑно пÑигадÑÑÑе ÑÐ¾Ð¼Ñ Ð²Ð¾Ð½Ð¾ Ñак, ÑÐ¾Ð¼Ñ Ñо колиÑÑ Ð´Ð°Ð²Ð½Ð¾ вже намагалиÑÑ ÑпÑобÑваÑи Ñакий ваÑÑанÑ. Ðи веÑÑаÑÑе пÑавилÑне ÑÑÑеннÑ, пÑоÑе ÑÐ°Ñ Ð±Ñло виÑÑаÑено даÑемно.
ÐоменÑаÑÑ, ÑÐºÑ Ð¿Ð¾ÑÑнÑÑÑÑ ÑÑÑÐµÐ½Ð½Ñ Ñ Ð´Ñже важливими. Ðони допомагаÑÑÑ Ð¿ÑодовжÑваÑи ÑозÑÐ¾Ð±ÐºÑ Ð¿ÑавилÑним ÑлÑÑ Ð¾Ð¼.
- Чи Ñ ÑкÑÑÑ ÑонкоÑÑ Ñ ÐºÐ¾Ð´Ñ? Ðе вони викоÑиÑÑовÑÑÑÑÑÑ?
- ЯкÑо код Ð¼Ð°Ñ ÑкÑÑÑ ÑонкоÑÑ Ñа неоÑÐµÐ²Ð¸Ð´Ð½Ñ ÑеÑÑ, його ÑоÑно ваÑÑо коменÑÑваÑи.
ÐÑдÑÑмки
ÐоменÑаÑÑ Ñ Ð²Ð°Ð¶Ð»Ð¸Ð²Ð¾Ñ Ð¾Ð·Ð½Ð°ÐºÐ¾Ñ Ñ Ð¾ÑоÑого ÑозÑобника: Ñк ÑÑ Ð½Ð°ÑвнÑÑÑÑ, Ñак Ñ ÑÑ Ð²ÑдÑÑÑнÑÑÑÑ.
ХоÑоÑÑ ÐºÐ¾Ð¼ÐµÐ½ÑаÑÑ Ð¿Ð¾Ð»ÐµÐ³ÑÑÑÑÑ Ð½Ð°Ð¼ пÑдÑÑÐ¸Ð¼ÐºÑ ÐºÐ¾Ð´Ñ, веÑÑаÑиÑÑ Ð´Ð¾ нÑого ÑеÑез деÑкий ÑÐ°Ñ Ñа викоÑиÑÑовÑваÑи його бÑлÑÑ ÐµÑекÑивно.
ÐоменÑÑйÑе наÑÑÑпне:
- ÐагалÑÐ½Ñ Ð°ÑÑ ÑÑекÑÑÑÑ, Ð¾Ð¿Ð¸Ñ âвиÑокого ÑÑвнÑâ.
- ÐикоÑиÑÑÐ°Ð½Ð½Ñ ÑÑнкÑÑй.
- ÐÐ°Ð¶Ð»Ð¸Ð²Ñ ÑÑÑеннÑ, оÑобливо, ÑкÑо вони не Ñ Ð¾Ñевидним.
УникайÑе коменÑаÑÑ:
- Ð¯ÐºÑ Ð¾Ð¿Ð¸ÑÑÑÑÑ, Ñк код пÑаÑÑÑ Ñ Ñо вÑн ÑобиÑÑ.
- ÐиÑÑÑÑ ÑÑ ÑÑлÑки Ñ ÑÐ¾Ð¼Ñ Ð²Ð¸Ð¿Ð°Ð´ÐºÑ, коли не Ð¼Ð°Ñ Ð·Ð¼Ð¾Ð³Ð¸ напиÑаÑи пÑоÑÑий Ñа ÑамоопиÑний код, ÑÐºÐ¾Ð¼Ñ Ð¿Ð¾ÑÑÐ½ÐµÐ½Ð½Ñ Ð½Ðµ поÑÑÑбнÑ.
ÐоменÑаÑÑ Ñакож викоÑиÑÑовÑÑÑÑÑÑ ÑнÑÑÑÑменÑами Ð´Ð»Ñ Ð°Ð²ÑомаÑиÑÐ½Ð¾Ñ Ð³ÐµÐ½ÐµÑаÑÑÑ Ð´Ð¾ÐºÑменÑаÑÑÑ, напÑиклад JSDoc3 â вони ÑиÑаÑÑÑ ÑÑ Ñа генеÑÑÑÑÑ HTML-докÑменÑи (або докÑменÑи в ÑнÑÐ¾Ð¼Ñ ÑоÑмаÑÑ).
ÐоменÑаÑÑ
<code>, Ð´Ð»Ñ ÐºÑлÑÐºÐ¾Ñ ÑÑдкÑв â обгоÑнÑÑÑ ÑÑ Ñегом<pre>, Ð´Ð»Ñ Ð¿Ð¾Ð½Ð°Ð´ 10 ÑÑдкÑв â викоÑиÑÑовÑйÑе пÑÑоÑниÑÑ (plnkr, jsbin, codepenâ¦)