Ниндзя коду
ниндзя коду
Эски замандын устаттарынын кеңешин назарыңыздарга сунуштайм.
Мурдагы программисттер аларды кийин кодду сактай тургандардын акылын курчутуу үчүн колдонушкан.
Өнүктүрүү гурулары аларды жумушка орношкондо сыноо учурларында колдонууну кылдаттык менен издешет.
Жаңы баштагандар кээде аларды тажрыйбалуу ниндзяларга караганда жакшыраак колдонушат.
Аларды окуп, өзүңүздүн ким экениңизди чечиңиз: ниндзя, башталгыч, же балким, гуру?
Ирониядан сак болуңуз!
Көптөр ниндзялардын жолуна түшүүгө аракет кылышкан. Ийгиликке жеткендер аз.
Кыскалык - бул акылдын жаны!
Канчалык так эмес, "канчалык кыска" деп жаз. Канчалык акылдуу экениңди көрсөт!
"Азыраак тамгалар" кандайдыр бир келишимдерди бузууга жакшы себеп болуп саналат. Сиздин ишенимдүү жардамчыңыз - бул ачык эмес түрдө колдонулган тилдин мүмкүнчүлүктөрү.
'?' суроо белгисине көңүл буруңуз, мисалы:
// jQueryден код
@A@i = i? i<0? Math.max(0, len + i) : i : 0;@A@
Бул линияга туш болуп, мен эмне жөнүндө экенин түшүнүүгө аракет кылган иштеп чыгуучу сизге тактоо үчүн келиши мүмкүн. Кыскасы дайыма жакшыраак экенин ага айтыңыз. Аны ниндзя жолу менен баштаңыз. Тао Те Чингди берүүнү унутпаңыз.
Жалгыз тамга өзгөрмөлөр
Ким билет - айтпайт. Ким сүйлөйт билбейт.
Лао Цзы
Тезирээк жазуунун дагы бир жолу кыска өзгөрмө аттарын колдонуу. А, б же в деп атаңыз.
Кыска өзгөрмө токойдогу ниндзяга караганда кодду жакшыраак жашырат. Тексттик редактордун "Издөө" функциясы аркылуу аны эч ким таба албайт. Анын үстүнө, аны таап алса да, эч ким аны "чечмелеп", анын маанисин таба албайт.
…Бирок бир өзгөчөлүк бар.Бир тамгадан турган өзгөрмөлөр кеңири таралган жерлерде, мисалы, цикл эсептегичинде, эч качан i, j, k стандарттуу аталыштарды колдонбоңуз. Бул жерден башка жерде!
Кыраакы көзүңүздү дагы экзотикалык нерсеге буруңуз. Мисалы, х же у.
Бул ыкманын натыйжалуулугу, өзгөчө, эгерде циклдин корпусу бир же эки барактан турган болсо (канчалык узун болсо, ошончолук жакшы) байкалат.
Бул учурда, өйдө сыдырбай өзгөрмө цикл эсептегичи экенин байкоого болбойт.
Кыскартууларды колдонуңуз
Эгерде сиздин командаңыздын эрежелери абстракттуу же бир тамгадан турган аттарды колдонууга тыюу салса, аларды кыскартыңыз.
Мисалы:
тизме → lst.
userAgent → ua.
браузер → brsr.
…жана башкалар.
Мындай ысымдарды интуициясы өнүккөн кесиптештер гана түшүнөт. Жалпысынан алганда, баарын азайтууга аракет кыл. Кодуңузду колдоого интуитивдик адамдар гана татыктуу.
Атын тандоодо абстракттуу болуңуз.
Эң жакшы кумура өмүр бою калыптанат,
Жогорку музыка угулбайт,
Улуу образдын формасы жок.
Лао Цзы
Атты тандоодо мүмкүн болушунча абстракттуу сөздөрдү колдонууга аракет кылыңыз, мисалы, obj, data, value, item, element, ж.
Идеалдуу өзгөрмө аты: маалыматтар. Бул атты колдонуңуз. Анткени, ар бир өзгөрмө маалыматтарды камтыйт, туурабы?
…Бирок аты-жөнү дайыны мурунтан эле алынган болсочу? Баалуу болуп көрүңүз, ал ар тараптуу. Анткени, ар бир өзгөрмө маанини камтыйт.Өзгөрмөлөрдү сактаган маалыматтардын түрүнө жараша атаңыз: str, num…
Байкап көрүңүз! Мындай ысымдар өнүгүүнү кызыктуураак кылабы? Кызык, жана дагы көп нерсе!
Өзгөрмөнүн аталышында маалымат камтылгандай сезилет, өзгөрмө санды, объектти же массивди камтыйт деп айтылат... Экинчи жагынан, башталбагандар бул кодду талдап чыкканда, алар бул коддун жок экенине таң калышат. маалымат!
Анткени, жөн гана түрүн оңдоочу иштетип, ичиндегини карап түшүнүү оңой. Бирок бул өзгөрмөнүн мааниси эмнеде? Анда кандай массив/объект/сан сакталат? Код боюнча көп ойлонбой туруп кыла албайсыз!
... Бирок бул ысымдар бүтүп калсачы? Жөн гана санды кошуңуз: data1, item2, element5…
Көңүл текшерүү
Сиздин кодуңузду түшүнүүгө чыныгы кунт коюп программист гана татыктуу. Бирок окурман татыктуу же жокпу, кантип текшерүү керек?
Бир жолу, мисалы, дата жана маалыматтар сыяктуу окшош өзгөрмө аттарын колдонуу.
Мындай кодду эркин окуу дээрлик мүмкүн эмес. Жана катаны байкап, аны оңдоо үчүн... Ммм... Биз бул жерде көптөн бери, чай ичкенге убакыт келди.
Орусча сөздөр жана кыскартуулар
Эгер сиз узун, түшүнүктүү өзгөрмө аттарын колдонууга туура келсе - эмне кылуу керек ... Бирок бул жерде да чыгармачылык үчүн орун бар!
Өзгөрмөлөрдү орус тилинен "кагаз" деп атаңыз же англисче сөздү кандайдыр бир жол менен "жакшыртыңыз".
Бир жерге var ssilka, экинчи жерге var ssylka, үчүнчү орунга var ссылка, төртүнчү орунга var lnk... Бул чындап эле сонун иштейт жана абдан креативдүү!
Мындай коддун колдоосу менен каталардын саны көп эсе көбөйөт.
Татаал синонимдер
Караңгы бөлмөдө кара мышыкты табуу өтө кыйын, айрыкча ал жок кезде.
Конфуций
Зерикпес үчүн, окшош аттарды колдонуңуз.
Мисалы, эгер метод экранда бир нерсени көрсөтсө, анын атын display.. менен баштаңыз (айталы, displayElement) жана окшош ыкманы башка жерде show.. (showFrame) деп жарыялаңыз.
Бул ыкмалардагы көрсөтүүнүн жолдорунун ортосунда тымызын айырма бар экенин ишара кылгандай, бирок чындыгында эч кандай жок.
Мүмкүн болсо, командаңыздын мүчөлөрү менен сүйлөшүңүз. Эгерде Вася өз класстарында дисплейди колдонсо, Валера рендерди, Петя болсо боёкту колдонушу керек...
...Тескерисинче, маанилүү айырмачылыктары бар эки өзгөчөлүк бар болсо, аларды сүрөттөө үчүн бир эле сөздү колдонуңуз! Мисалы, print... принтерге басып чыгаруу үчүн printPage ыкмасын, ошондой эле баракка текст кошуу үчүн printText ыкмасын баштаса болот.
Эми окуу коду ойлонуп көрөлү: "printMessage кайдан чыгат?". Өзгөчө саркеч - сюрприз элементин кошуу. printMessage башкалар турган жерге эмес, жаңы терезеге чыксын!
Аттарды кайра колдонуу
Бүтүндөй бөлүнгөндө, анын бөлүктөрү
аттары керек.
Аттар жетиштүү.
Сиз качан токтотууну билишиңиз керек.
Лао Цзы
Мүмкүн болушунча өзгөрмөнүн, функциянын жана касиеттин аттарын кайра колдонуңуз. Аларга жаңы баалуулуктарды жазыңыз.
Зарыл болгондо гана жаңы ат кошуңуз. Функцияда параметр катары берилген өзгөрмөлөр менен гана иштөөгө аракет кылыңыз.
Бул өзгөрмөдө учурда эмне бар экенин аныктоону гана кыйындатпастан, ошондой эле белгилүү бир маани берилген жерди табуу дээрлик мүмкүн болбой калат.
Максаты - кодду окуган программисттин интуициясын жана эс тутумун өнүктүрүү.Ооба, бул арада, интуиция алсыз, ал кодду сап боюнча талдай алат жана аткаруунун ар бир бутагы үчүн өзгөрмөлөрдөгү өзгөрүүлөрдү көрсөтө алат.
Бул ыкманын өркүндөтүлгөн версиясы - өзгөрмөлөрдү акырын (!) окшош нерсе менен алмаштыруу, мисалы:
function ninjaFunction(elem) {
// Элем менен иштеген 20 сап код
elem = клон(элем);
// Elem менен иштеген дагы 20 код саптары!
}
Функциянын экинчи бөлүгүнө элементтердин аракеттерин кошкусу келген программист таң калат. Мүчүлүштүктөрдү оңдоо учурунда гана, бүт кодду карап чыгып, ал клон менен иш алып барганына таң калат!
Бул ыкма менен үзгүлтүксүз жолугушуулар иш жүзүндө мындай дейт: өзүн коргоо мүмкүн эмес. Тажрыйбалуу ниндзяга каршы да эффективдүү.
Төмөнкү сызыктарды кошуу
Өзгөрмө аттарына _ жана __ астынкы сызыктарды кошуңуз. Мисалы, _name же __value. Алардын мааниси сизге гана белгилүү болушу керек, ал эми жакшыраак - эч кандай себепсиз.
Бул эки максатка жетет. Биринчиден, код узунураак жана азыраак окула турган болуп калат, экинчиден, башка программист көпкө чейин астыңкы сызыктардан маани издейт. Долбоордун кээ бир жерлеринде асты сызылган болсо, кээ бирлери жок болсо, ал өзгөчө жакшы иштейт жана анын ойлорун чаташтырат.
Кодду иштеп чыгуу процессинде сиз чаташып, стилдерди аралаштырасыз: астынкы сызыктары бар аталыштарды кошуңуз, ал жерде көбүнчө астынкы сызыктар жок жана тескерисинче. Бул нормалдуу көрүнүш жана үчүнчү максатка толугу менен шайкеш келет - оңдоолорду киргизүүдө каталардын санын көбөйтүү.Инженерге болгон сүйүүңдү көрсөт
Кандай сонун объектилер менен иштегениңизди ар бир адам көрсүн! Ыңгайлуу жылдыз позициялары менен superElement, megaFrame жана niceItem аталыштары окурманды агартууга алып келиши мүмкүн.
Чынында эле, бир жагынан, бир нерсе жазылган: супер.., мега.., жакшы.. Экинчи жагынан, эч кандай спецификацияны алып келбейт. Окурман мунун терең маанисин издеп, акы төлөнүүчү жумуш убактысынын бир же эки сааты үчүн ой жүгүртүүнү чечиши мүмкүн.
Тышкы өзгөрмөлөрдү жокко чыгаруу
Жарыкта болгондуктан, караңгыда эч нерсе көрө албайсың.
Караңгылыкта жүргөндө жарыкта болгондун баарын көрөсүң.
Гуан Инзи
Эмне үчүн функциянын ичинде жана сыртында бирдей өзгөрмөлөрдү колдонууга болбойт? Бул жөнөкөй жана жаңы аттарды ойлоп табууну талап кылбайт.
@A@let user = authenticateUser();
render() {
let user = anotherValue();
...
...көп каттар...
...
... // <-- программист бул жерде оңдоолорду киргизгиси келет жана...
...
}@A@
Көрсөтүү ыкмасынын ортосуна кирген программист, кыязы, колдонуучу өзгөрмөсү локалдык түрдө жокко чыгарылганын байкабай калат жана бул authenticateUser () натыйжасы деп эсептеп, аны менен иштөөгө аракет кылат ... Тузак пайда болду! Салам оңдоочу.
Көңүл бургула... Sur-pri-from!
Атында эч нерсени өзгөртпөй турган функциялар бар. Мисалы, isReady(), checkPermission(), findTags()… Чакырылганда, алар кандайдыр бир эсептөөлөрдү жүргүзүшү керек же пайдалуу маалыматтарды таап, кайтарышы керек, бирок аны өзгөртпөйт.