ပြုပြင်ထိန်းသိမ်းနိုင်သော ကုဒ်ရေးသားရန် အကြံပြုချက်များ
ကုဒ်ရေးသားခြင်းသည် ပရိုဂရမ်တစ်ခုကို "လည်ပတ်စေရန်" သက်သက်မဟုတ်ပါ။ လက်တွေ့တွင်၊ ဆော့ဖ်ဝဲလ်ဖွံ့ဖြိုးတိုးတက်မှုအချိန်၏ များစွာသောအပိုင်းကို သင့်ကိုယ်ပိုင်ကုဒ် သို့မဟုတ် အခြားသူ၏ကုဒ်ဖြစ်စေ ရှိပြီးသားကုဒ်ကို ဖတ်ရှုခြင်း၊ ပြုပြင်ခြင်းနှင့် တီထွင်ခြင်းတို့တွင် အသုံးပြုပါသည်။ ထို့ကြောင့်၊ ပြုပြင်ထိန်းသိမ်းနိုင်သော ကုဒ်ရေးသားနိုင်စွမ်းသည် မည်သည့်ပရိုဂရမ်မာအတွက်မဆို အရေးကြီးသော အရည်အချင်းတစ်ခုဖြစ်သည်။ ပြုပြင်ထိန်းသိမ်းနိုင်သော ကုဒ်သည် ပြုပြင်ထိန်းသိမ်းမှုကုန်ကျစရိတ်များကို လျှော့ချပေးပြီး၊ အင်္ဂါရပ်များထပ်ထည့်ခြင်းကို မြန်ဆန်စေပြီး၊ bug များကို အနည်းဆုံးဖြစ်အောင် ပြုလုပ်ပေးကာ အဖွဲ့လိုက်ပူးပေါင်းဆောင်ရွက်မှုကို ပိုမိုထိရောက်စေပါသည်။ သန့်ရှင်းသပ်ရပ်ပြီး တာရှည်ခံသော ကုဒ်ရေးသားရန်အတွက် လက်တွေ့ကျသော အကြံပြုချက်အချို့ကို ဤနေရာတွင်ဖော်ပြထားပါသည်။
၁။ “ဉာဏ်ရည်ထက် ဖတ်ရှုရလွယ်ကူမှုကို ဦးစားပေးပါ။”
"လိမ္မာပါးနပ်လွန်း" တဲ့ ကုဒ်တွေဟာ နားလည်ရခက်လေ့ရှိပါတယ်။ ဥပမာအားဖြင့်၊ ကုဒ်ရဲ့ တိုတိုတုတ်တုတ် စာကြောင်းတစ်ကြောင်း ရေးသားခြင်းဟာ ကြော့ရှင်းလှပတဲ့ပုံပေါက်နိုင်ပေမယ့် ပြန်ဖတ်တဲ့အခါ ရှုပ်ထွေးသွားနိုင်ပါတယ်။ အနည်းငယ်ရှည်နေရင်တောင် ရှင်းလင်းတဲ့ ဖြေရှင်းချက်ကို ရွေးချယ်ပါ။ ဖတ်ရလွယ်ကူမှုဟာ ရင်းနှီးမြှုပ်နှံမှုတစ်ခုပါ- ကုဒ်ကို တစ်ကြိမ်ပဲ ရေးနိုင်ပေမယ့် အကြိမ်ပေါင်းများစွာ ဖတ်ရမှာပါ။
ဥပမာအားဖြင့်၊ လုပ်ဆောင်ချက်များစွာကို တစ်ခုတည်းသော ဖော်ပြချက်တွင် ထည့်သွင်းမည့်အစား၊ ၎င်းတို့ကို အဓိပ္ပာယ်ရှိသော variable အမည်များပါသည့် အဆင့်များအဖြစ် ပိုင်းခြားပါ။ ၎င်းသည် စာဖတ်သူအား ခန့်မှန်းစရာမလိုဘဲ ပရိုဂရမ်၏ ရည်ရွယ်ချက်ကို နားလည်ရန် ကူညီပေးသည်။
၂။ ရှင်းလင်းပြတ်သားပြီး တသမတ်တည်းရှိသော အမည်ပေးမှုကို အသုံးပြုပါ။
Variable၊ function နှင့် class အမည်များသည် သင့်ကုဒ်အတွက် "စာရွက်စာတမ်း၏ ပထမစာကြောင်း" ဖြစ်သည်။ ကောင်းမွန်သောအမည်များသည် ၎င်းတို့၏ဒေတာပုံစံကိုသာမက ၎င်းတို့၏အခန်းကဏ္ဍ သို့မဟုတ် ရည်ရွယ်ချက်ကို ဖော်ပြသင့်သည်။ ဥပမာအားဖြင့်၊ `userList` သည် `ul` ထက် ပိုမိုအသိပေးစရာကောင်းပြီး `calculateTotalPrice()` သည် `ctp()` ထက် ပိုမိုရှင်းလင်းပါသည်။
ရှင်းလင်းမှုအပြင်၊ အမည်ပေးခြင်းကလည်း တသမတ်တည်းဖြစ်သင့်သည်။ variable များအတွက် camelCase ကိုသုံးပါက သင့်ပရောဂျက်တစ်လျှောက်လုံး ၎င်းကိုသုံးပါ။ class များအတွက်၊ သင်နှစ်သက်သောဘာသာစကား convention ဖြစ်ပါက PascalCase ကိုသုံးပါ။ တသမတ်တည်းရှိခြင်းက ကုဒ်ကို တသမတ်တည်းဖြစ်စေပြီး ဖတ်ရှုသည့်အခါ စိတ်ပိုင်းဆိုင်ရာဝန်ထုပ်ဝန်ပိုးကို လျော့ကျစေသည်။
၃။ “တစ်ခုတည်းသော တာဝန်ယူမှု” မူကို ကျင့်သုံးပါ။
ကုဒ်ကို ထိန်းသိမ်းရန်ခက်ခဲရခြင်း၏ အဓိကအကြောင်းရင်းတစ်ခုမှာ အရာများစွာကို လုပ်ဆောင်သော function များ သို့မဟုတ် class များဖြစ်သည်။ Single Responsibility Principle သည် ကုဒ်ယူနစ်တစ်ခုတွင် အဓိကတာဝန်တစ်ခုတည်းသာရှိသင့်သည်ဟု အကြံပြုထားသည်။ function ရှည်လျားလွန်းခြင်းသည် ၎င်းကို ခွဲခြမ်းစိတ်ဖြာရန် လိုအပ်ကြောင်း လက္ခဏာတစ်ရပ်ဖြစ်လေ့ရှိသည်။
ဥပမာအားဖြင့်၊ input ကို တစ်ပြိုင်နက်တည်း အတည်ပြုခြင်း၊ ဈေးနှုန်းများတွက်ချက်ခြင်း၊ ငွေပေးချေမှု gateway သို့ ဆက်သွယ်ခြင်းနှင့် အီးမေးလ်များပေးပို့ခြင်းတို့ကို ပြုလုပ်ပေးသည့် "checkout process" function တစ်ခုသည် စမ်းသပ်ရန်ခက်ခဲပြီး ပြောင်းလဲရန်လည်း ခက်ခဲပါသည်။ ၎င်းကို သီးခြား function များ (အတည်ပြုခြင်း၊ တွက်ချက်ခြင်း၊ ငွေပေးချေမှု၊ အကြောင်းကြားချက်) အဖြစ် ပိုင်းခြားခြင်းဖြင့် အခြားအစိတ်အပိုင်းများကို မဖြတ်တောက်ဘဲ အစိတ်အပိုင်းတစ်ခုကို ပြောင်းလဲမှုများ ပြုလုပ်နိုင်ပါသည်။
၄။ ထပ်တူပြုလုပ်ခြင်းကို ရှောင်ကြဉ်ပါ (ခြောက်သွေ့သောနည်းလမ်း)၊ သို့သော် အလွန်အကျွံ မလုပ်ပါနှင့်။
DRY (ထပ်ခါတလဲလဲ မလုပ်ပါနဲ့) ဆိုတာက အရေးကြီးတဲ့ အခြေခံမူတစ်ခုပါ- ကုဒ်ဘလောက်တစ်ခုတည်းကို အကြိမ်ပေါင်းများစွာ ကူးယူမယ်ဆိုရင် ပြောင်းလဲမှုအနည်းငယ်နဲ့ အားလုံးကို တည်းဖြတ်ဖို့ လိုအပ်ပါလိမ့်မယ်။ ဒါက အမှားအယွင်းဖြစ်လွယ်ပါတယ်။ ဖြေရှင်းနည်းကတော့ ထပ်ခါတလဲလဲလုပ်ထားတဲ့ logic ကို function ဒါမှမဟုတ် module ထဲကို extract လုပ်တာပါပဲ။
သို့သော်၊ အလွန်အကျွံထပ်တူပြုခြင်းကို ရှောင်ရှားခြင်းသည်လည်း ဖတ်ရလွယ်ကူမှုကို ထိခိုက်စေနိုင်ကြောင်း မှတ်သားထားရန် အရေးကြီးပါသည်။ ကုဒ်နှစ်ခုသည် ဆင်တူပုံရသော်လည်း အမှန်တကယ်တွင် မတူညီသော အကြောင်းအရာများရှိပါက "abstraction" ကို အတင်းအကျပ်ပြုလုပ်ခြင်းသည် ကုဒ်ကို ပိုမိုရှုပ်ထွေးစေနိုင်သည်။ ဟန်ချက်ညီမှုကို ရှာဖွေပါ- ထပ်တူပြုခြင်းသည် အမှန်တကယ် အဓိပ္ပာယ်ရှိပြီး အတူတကွ ပြောင်းလဲနိုင်ခြေရှိသည့်အခါ refactor ပြုလုပ်ပါ။
၅။ သပ်ရပ်သော ပရောဂျက်ဖွဲ့စည်းပုံကို ဖန်တီးပါ။
ရှင်းလင်းသော ဖိုင်တွဲဖွဲ့စည်းပုံသည် ပြုပြင်ထိန်းသိမ်းမှုလွယ်ကူမှုကို သက်ရောက်မှုရှိသည်။ အထူးသဖြင့် ပရောဂျက်ကြီးများအတွက် ဖိုင်အမျိုးအစားအလိုက်မဟုတ်ဘဲ အင်္ဂါရပ် သို့မဟုတ် မော်ဂျူးအလိုက် ဖိုင်များကို အုပ်စုဖွဲ့ပါ။ ကောင်းမွန်သောဖွဲ့စည်းပုံသည် အသစ်ဝင်ရောက်လာသူများအတွက် ပရောဂျက်ဗိသုကာပုံစံကို နားလည်ရန် ပိုမိုလွယ်ကူစေသည်။
ဥပမာအားဖြင့်၊ သင်၏ UI အစိတ်အပိုင်းအားလုံးကို ဖိုဒါကြီးတစ်ခုထဲတွင် ထားမည့်အစား၊ ၎င်းတို့ကို feature အလိုက် ပိုင်းခြားနိုင်သည်- `auth/`, `profile/`, `checkout/` စသည်ဖြင့်။ ဤချဉ်းကပ်မှုသည် သင်၏ပရောဂျက်ကြီးထွားလာသည်နှင့်အမျှ အရွယ်အစားတိုးချဲ့ရန် ကူညီပေးသည်။
၆။ ရှုပ်ထွေးမှုကို ကန့်သတ်ပြီး ယုတ္တိဗေဒဆိုင်ရာ စီးဆင်းမှုကို လိုက်နာရလွယ်ကူအောင် ပြုလုပ်ပါ။
if-else statements များ၊ အခြေအနေများစွာနှင့် အထူးခြွင်းချက်များ ပြည့်နှက်နေသော ကုဒ်ကို ထိန်းသိမ်းရန် မကြာခဏ ခက်ခဲလေ့ရှိသည်။ သင်၏ယုတ္တိဗေဒကို ရိုးရှင်းအောင် ကြိုးစားပါ။ nesting ကို လျှော့ချရန် early return ကဲ့သို့သော နည်းပညာများကို သင်အသုံးပြုနိုင်သည်၊ သို့မဟုတ် ရှုပ်ထွေးသောယုတ္တိဗေဒကို သင့်လျော်စွာ အမည်ပေးနိုင်သော လုပ်ဆောင်ချက်ငယ်များအဖြစ် ရွှေ့နိုင်သည်။
function တစ်ခုမှာ parameter တွေ အရမ်းများနေရင် complexity ကိုလည်း ညွှန်ပြပါတယ်။ parameter တွေကို ပိုမိုကောင်းမွန်စွာ စီစဉ်ပြီး extend လုပ်ရလွယ်ကူအောင် configuration object (သို့မဟုတ် data structure) ကို အသုံးပြုခြင်းအတွက် စဉ်းစားပါ။
၇။ ပစ်မှတ်ထား မှတ်ချက်များ ရေးပါ။
မှတ်ချက်များသည် ရှင်းလင်းသောကုဒ်ကို အစားထိုး၍မရပါ။ "ကုဒ်က ဘာလုပ်သလဲ" ဟု ရှင်းပြရန် လိုအပ်ပါက ၎င်းကို ပိုမိုဖတ်ရှုရလွယ်ကူအောင် ပြုလုပ်ရန် လိုအပ်ပေမည်။ သို့သော်၊ အထူးသဖြင့် ဒီဇိုင်းဆုံးဖြတ်ချက်များ၊ စနစ်ကန့်သတ်ချက်များ သို့မဟုတ် သီးခြားစီးပွားရေးအကြောင်းပြချက်များရှိပါက မှတ်ချက်များသည် တစ်စုံတစ်ခုကို "အဘယ်ကြောင့်" လုပ်ဆောင်သည်ကို ရှင်းပြရန်အတွက် အသုံးဝင်ဆဲဖြစ်သည်။
ကောင်းမွန်သော မှတ်ချက်များ၏ ဥပမာများတွင် စွမ်းဆောင်ရည် ကန့်သတ်ချက်များကြောင့် algorithm တစ်ခုကို အဘယ်ကြောင့် အသုံးပြုရသည် သို့မဟုတ် validation rule သည် စည်းမျဉ်းတစ်ခုကို လိုက်နာသောကြောင့် ထူးဆန်းသည်ဟု ထင်ရသည့် အကြောင်းရင်းကို ရှင်းပြခြင်း ပါဝင်သည်။ ဤနည်းအားဖြင့် အခြားသူများသည် ကုဒ်ကို "သပ်ရပ်စွာ" မလုပ်ဆောင်ဘဲ အရေးကြီးသော logic ကို မချိုးဖောက်ပါ။
၈။ ကုဒ်ဖော်မတ်နှင့် စတိုင်လမ်းညွှန်များကို အသုံးပြုပါ။
တသမတ်တည်း ဖော်မတ်လုပ်ခြင်းက ကုဒ်ကို ပရော်ဖက်ရှင်နယ်ဆန်စေပြီး ဖတ်ရလွယ်ကူစေပါတယ်။ ရရှိနိုင်ပါက အလိုအလျောက် linters နှင့် formatters များကို အသုံးပြုပါ (ဥပမာ JavaScript အတွက် ESLint + Prettier၊ Python အတွက် Black သို့မဟုတ် Go အတွက် gofmt)။ ဤကိရိယာများဖြင့် အဖွဲ့များသည် အရာအားလုံးကို အလိုအလျောက် ကိုင်တွယ်သောကြောင့် နေရာလွတ်နှင့် ချုံ့ခြင်းအတွက် စိတ်ပူစရာမလိုပါ။
စတိုင်လမ်းညွှန်ချက်များသည် တစ်ချက် သို့မဟုတ် နှစ်ချက် ကိုးကားချက်များကို အသုံးပြုရမည်၊ ဖိုင်များကို မည်သို့အမည်ပေးရမည်၊ ရှည်လျားသောစာကြောင်းများကို မည်သည့်အချိန်တွင် ဖြတ်ရမည် စသည်တို့ကိုလည်း အထောက်အကူပြုပါသည်။ ဤကဲ့သို့သော စံနှုန်းငယ်များသည် ရေရှည်တွင် ကြီးမားသော ခြားနားချက်ကို ဖြစ်စေနိုင်သည်။
၉။ ပြန်လည်ပြင်ဆင်သည့်အခါ ယုံကြည်မှုကို ထိန်းသိမ်းရန် စမ်းသပ်မှုများကို ရေးပါ။
ပြုပြင်ထိန်းသိမ်းနိုင်သော ကုဒ်သည် သန့်ရှင်းရုံသာမက ပြောင်းလဲရန်လည်း ဘေးကင်းပါသည်။ အလိုအလျောက်စမ်းသပ်မှုများ (unit tests၊ integration tests) သည် သင်၏ပြောင်းလဲမှုများသည် တည်ရှိပြီးသား အပြုအမူကို မပျက်စီးစေရန် အာမခံပါသည်။ စမ်းသပ်မှုမရှိပါက လူများသည် မမြင်နိုင်သော bug များ၏အန္တရာယ်ကြောင့် ကုဒ်ကို တိုးတက်ကောင်းမွန်အောင် လုပ်ဆောင်ရန် ကြောက်ရွံ့လေ့ရှိသည်။
အရေးကြီးသော အပိုင်းများဖြင့် စတင်ပါ- ဈေးနှုန်းတွက်ချက်မှုလုပ်ဆောင်ချက်များ၊ လျှော့စျေးစည်းမျဉ်းများ၊ အတည်ပြုခြင်း သို့မဟုတ် မကြာခဏပြောင်းလဲသော မော်ဂျူးများ။ အချိန်ကြာလာသည်နှင့်အမျှ စမ်းသပ်မှုလွှမ်းခြုံမှုသည် ကြီးထွားလာပြီး ပြန်လည်ဆုတ်ယုတ်မှုများမှ ခိုင်မာသောကာကွယ်မှုကို ပေးစွမ်းလိမ့်မည်။
၁၀။ ပုံမှန်နှင့် တိုင်းတာနိုင်သော ပြန်လည်ပြင်ဆင်မှုကို လုပ်ဆောင်ပါ။
ပြုပြင်ထိန်းသိမ်းမှုဆိုတာ စဉ်ဆက်မပြတ်လုပ်ဆောင်နေတဲ့ လုပ်ငန်းစဉ်တစ်ခုပါ။ Refactoring ဆိုတာ "အရာအားလုံးကို ပြန်လည်ရေးသားခြင်း" မဟုတ်ဘဲ ကုဒ်ရဲ့ အပြုအမူကို မပြောင်းလဲဘဲ အရည်အသွေးကို တိုးတက်စေမယ့် သေးငယ်တဲ့ တိုးတက်မှုတွေကို ဆိုလိုတာပါ။ ကုဒ်ရဲ့ အပိုင်းတစ်ခုကို ထိလိုက်တဲ့အခါ refactor တစ်ခုကို အချိန်ဇယားဆွဲပါ- အနည်းငယ် သပ်ရပ်အောင်လုပ်ပါ၊ အမည်ပေးခြင်းကို ပြင်ပါ၊ ရှည်လျားလွန်းတဲ့ function ကို ပိုင်းခြားပါ ဒါမှမဟုတ် အသက်မရှိတဲ့ ကုဒ်ကို ဖယ်ရှားပါ။
သေးငယ်ပြီး ပုံမှန်ပြန်လည်ပြင်ဆင်မှုများသည် ကြီးမားသော၊ ရံဖန်ရံခါသာ ပြန်လည်ပြင်ဆင်မှုများထက် ပိုမိုလုံခြုံပါသည်။ ထို့အပြင် ပြောင်းလဲမှုများမတိုင်မီနှင့် ပြုလုပ်ပြီးနောက် လုံလောက်သော စမ်းသပ်မှု သို့မဟုတ် အနည်းဆုံး စစ်ဆေးခြင်းကို အမြဲသေချာစေပါ။
၁၁။ အရေးကြီးသော ဆုံးဖြတ်ချက်များကို မှတ်တမ်းတင်ပါ။
ကုဒ်မှတ်ချက်များအပြင်၊ ကောင်းမွန်သော ပရောဂျက်များတွင် အပလီကေးရှင်းကို မည်သို့လည်ပတ်ရမည်၊ ၎င်းကို မည်သို့တည်ဆောက်ရမည်၊ ပတ်ဝန်းကျင်ကို မည်သို့ configure လုပ်ရမည်နှင့် အဆင့်မြင့်ဗိသုကာဆိုင်ရာရှင်းလင်းချက်ကဲ့သို့သော တိကျသောစာရွက်စာတမ်းများပါရှိလေ့ရှိသည်။ ဤစာရွက်စာတမ်းသည် ကျယ်ပြန့်ရန်မလိုအပ်သော်လည်း တိကျပြီး ရှာဖွေရလွယ်ကူသင့်သည်။ `README.md` ကဲ့သို့သော ကောင်းမွန်စွာထိန်းသိမ်းထားသောဖိုင်သည် အဖွဲ့ဝင်အသစ်များကို onboarding လုပ်ရာတွင် အချိန်များစွာ သက်သာစေနိုင်သည်။
အဓိက နည်းပညာဆိုင်ရာ ဆုံးဖြတ်ချက်တစ်ခု (ဥပမာ၊ သတ်မှတ်ထားသော ဒေတာဘေ့စ်၊ ဗိသုကာပုံစံ သို့မဟုတ် ပေါင်းစပ်မှုကန့်သတ်ချက်) ရှိပါက အကြောင်းပြချက်ကို မှတ်တမ်းတင်ထားပါ။ ၎င်းသည် အဖွဲ့အား အခြေအနေကို နားလည်စေပြီး တူညီသော ဆွေးနွေးမှုကို ထပ်ခါတလဲလဲ မပြုလုပ်မိစေရန် ကူညီပေးသည်။
ပိတ်
ထိန်းသိမ်းနိုင်သော ကုဒ်သည် ကောင်းမွန်သော အလေ့အကျင့်များ၏ ရလဒ်ဖြစ်သည်- ရှင်းလင်းစွာရေးသားခြင်း၊ တာဝန်ဝတ္တရားများကို ခွဲခြမ်းစိတ်ဖြာခြင်း၊ တသမတ်တည်း ထိန်းသိမ်းခြင်း၊ ရှုပ်ထွေးမှုကို လျှော့ချခြင်းနှင့် စမ်းသပ်မှုများဖြင့် ပြောင်းလဲမှုများကို ကာကွယ်ခြင်းတို့ဖြစ်သည်။ မည်သည့်ကုဒ်မျှ ပြီးပြည့်စုံသည် မဟုတ်ပါသော်လည်း အဖွဲ့သည် အရည်အသွေးကို ကတိကဝတ်ပြုထားပါက ပရောဂျက်တိုင်းသည် အဆက်မပြတ် တိုးတက်နိုင်ပါသည်။ အထက်ဖော်ပြပါ အကြံပြုချက်များကို အကောင်အထည်ဖော်ခြင်းဖြင့် ယနေ့တွင်သာမက နောင်လာမည့်လများနှင့် နှစ်များတွင်ပါ ဖွံ့ဖြိုးတိုးတက်ရန် ပိုမိုကောင်းမွန်စွာ ပြင်ဆင်ထားနိုင်မည်ဖြစ်သည်။