Ðак Ð¼Ñ Ð·Ð½Ð°ÐµÐ¼ из Ð³Ð»Ð°Ð²Ñ Ð¡ÑÑÑкÑÑÑа кода, комменÑаÑии могÑÑ Ð±ÑÑÑ Ð¾Ð´Ð½Ð¾ÑÑÑоÑнÑми, наÑинаÑÑимиÑÑ Ñ //, и многоÑÑÑоÑнÑми: /* ... */.
ÐбÑÑно Ð¼Ñ Ð¸Ñ Ð¸ÑполÑзÑем, ÑÑÐ¾Ð±Ñ Ð¾Ð¿Ð¸ÑаÑÑ, как и поÑÐµÐ¼Ñ ÑабоÑÐ°ÐµÑ ÐºÐ¾Ð´.
Ðа пеÑвÑй взглÑд, в комменÑаÑиÑÑ Ð½ÐµÑ Ð½Ð¸Ñего Ñложного, но новиÑки в пÑогÑаммиÑовании ÑаÑÑо пÑименÑÑÑ Ð¸Ñ Ð½ÐµÐ¿ÑавилÑно.
ÐÐ»Ð¾Ñ Ð¸Ðµ комменÑаÑии
ÐовиÑки ÑÐºÐ»Ð¾Ð½Ð½Ñ Ð¸ÑполÑзоваÑÑ ÐºÐ¾Ð¼Ð¼ÐµÐ½ÑаÑии, ÑÑÐ¾Ð±Ñ Ð¾Ð±ÑÑÑнÑÑÑ, «ÑÑо Ð´ÐµÐ»Ð°ÐµÑ ÐºÐ¾Ð´Â». ÐапÑимеÑ, Ñак:
// ÐÑÐ¾Ñ ÐºÐ¾Ð´ Ð´ÐµÐ»Ð°ÐµÑ ÑÑо (...) и Ð²Ð¾Ñ ÑÑо (...)
// ...и кÑо знаеÑ, ÑÑо еÑÑ...
оÑенÑ;
ÑложнÑй;
код;
Ðо в Ñ Ð¾ÑоÑем коде колиÑеÑÑво «обÑÑÑнÑÑÑÐ¸Ñ Â» комменÑаÑиев должно бÑÑÑ Ð¼Ð¸Ð½Ð¸Ð¼Ð°Ð»ÑнÑм. СеÑÑÑзно, код должен бÑÑÑ Ñаким, ÑÑÐ¾Ð±Ñ ÐµÐ³Ð¾ можно бÑло понÑÑÑ Ð±ÐµÐ· комменÑаÑиев.
ÐÑо ÑÑо еÑÑÑ Ñ Ð¾ÑоÑее пÑавило: «ÐÑли код наÑÑолÑко запÑÑаннÑй, ÑÑо ÑÑебÑÐµÑ ÐºÐ¾Ð¼Ð¼ÐµÐ½ÑаÑиев, Ñо, Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ, его ÑÑÐ¾Ð¸Ñ Ð¿ÐµÑеделаÑÑ?»
РеÑепÑ: вÑноÑиÑе код в ÑÑнкÑии
Ðногда вÑгодно замениÑÑ ÑаÑÑÑ ÐºÐ¾Ð´Ð° ÑÑнкÑией, напÑимеÑ, в Ñаком ÑлÑÑае:
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 СÑепенÑ, должна бÑÑÑ Ð½Ð°ÑÑÑалÑнÑм ÑиÑлом.
* @return {number} x, возведÑнное в n-нÑÑ ÑÑепенÑ.
*/
function pow(x, n) {
...
}
ÐодобнÑе комменÑаÑии позволÑÑÑ Ð½Ð°Ð¼ понимаÑÑ Ð½Ð°Ð·Ð½Ð°Ñение ÑÑнкÑии и пÑавилÑно ÐµÑ Ð¸ÑполÑзоваÑÑ Ð±ÐµÐ· Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ÑÑи заглÑдÑваÑÑ Ð² код.
ÐÑÑаÑи, многие ÑедакÑоÑÑ, Ñакие как WebStorm, пÑекÑаÑно Ð¸Ñ ÑаÑпознаÑÑ Ð´Ð»Ñ Ñого, ÑÑÐ¾Ð±Ñ Ð²ÑполниÑÑ Ð°Ð²Ñодополнение ввода и ÑазлиÑнÑе авÑомаÑиÑеÑкие пÑовеÑки кода.
Также ÑÑÑеÑÑвÑÑÑ Ð¸Ð½ÑÑÑÑменÑÑ, напÑимеÑ, JSDoc 3, коÑоÑÑе ÑмеÑÑ Ð³ÐµÐ½ÐµÑиÑоваÑÑ HTML-докÑменÑаÑÐ¸Ñ Ð¸Ð· комменÑаÑиев. ÐолÑÑиÑÑ Ð±Ð¾Ð»ÑÑе инÑоÑмаÑии о JSDoc Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе здеÑÑ: https://jsdoc.app.
- ÐоÑÐµÐ¼Ñ Ð·Ð°Ð´Ð°Ñа ÑеÑена именно Ñаким ÑпоÑобом?
-
Ðажно Ñо, ÑÑо напиÑано. Ðо Ñо, ÑÑо не напиÑано, Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð´Ð°Ð¶Ðµ более важнÑм, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð½Ð¸Ð¼Ð°ÑÑ Ð¿ÑоиÑÑ Ð¾Ð´ÑÑее. ÐоÑÐµÐ¼Ñ Ð·Ð°Ð´Ð°Ñа ÑеÑена именно ÑÑим ÑпоÑобом? Ðод не даÑÑ Ð¾ÑвеÑа.
ÐÑли еÑÑÑ Ð½ÐµÑколÑко ÑпоÑобов ÑеÑиÑÑ Ð·Ð°Ð´Ð°ÑÑ, Ñо поÑÐµÐ¼Ñ Ð²Ñ Ð²ÑбÑали именно ÑÑоÑ? ÐÑобенно еÑли Ð²Ð°Ñ ÑпоÑоб â не ÑамÑй оÑевиднÑй.
Ðез подобнÑÑ ÐºÐ¾Ð¼Ð¼ÐµÐ½ÑаÑиев возможна ÑледÑÑÑÐ°Ñ ÑиÑÑаÑиÑ:
- ÐÑ (или Ð²Ð°Ñ ÐºÐ¾Ð»Ð»ÐµÐ³Ð°) оÑкÑÑваеÑе напиÑаннÑй некоÑоÑое вÑÐµÐ¼Ñ Ð½Ð°Ð·Ð°Ð´ код и видиÑе, ÑÑо в нÑм еÑÑÑ, ÑÑо ÑлÑÑÑиÑÑ.
- ÐÑ Ð´ÑмаеÑе: «Ðаким глÑпÑм Ñ ÑанÑÑе бÑл и наÑколÑко Ñмнее ÑÑал ÑейÑаÑ», и пеÑепиÑÑваеÑе его на «более пÑавилÑнÑй и опÑималÑнÑй» ваÑианÑ.
- â¦Ðелание пеÑепиÑаÑÑ ÐºÐ¾Ð´ â ÑÑо Ñ Ð¾ÑоÑо. Ðо в пÑоÑеÑÑе Ð²Ñ Ð¿Ð¾Ð½Ð¸Ð¼Ð°ÐµÑе, ÑÑо «опÑималÑное» ÑеÑение на Ñамом деле не Ñакое Ñж и опÑималÑное. ÐÑ Ð´Ð°Ð¶Ðµ ÑмÑÑно пÑипоминаеÑе, поÑемÑ, Ñак как в пÑоÑлÑй Ñаз Ð²Ñ Ñже его пÑобовали. ÐÑ Ð²Ð¾Ð·Ð²ÑаÑаеÑеÑÑ Ðº пÑавилÑÐ½Ð¾Ð¼Ñ Ð²Ð°ÑианÑÑ, поÑÑаÑив вÑÐµÐ¼Ñ Ð·ÑÑ.
ÐомменÑаÑии, обÑÑÑнÑÑÑие ÑеÑение, оÑÐµÐ½Ñ Ð²Ð°Ð¶Ð½Ñ. Ðни помогаÑÑ Ð¿ÑодолжаÑÑ ÑазÑабоÑÐºÑ Ð² пÑавилÑном напÑавлении.
- Ркоде еÑÑÑ ÐºÐ°ÐºÐ¸Ðµ-Ñо ÑонкоÑÑи? Ðде они иÑполÑзÑÑÑÑÑ?
-
ÐÑли в коде еÑÑÑ ÐºÐ°ÐºÐ¸Ðµ-Ñо ÑонкоÑÑи и неоÑевиднÑе веÑи, его опÑеделÑнно нÑжно комменÑиÑоваÑÑ.
ÐÑого
ÐомменÑаÑии â важнÑй пÑизнак Ñ Ð¾ÑоÑего ÑазÑабоÑÑика, пÑиÑÑм как Ð¸Ñ Ð½Ð°Ð»Ð¸Ñие, Ñак и оÑÑÑÑÑÑвие.
ХоÑоÑие комменÑаÑии позволÑÑÑ Ð½Ð°Ð¼ поддеÑживаÑÑ ÐºÐ¾Ð´, даÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð²ÐµÑнÑÑÑÑÑ Ðº Ð½ÐµÐ¼Ñ Ð¿Ð¾Ñле пеÑеÑÑва и ÑÑÑекÑивнее его иÑполÑзоваÑÑ.
ÐомменÑиÑÑйÑе:
- ÐбÑÑÑ Ð°ÑÑ Ð¸ÑекÑÑÑÑ, вид Â«Ñ Ð²ÑÑоÑÑ Ð¿ÑиÑÑего полÑÑа».
- ÐÑполÑзование ÑÑнкÑий.
- ÐеоÑевиднÑе ÑеÑениÑ, важнÑе деÑали.
ÐзбегайÑе комменÑаÑиев:
- ÐоÑоÑÑе обÑÑÑнÑÑÑ, как ÑабоÑÐ°ÐµÑ ÐºÐ¾Ð´, и ÑÑо он делаеÑ.
- ÐÑполÑзÑйÑе Ð¸Ñ ÑолÑко в ÑÐµÑ ÑлÑÑаÑÑ , когда невозможно ÑделаÑÑ Ð½Ð°ÑÑолÑко пÑоÑÑой и ÑамодокÑменÑиÑованнÑй код, ÑÑо он не поÑÑебÑÐµÑ ÐºÐ¾Ð¼Ð¼ÐµÐ½ÑаÑиев.
СÑедÑÑва Ð´Ð»Ñ Ð³ÐµÐ½ÐµÑаÑии докÑменÑаÑии по кодÑ, Ñакие как JSDoc3, Ñакже иÑполÑзÑÑÑ ÐºÐ¾Ð¼Ð¼ÐµÐ½ÑаÑии: они Ð¸Ñ ÑиÑаÑÑ Ð¸ генеÑиÑÑÑÑ HTML-докÑменÑаÑÐ¸Ñ (или докÑменÑаÑÐ¸Ñ Ð² дÑÑгом ÑоÑмаÑе).
ÐомменÑаÑии
<code>, Ð´Ð»Ñ Ð½ÐµÑколÑÐºÐ¸Ñ ÑÑÑок кода — Ñег<pre>, еÑли болÑÑе 10 ÑÑÑок — ÑÑÑÐ»ÐºÑ Ð½Ð° пеÑоÑниÑÑ (plnkr, JSBin, codepenâ¦)