26/10/2022
ပရိုဂရမ်းမင်းရဲ့ အမည်ပေးကင်ပွန်းတပ်
Programming language တိုင်းမှာ developer တွေလိုက်နာရမယ့် standard rules ကိုယ်စီရှိကြပါတယ်။ အဲ့ဒီ rules တွေ syntax တွေထဲကမှ Naming conventions လို့ခေါ်တဲ့ variables, classes, functions, interfaces, file names အစရှိတာတွေကို အမည်ပေး ကင်ပွန်းတပ်ခြင်းကလည်း developer တွေအတွက် အရေးပါတဲ့ ဥပဒေသတစ်ခုဖြစ်ပါတယ်။
မလိုက်နာရင် ဘာဖြစ်မှာလဲ?
ဘာမှတော့ မဖြစ်ပါဘူး၊ ဒါပေမယ့် language တစ်ခုရဲ့ standard naming conventions ကို လိုက်နာခြင်းအားဖြင့်တော့ name တစ်ခုကိုမြင်တာနဲ့ ဒါကတော့ constant variable ဖြစ်တယ်၊ ဒါကတော့ class name၊ ဒါကတော့ function စသဖြင့် အလွယ်တကူခွဲခြားသိမြင်နိုင်ပါတယ်။
အဲ့တော့ မေးခွန်းကိုပြန်ဖြေရရင် naming conventions ကိုသေချာမလိုက်နာတဲ့အခါ ကိုယ့်ရဲ့ codes တွေက complex ဖြစ်ပြီး နောင်တချိန် ကိုယ်ပြန်ကြည့်ရင်တောင် confuse ဖြစ်စေပါတယ်။ ဒီတော့ ကိုယ့်ရဲ့ codes တွေက hard to maintain ဖြစ်ပြီး Bad codes ဖြစ်သွားပါတယ်။
a, b, a1, b3, myFunction(), PERSONclass, … စတာတွေကတော့ bad naming examples တွေလို့ ပြောနိုင်ပါတယ်။
ဟုတ်ပြီ၊ ဘယ်လို လိုက်နာရမှာလဲ?
ပထမဆုံးအနေနဲ့ အသုံးများတဲ့ case types တွေကို ဥပမာနဲ့ သုံးသင့်တဲ့နေရာတွေကို ပြောပြေပေးသွားပါမယ်။ (language အပေါ်မူတည်ပြီး ပြောင်းလဲမှုတွေလည်းရှိနိုင်ပါတယ်၊ ဒါကြောင့် ဒီ မှာကတော့ Java, Kotlin, Android ကို ဦးတည်ပြီး ပြောပြမှာဖြစ်ပါတယ်)
1. Camel Case (camelCase)
First letter ကို small letter နဲ့စရပါတယ်။ တကယ်လို့ name က word တစ်ခုနဲ့မပြည့်စုံရင် နောက်ထပ် word တွေရဲ့ အစ စာလုံးကို capital letter နဲ့ လိုက်ပေးရပါတယ်။
Examples - age, firstName,findViewById.
များသောအားဖြင့်တော့ variable names တွေ function names တွေမှာ အသုံးပြုလေ့ရှိပါတယ်။
2. Pascal Case (PascalCase)
ဒါကတော့ camel case လိုပဲ ဒါပေမယ့် first letter က အစ capital letter နဲ့ စပြီး word တိုင်းရဲ့ အစမှာ captial letter သုံးပေးရပါတယ်။
Examples - Person, ActivityMain, DefaultUserRepository
များသောအားဖြင့် class names, interface names တွေမှာ သုံးရပါတယ်။ java or kotlin file names ပေးတဲ့အခါမှာလည်း Pascal case ကို သုံးရပါတယ်။
3. Snake Case (snake_case)
သူကတော့ small letter တွေချည်းရေးရပါတယ်။ word တစ်ခုနဲ့တစ်ခု ကြားမှာတော့ underscore (_) ထည့်ပေးရပါတယ်။
Examples - first_name, activity_main.xml
Android မှာဆိုရင်တော့ layout files ကအစ resource files တွေ file name ပေးတဲ့နေရာမှာသုံးရပါတယ်။ Flutter မှာ file name တွေ ပေးရင်လည်း snake_case လေးတွေနဲ့ ပေးရပါတယ်။
4. Macro Case (MACRO_CASE)
သူလည်း snake_case လို word တွေကို underscore (_) နဲ့ဆက်ရပါတယ်။ ဒါပေမယ့် all capital letter ပါ။
Example - MAX_SIZE, DEFAULT_SPEED
သူလည်း များသောအားဖြင့် ကြိုပြီး ကြေညာရတဲ့ variable ဒါမှမဟုတ် constant variable တွေမှာ သုံးပေးရပါတယ််။
5. Kebab Case (kebab-case)
Small letters word တွေကို hyphen (-) နဲ့ ဆက်ပေးရပါတယ်။ (snake_case လို)
Example - container, my-body
သူ့ကိုတော့ css naming တွေမှာ အများဆုံးမြင်တွေ့နိုင်ပါတယ်။
Types တွေကတော့ ဒီလောက်ပါပဲ တခြား types တွေလည်းရှိသေးပေမယ့် အသုံး နဲလို့ ထည့်မပြောတော့ပါဘူး။ ဒီလိုမျိုး case type တွေ ခွဲရေးရုံနဲ့တော့ မပြီးသေးပါဘူး။ နာမည်ပေးတဲ့ အခါမှာလည်း သူ့ကို သုံးမယ့်နေရာနဲ့ အနီးစပ်ဆုံးဖတ်ရလွယ်အောင်၊ နားလည်လွယ်အောင်ပေးဖို့လည်း လိုပါသေးတယ်။
ဥပမာ -
val a = “Mg Mg”
val b = 25
val c = Person(name = a, age = b)
ဒီ Kotlin code ကိုကြည့်မယ်ဆိုရင် a က ဘာလဲ? b က ဘာလဲ? မြင်ရုံနဲ့ မသိနိုင်ပါဘူး။ သူတို့ရဲ့ purpose ကို name ဖတ်ရုံနဲ့ ဘာတွေလုပ်တယ် ဘာတွေရှိမယ် မခန့်မှန်းနိုင်တော့တဲ့အခါမှာ bad code တွေဖြစ်လာပါတယ်။ ဒီဥပမာမှာ code ကို အစအဆုံး သေချာလိုက်ကြည့်မှသာ a က name ကို ဆိုလိုမှန်း b က age ကို ရည်ညွှန်းမှန်း သိရပါတယ်။ ဒါက 3 ကြောင်းပဲ ရှိတဲ့ code snippet လေးမလို့ တကယ့် လက်တွေ့မှာ ရာချီ ထောင်ချီ code တွေ များလာတဲ့အခါမှာ naming က ကကျိုးကကြောင်လုပ်နေရင် တော်တော်လေးကို တိုင်ပတ်ပါတယ်။
တခါတလေမှာ naming ကို မလိုအပ်ပဲ အရှည်ကြီးတွေလည်းပေးမိတတ်ပါတယ်။
ဥပမာ -
val progressBarDashboardLoading: ProgressBar = findViewById(R.id.progressBarDashboardLoading)
ဒီ Android ဥပမာမှာ ဆိုရင်လည်း မလိုအပ်ပဲ naming က သက်တောင့်သက်သာမရှိလောက်အောင်ကို ရှည်လျားလွန်းနေပါတယ်။ ဆိုလိုချင်တဲ့အဓိပ္ပာယ်ကတော့ dashboard screen မှာရှိတဲ့ loading progress bar ပေါ့။ ဒါပေမယ့် ဒီလို pbLoading ဆိုပြီး အတိုရေးမယ်ဆိုရင်လည်း အဆင်ပြေနိုင်ပါတယ်။ (ဥပမာ ပြခြင်းသာ)
ပြီးတော့ xml မှာ id name တွေပေးရင် (xml သုံးသေးသူများအတွက်သာ 😄) view type ပေါ်မူတည်ပြီး ရေးလေ့ရှိတဲ့ အတိုကောက်လေးတွေရှိကြပါတယ်။
TextView => tv
Button => btn
CheckBox => cb
LinearLayout => ll
Spinner => spn
RadioButton => rb
စသဖြင့် prefix လေးတွေနဲ့ ပေးမယ်ဆိုရင် အများကြီး best practice ဖြစ်စေမှာပါ။
ကဲ မင်မင်လည်းလက်ညောင်းသွားပြီဆိုတော့ ဒီနေ့တော့ ဒီလောက်ပါပဲ။ နောက်အပတ်တွေမှာလည်း Technical contents လေးတွေ Android tutorial or contents လေးတွေ တင်ပေးသွားဖို့ရှိလို့ page ကို follow လုပ်ထားနိုင်ပါတယ်ခင်ဗျ။ အဆုံးထိ ဖတ်ပေးလို့ ကျေးဇူးအများကြီးတင်ရင်း နှုတ်ဆက်လိုက်ပါတယ်။