Маслиҳатҳо барои навиштани рамзи нигоҳдоранда
Навиштани рамз танҳо барои "иҷрои" барнома нест. Дар амал, қисми зиёди вақти таҳияи нармафзор барои хондан, такмил додан ва таҳияи рамзи мавҷуда - хоҳ рамзи худи шумо бошад, хоҳ каси дигар - сарф мешавад. Аз ин рӯ, қобилияти навиштани рамзи нигоҳдорӣшаванда маҳорати муҳим барои ҳар як барномасоз аст. Рамзи нигоҳдорӣшаванда хароҷоти нигоҳдориро кам мекунад, иловаҳои хусусиятҳоро суръат мебахшад, хатогиҳоро кам мекунад ва ҳамкории дастаро хеле самараноктар мекунад. Дар ин ҷо баъзе маслиҳатҳои амалӣ барои навиштани рамзи тоза, равшан ва пойдор оварда шудаанд.
1. Ба хондан осонтар аз «доноӣ» афзалият диҳед
Коде, ки аз ҳад зиёд "доно" аст, аксар вақт фаҳмиданаш душвор аст. Масалан, навиштани як сатри хеле мухтасари код метавонад зебо ба назар расад, аммо ҳангоми аз нав хондан метавонад печида бошад. Ҳалли равшанеро интихоб кунед, ҳатто агар он каме дарозтар бошад. Қобилияти хондан як сармоягузорӣ аст: шумо метавонед рамзро танҳо як маротиба нависед, аммо онро борҳо хоҳед хонд.
Масалан, ба ҷои ҷойгир кардани якчанд амалиёт дар як ибора, онҳоро ба қадамҳо бо номҳои тағйирёбандаи пурмазмун ҷудо кунед. Ин ба хонанда кӯмак мекунад, ки нияти барномаро бидуни тахмин кардан дарк кунад.
2. Номгузории равшан ва мувофиқро истифода баред
Номҳои тағйирёбанда, функсия ва синф "сатри аввали ҳуҷҷатҳо" барои рамзи шумо мебошанд. Номҳои хуб бояд нақш ё мақсади онҳоро тавсиф кунанд, на танҳо формати маълумоти онҳоро. Масалан, `userList` нисбат ба `ul` иттилоотӣтар аст ва `calculateTotalPrice()` нисбат ба `ctp()` равшантар аст.
Илова бар равшанӣ, номгузорӣ низ бояд якхела бошад. Агар шумо барои тағйирёбандаҳо camelCase-ро истифода баред, дар тамоми лоиҳаи худ ба он риоя кунед. Барои синфҳо, агар ин конвенсияи забонии бартарии шумо бошад, PascalCase-ро истифода баред. Мувофиқат рамзро якхела ҳис мекунад ва ҳангоми хондан бори зеҳниро кам мекунад.
3. Принсипи "Масъулияти ягона"-ро татбиқ кунед
Яке аз сабабҳои асосии нигоҳдории душвори код функсияҳо ё синфҳо мебошанд, ки корҳои зиёдеро иҷро мекунанд. Принсипи ягонаи масъулият нишон медиҳад, ки воҳиди рамз бояд танҳо як масъулияти асосӣ дошта бошад. Функсияи аз ҳад зиёд дароз одатан нишонаи он аст, ки он бояд тақсим карда шавад.
Масалан, функсияи "раванди пардохт", ки ҳамзамон вурудро тасдиқ мекунад, нархҳоро ҳисоб мекунад, бо дарвозаи пардохт тамос мегирад ва почтаи электронӣ мефиристад, санҷидан ва тағир доданаш душвор хоҳад буд. Бо тақсим кардани он ба функсияҳои алоҳида (тасдиқ, ҳисоб, пардохт, огоҳӣ), шумо метавонед ба як қисм тағйирот ворид кунед, бе он ки қисми дигарро вайрон кунед.
4. Аз такрор (ХУШК) худдорӣ кунед, аммо аз ҳад зиёд накунед.
Хушк (Худро такрор накунед) як принсипи муҳим аст: агар шумо як блоки рамзро чанд маротиба нусхабардорӣ кунед, тағироти ночиз аз шумо талаб мекунад, ки ҳамаи онҳоро таҳрир кунед. Ин хатогиҳо дорад. Ҳалли масъала ин аст, ки мантиқи такроршударо ба функсия ё модул истихроҷ кунед.
Аммо, муҳим аст, ки дар хотир дошта бошед, ки пешгирӣ аз такрори аз ҳад зиёд метавонад ба хондан зарар расонад. Агар ду пораи код ба ҳам монанд ба назар расанд, аммо дар асл контекстҳои гуногун дошта бошанд, маҷбур кардани "абстраксия" метавонад кодро мураккабтар кунад. Мувозинатро пайдо кунед: вақте ки такрор воқеан пурмаъно аст ва имкони тағир додани якҷояро дорад.
5. Сохтори лоиҳаи хуберо эҷод кунед
Сохтори равшани ҷузвдон ба осонии нигоҳдорӣ таъсир мерасонад. Файлҳоро аз рӯи хусусият ё модул гурӯҳбандӣ кунед, на танҳо аз рӯи намуди файл, махсусан барои лоиҳаҳои калон. Сохтори хуб барои шурӯъкунандагон фаҳмидани меъмории лоиҳаро осонтар мекунад.
Масалан, ба ҷои ҷойгир кардани ҳамаи ҷузъҳои UI-и худ дар як ҷузвдони калон, шумо метавонед онҳоро аз рӯи хусусиятҳо тақсим кунед: `auth/`, `profile/`, `checkout/` ва ғайра. Ин равиш ба миқёси лоиҳаи шумо бо афзоиши он мусоидат мекунад.
6. Мураккабиро маҳдуд кунед ва ҷараёни мантиқиро осон пайгирӣ кунед.
Нигоҳдории рамзи пур аз ибораҳои if-else, шартҳои сершумор ва истисноҳои махсус аксар вақт душвор аст. Кӯшиш кунед, ки мантиқи худро содда кунед. Шумо метавонед усулҳоеро ба монанди баргардонидани барвақт барои кам кардани лонасозӣ истифода баред ё мантиқи мураккабро ба функсияҳои хурде, ки метавонанд мувофиқан номгузорӣ шаванд, интиқол диҳед.
Агар функсия параметрҳои аз ҳад зиёд дошта бошад, он инчунин аз мураккабӣ шаҳодат медиҳад. Барои беҳтар ташкил кардани параметрҳо ва осонтар кардани васеъкунии онҳо истифодаи объекти конфигуратсия (ё сохтори додаҳо)-ро баррасӣ кунед.
7. Шарҳҳоеро нависед, ки ба ҳадаф мувофиқанд
Шарҳҳо ивазкунандаи рамзи равшан нестанд. Агар ба шумо лозим ояд, ки "кори рамзро" шарҳ диҳед, эҳтимолан онро хондан осонтар кардан лозим аст. Аммо, шарҳҳо барои шарҳ додани "чаро"-и коре муфиданд, хусусан агар қарорҳои тарроҳӣ, маҳдудиятҳои система ё сабабҳои мушаххаси тиҷоратӣ вуҷуд дошта бошанд.
Намунаҳои шарҳҳои хуб шарҳ додани он мебошанд, ки чаро як алгоритми мушаххас аз сабаби маҳдудиятҳои иҷроиш истифода мешавад, ё чаро қоидаи тасдиқкунӣ аҷиб ба назар мерасад, зеро он аз рӯи қоида амал мекунад. Бо ин роҳ, дигарон кодро "тоза" намекунанд ва мантиқи муҳимро вайрон намекунанд.
8. Аз форматкунии код ва дастурҳои услубӣ истифода баред
Форматкунии мунтазам рамзро касбӣ ва хонданашаванда менамояд. Агар дастрас бошад, аз линтерҳо ва форматкунакҳои автоматӣ истифода баред (масалан, ESLint + Prettier барои JavaScript, Black барои Python ё gofmt барои Go). Бо ин абзорҳо, дастаҳо набояд дар бораи фосила ва гузоштани фосила хавотир шаванд, зеро ҳама чиз ба таври худкор коркард мешавад.
Дастурҳои услубӣ низ кӯмак мекунанд: оё истифодаи нохунакҳои якка ё дугона, чӣ гуна номгузории файлҳо, кай бояд хатҳои дарозро бурид ва ғайра. Стандартҳои хурде ба монанди инҳо метавонанд дар муддати тӯлонӣ тафовути калон ба вуҷуд оранд.
9. Барои нигоҳ доштани эътимод ҳангоми рефакторинг санҷишҳо нависед.
Коди нигоҳдорӣшаванда на танҳо тоза, балки барои тағир додан бехатар аст. Санҷишҳои автоматӣ (санҷишҳои воҳидӣ, санҷишҳои ҳамгироӣ) кафолат медиҳанд, ки тағиротҳои шумо рафтори муқарраршударо вайрон намекунанд. Бе санҷишҳо, одамон аз сабаби хатари хатогиҳои ошкорнашуда аз такмил додани код метарсанд.
Аз бахшҳои муҳим оғоз кунед: функсияҳои ҳисобкунии нарх, қоидаҳои тахфиф, тасдиқ ё модулҳои зуд-зуд ивазшаванда. Бо мурури замон, фарогирии санҷишҳо афзоиш хоҳад ёфт ва аз регрессияҳо муҳофизати қавӣ фароҳам меорад.
10. Рефакторингро мунтазам ва бо андоза анҷом диҳед
Нигоҳдорӣ раванди доимӣ аст. Рефакторинг маънои "аз нав навиштани ҳама чиз"-ро надорад, балки беҳбудиҳои хурдеро дорад, ки сифати кодро бе тағир додани рафтори он беҳтар мекунанд. Вақте ки шумо ба қисмати код ламс мекунед, рефакторро ба нақша гиред: каме тоза кунед, номгузориро ислоҳ кунед, функсияи аз ҳад дарозро вайрон кунед ё рамзи мурдаро тоза кунед.
Рефакторингҳои хурд ва мунтазам нисбат ба рефакторингҳои калон ва нодир бехатартаранд. Ва ҳамеша санҷиши мувофиқ ё ҳадди ақалл санҷиши пеш ва баъд аз тағйиротро таъмин кунед.
11. Қарорҳои муҳимро ҳуҷҷатгузорӣ кунед
Илова бар шарҳҳои рамз, лоиҳаҳои хуб одатан дорои ҳуҷҷатҳои мухтасар мебошанд: чӣ гуна барномаро иҷро кардан, чӣ гуна онро сохтан, чӣ гуна танзим кардани муҳит ва шарҳи меъмории сатҳи баланд. Ин ҳуҷҷат набояд васеъ бошад, аммо он бояд дақиқ ва осон пайдо шавад. Файли хуб нигоҳдошташуда ба монанди `README.md` метавонад вақти зиёдеро барои ҷалби аъзоёни нав сарфа кунад.
Агар қарори калидии техникӣ вуҷуд дошта бошад (масалан, интихоби пойгоҳи додаҳои мушаххас, намунаи меъморӣ ё маҳдудияти ҳамгироӣ), асосноккуниро сабт кунед. Ин ба даста кӯмак мекунад, ки контекстро дарк кунад ва аз такрори ҳамон як баҳс худдорӣ кунад.
Penutup
Коди нигоҳдорӣшаванда натиҷаи одатҳои хуб аст: навиштани возеҳ, ҷудо кардани масъулиятҳо, нигоҳ доштани мувофиқат, кам кардани мураккабӣ ва ҳифзи тағйирот бо санҷишҳо. Ҳеҷ як код комил нест, аммо ҳар як лоиҳа метавонад пайваста такмил ёбад, агар даста ба сифат содиқ бошад. Бо татбиқи маслиҳатҳои дар боло зикршуда, шумо барои рушд кардан беҳтар омода хоҳед шуд - на танҳо имрӯз, балки дар моҳҳо ва солҳои оянда низ.