x

Einloggen

Hast du noch keinen Account? Jetzt registrieren!

Кодэкс канвенцый для мовы праграмавання JavaScript

Original by Douglas Crockford



Гэта набор кадавання канвенцый і кіраваў выкарыстанні праграмавання JavaScript. У яго аснове ляжыць Sun дакумент Кодэкс канвенцый для мовы праграмавання Java. Ён, вядома, моцна зменены, паколькі JavaScript - гэта не Java.

Доўгатэрміновая каштоўнасць праграмнага забеспячэння для арганізацыі знаходзіцца ў прамой залежнасці ад якасці кода. За сваё жыццё праграма будзе запускацца шматлікімі парамі рук і вока. Калі праграма зможа выразна паведаміць яе структуры і характарыстыкі, меней верагодна, што будзе падвергнута зменам у не гэтак аддаленай будучыні.

Кодэкс канвенцыі можа дапамагчы зменшыць далікатнасць праграм.

Увесь наш JavaScript-код адрасуецца напроста публіцы. Ён заўсёды павінен быць якасным.

Акуратна па пунктах.



JavaScript файлы





JavaScript праграма павінна быць захавана і пастаўляцца ў выглядзе .js файлаў.

JavaScript код не павінен быць убудаваны ў файлы HTML, калі код прыналежыць да адной сесіі. HTML кодэкс значна павялічвае вагу старонкі без магчымасці для змякчэння наступстваў за кошт кэшавання і сціскі.

<script src=filename.js> пазнакі павінны быць знаходзіцца ў канцы цела, як гэта магчыма. Гэта змяншае эфект затрымкі ўведзеных сцэнар загрузкі на іншай старонцы кампанентаў. Няма неабходнасці выкарыстоўваць атрыбуты language ці type. Гэта сервер, а не тэг вызначае MIME тып.



Водступ





Адзінка водступу роўная чатыром прабелам. Выкарыстанні ўкладак варта пазбягаць, таму што (на момант напісання артыкула ў 21-м павеку) усё яшчэ не з'яўляецца стандартным для месцавання табуляцыя. Выкарыстанне прасторы можа вырабляць да павелічэння памеру файла, але памер не мае значэнні ў лакальнай сетцы, а розніца ўхіляецца шляхам мадыфікацыі.



Даўжыня лініі





Пазбягайце лініі даўжэй 80 знакаў. Калі заява не змяшчаецца на адным радку, можа быць неабходна, каб яе зламаць. Месца перапынак пасля аператара, у ідэале пасля коскі. Перапынак пасля аператар змяншае верагоднасць таго, што скапіяваць і ўставіць памылка будзе маскіравацца коскай устаўкі. У наступным радку павінны мець водступ 8 прастор.



Каментары





Будзьце шчодрымі з каментарамі. Мэтазгодна пакінуць інфармацыю, якая будзе чытаць пазней людзей (магчыма, сябе), якія неабходна будзе зразумець, што вы зрабілі. Каментары павінны быць добра напісаны і ясна, як і код яны анатавання. Выпадковы самародак гумару можа быць ацэнены. Расчараванні і крыўды не будзе.

Важна, што каментары, захоўваюцца да сучасных. Хібныя каментары могуць зрабіць праграмы яшчэ складаней чытаць і разумець.

Зрабіць каментары сэнс. Фокус на тым, што не адразу прыкметныя. Не марнуйце час на чытача

i = 0; // Set i to zero.

Наогул выкарыстанне лініі каментароў. Захаваць блок каментары для афіцыйнай дакументацыі, і для каментавання.



Аб'ява зменных





Усе зменныя павінны быць абвешчаны да выкарыстоўваць. JavaScript не патрабуе гэтага, але гэта робіць праграму зручнейшымі для чытання і робіць яго лягчэй выявіць неабвешчаныя зменныя, якія могуць стаць якія разумеюцца глабальных.

Якая разумеецца глабальныя зменныя ніколі не павінны выкарыстоўвацца.

var павінен быць першым аператарам у целе функцыі.

Пажадана, што кожная зменная надаваць сваю лінію і каментары. Яны павінны быць пералічаны ў алфавітным парадку.

var currentEntry; // currently selected table entry

var level; // indentation level

var size; // size of table

JavaScript не мае ў межах блока, так што вызначэнне зменных у блоках можа збянтэжыць праграмістаў, якія маюць досвед працы з іншым чальцом сям'і Мовы C. Вызначыць усе зменныя ў верхняй частцы функцыі.

Выкарыстанне глабальных зменных павінна быць мінімальным. Якая разумеецца глабальныя зменныя ніколі не павінны выкарыстоўвацца.



Функцыя Заявы





Усе функцыі павінны быць абвешчаны да іх выкарыстання. Унутраныя функцыі павінны вынікаць var заява. Гэта дапамагае выразна, якія зменныя ўваходзяць у сферу яго дзеяння.

Там не павінна быць прабелаў паміж імем функцыі і ( (злева у дужках) свайго спісу параметраў. Там павінна быць адна прастора паміж ) (правая дужка) і { (злева фігурнай дужкай), які пачынаецца заява цела. Само цела з водступам у чатыры прабелу. } (правая фігурная дужка) прыведзены ў адпаведнасць з прамой, якая змяшчае пачала аб'ява функцыі.

function outer(c, d) {

var e = c * d;

function inner(a, b) {

return (e * a) + b;

}



return inner(0, 1);

}

Гэта дамова працуе з JavaScript, бо ў JavaScript, функцыі і аб'екта литералы можна змесцаваць у любым месцы, што выраз не дапушчаецца. Ён забяспечвае лепшае чытанне убудаваных функцый і складаных структур.

function getElementsByClassName(className) {

var results = [];

walkTheDOM(document.body, function (node) {

var a; // array of class names

var c = node.className; // the node's classname

var i; // loop counter



// If the node has a class name, then split it into a list of simple names.

// If any of them match the requested name, then append the node to the set of results.



if (c) {

a = c.split(' ');

for (i = 0; i < a.length; i += 1) {

if (a[i] === className) {

results.push(node);

break;

}

}

}

});

return results;

}

Калі функцыя літаральна з'яўляецца ананімнай, не павінна быць прабелаў паміж словам function і ( (злева у дужках). Калі прастора апушчаны, тое можа апынуцца, што функцыі з'яўляецца імя function , якая з'яўляецца няправільнае чытанне.

div.onclick = function (e) {

return false;

};



that = {

method: function () {

return this.datum;

},

datum: 0

};

Выкарыстанне глабальнай функцыі павінны быць зведзены да мінімуму.

Калі функцыя будзе высылацца адразу, увесь выраз выкліку павінны быць загорнутыя ў рагепз так, каб было ясна, што кошт вырабляецца з'яўляецца вынікам функцыі, а не самай функцыі.

var collection = (function () {

var keys = [], values = [];

return {

get: function (key) {

var at = keys.indexOf(key);

if (at >= 0) {

return values[at];

}

},

set: function (key, value) {

var at = keys.indexOf(key);

if (at < 0) {

at = keys.length;

}

keys[at] = key;

values[at] = value;

},

remove: function (key) {

var at = keys.indexOf(key);

if (at >= 0) {

keys.splice(at, 1);

values.splice(at, 1);

}

}

};

}());


Імёны





Імёны павінны быць утвораны з 26 верхніх і малыя літары ( .. A Z , .. a z ), 10 лічбаў ( 0 .. 9 ) і _ (underbar). Пазбягайце выкарыстанні міжнародных знакаў, паколькі яны не могуць добра чытаць і разумець ва ўсім свеце. Не выкарыстоўвайце $ (знак даляра) ці \ (зваротны слэш) у назвах.

Не выкарыстоўвайце _ (underbar) у якасці першага знака імя. Гэта часам выкарыстоўваецца, каб паказаць асабістае жыццё, але насамрэч не забяспечваюць прыватнасць. Калі важная прыватнасць, выкарыстанне формаў, якія забяспечваюць прыватных чальцоў . Пазбягайце канвенцый, якія дэманструюць адсутнасць кампетэнцыі.

Большасць зменных і функцый павінны пачынацца з літары ніжняга рэгістра.

Канструктар функцый, якія павінны быць скарыстаны з new прэфіксам павінна пачынацца з загалоўнай літары. JavaScript пытанняў, ні падчас кампіляцыі папярэджання, ні падчас выканання папярэджанне, калі патрабуецца new апушчаны. Дрэнныя рэчы могуць адбыцца, калі new не выкарыстоўваецца, так што капіталізацыя канвенцыі з'яўляецца толькі абарона ў нас ёсць.

Глабальныя зменныя павінны быць загалоўнымі літарамі. (JavaScript не мае макрасаў ці канстант, так што адмысловага сэнсу ў выкарыстанні загалоўнымі літарамі для пазначэння функцый JavaScript, што не мае.)



Аб'явы





Простыя аператары



Кожны радок павінен утрымоўваць не больш за аднаго аператара. Пакладзяце ; (кропка з коскі) у канцы кожнай простай заявы. Звернеце ўвагу, што прызначэнне заява, якое складаецца ва ўсталёўцы функцыі ці аб'екта аператар прысвойвання і павінен сканчацца кропкай з коскі.

JavaScript дазваляе любому выразы, якія будуць выкарыстоўвацца ў якасці заявы. Гэта можа маскіраваць некаторыя памылкі, у прыватнасці, у прысутнасці коскі ўстаўкі. Толькі выразы, якія павінны выкарыстоўвацца ў якасці заявы заданняў і выклікаў.



Складовыя аператары



Падворак сцвярджэння гэтай заявы, якія змяшчаюць спісы аператараў, зняволеных у { } (фігурныя дужкі).

  • Прыкладаемай ведамасці павінны мець водступ у чатыры больш прасторы.
  • { (злева фігурнай дужкай) павінны быць у канцы радка, якая пачынаецца складовай аператар.
  • } (правая фігурная дужка) варта напачатку радкі і з водступам ва ўвязцы з пачатку радка, якая змяшчае адпаведныя { (злева фігурнай дужкай).
  • Двукоссі павінны выкарыстоўвацца вакол усёй аб'явы, нават адной заявы, калі яны з'яўляюцца часткай структуры кіравання, напрыклад, if і for выступ. Гэта дазваляе дадаць заявы без уводзін выпадкова памылак.




Надпісы



Заява этыкеткі з'яўляюцца неабавязковымі. Толькі гэтыя заявы павінны быць маркіраваны: while ,

do, for, switch.



return аб'ява



return заявы са значэннем не павінны выкарыстоўваць ( ) (круглыя дужкі) вакол кошту. Вартасным выразе вяртанне павінна пачынацца на той жа лініі, як return ключавое слова для таго, каб пазбегнуць коскі ўстаўкі.



if аб'ява



if клас заявы павінны мець наступны выгляд:

    if (condition)

{


        
statements


    }




    


    if (
condition) {


        
statements


    } else {


        
statements


    }


    


    if (
condition) {


        
statements


    } else if (
condition)

{


        
statements


    } else {


        
statements


    }



for аб'ява



Заявы for класа павінны мець наступны выгляд:

    for (initialization;

condition; update) {


        
statements


    }





    for (
variable in object)

{


        if (
filter) {


            
statements


        }


    }

Першая форма павінна быць скарыстана з масівамі і з завес predeterminable лік ітэрацый.

Другая форма павінна быць скарыстана з аб'ектамі. Майце на ўвазе, што чальцы, якія дадаюцца ў прататып аб'екта будуць уключаны ў пералік. Мэтазгодна праграмы абаронча дапамогай hasOwnProperty метад адрозніць праўдзівае чальцоў аб'екта:

    for (variable

in
object) {


        if
(object.hasOwnProperty(variable))

{


            
statements


        }


    }



while аб'ява



while заява павінна мець наступны выгляд:

    while (condition)

{


        
statements


    }



do аб'ява



do заява павінна мець наступны выгляд:

    do {


        
statements


    } while (
condition);

У адрозненне ад іншых аператараў злучэння, do заявы заўсёды сканчаецца ; (кропка з коскі).



switch аб'ява



switch заява павінен мець наступны выгляд:

    switch (expression) {


    case
expression:


        
statements


    default:


        
statements


    }


Кожны case прыведзены ў адпаведнасць з switch . Гэта дазваляе пазбегнуць празмернага паглыблення.

Кожная група заявы (акрамя default ), павінны скончыцца break , return ці throw.



try аб'ява



try класа заявы павінны мець наступны выгляд:

    try {


        statements


    } catch (variable) {


        statements


    }





    try {


        statements


    } catch (variable) {


        statements


   } finally {


        statements


    }



continue аб'ява



Пазбягайце выкарыстанні continue выступ. Ён засланяе струменя кіравання функцыі.



with аб'ява



with заявы не павінны выкарыстоўвацца.



Пустая прастора





Blank lines improve readability by setting off sections of code that are logically related.

Blank spaces should be used in the following circumstances:



  • Ключавое слова варта ( (злева у дужках) павінны быць падзелены прабелам.


while (true) {



  • Прабел не павінны выкарыстоўвацца паміж значэннем функцыі і яе ( (злева у дужках). Гэта дазваляе правесці адрозненне паміж ключавымі словамі і выклікі функцый.
  • Усе бінарныя аператары, акрамя . (кропка) і ( (левая дужка) і [ (левы кранштэйн) павінны быць адлучаны ад сваіх аперандаў у прасторы.
  • Няма прасторы павінны вылучыць аператар і аперанд за выключэннем выпадкаў, калі аператар з'яўляецца такім словам, як typeof .
  • Кожны; (кропка з коскі) у часткі кантролю for заява павінна рушыць услед у прасторы.
  • Прабелы павінны вынікаць кожны, (коскі).




Бонус-прапанова





{} і []



Выкарыстанне {} замест new Object() . Выкарыстанне [] замест new Array() .

Выкарыстанне масіваў, калі імёны чальцоў будзе паслядоўных цэлых лікаў. Выкарыстанне аб'ектаў, калі імёны чальцоў адвольныя радкі ці імёны.



, (коска) аператар



Пазбягайце выкарыстанні аператар "коска", за выключэннем вельмі дысцыплінаваным выкарыстанні ў часткі кантролю for заявамі. (Гэта не ставіцца да коскі, якая выкарыстоўваецца ў аб'ектна-літэралы, масіў літэралаў, var ведамасці і спісы параметраў.)



Вобласці блокаў



У блоках JavaScript не маюць магчымасці. Толькі функцыі маштабу. Не выкарыстоўвайце блокі выключэннем выпадкаў, прадугледжаных складовыя аператары.

Прызначэнне выразаў



Пазбягайце рабіць заданні ва ўмовах частка if і while справаздачнасць.

if (a = b) {

правільнае сцвярджэнне? Ці

if (a == b) {

лепш? Пазбягайце канструкцый, якія не могуць быць лёгка вызначаны, каб быць правільным.



=== і !== аператары.



Гэта амаль заўсёды лепш выкарыстоўваць === і !== аператараў. == і != аператараў рабіць выгляд прымусу. У прыватнасці, не выкарыстоўваць == для параўнання falsy каштоўнасцяў.



Змешванне плюсаў і мінусаў



Будзьце асцярожныя, каб не вынікаць + з + ці ++ . Гэта заканамернасць можа прывесці да блытаніны. Устаўце рагепз паміж імі, каб зрабіць Ваш намер ясна.

total = subtotal + +myInput.value;

Лепш

total = subtotal + (+myInput.value);

так што + + не з'яўляецца няслушна вытлумачаны як ++ .



eval зло



eval функцыя найболей марнатравілі асаблівасцю JavaScript. Пакінь яго.

eval мае псеўданімаў. Не выкарыстоўвайце Function канструктара. Не праходзіце міма радкоў setTimeout ці setInterval .



Original by Douglas Crockford