Sunday, November 21, 2010

Coding Standards Part-I


ဆောဖ့်ဝဲရေးသားထုတ်လုပ်မှုဖြစ်စဉ် (Software Development Process) တခုမှာ စမ်းသပ်စစ်ဆေးခြင်း (Testing [Unit Test, Module Test, Integration Test, etc..]) ဆိုတဲ့ အဆင့်နဲ့ ပြုပြင်မွန်းမံထိန်းသိမ်းခြင်း (Maintenance)  ဆိုတဲ့ အဆင့်တွေပါဝင်နေပါတယ်။ အဲဒီအဆင့်တွေကို လုပ်ကိုင်ဆောင်ရွက်တဲ့အခါမှာ ပရိုဂရမ်ရေးသားခြင်း (Coding/Programming/Implementation) ဆိုတဲ့အဆင့်မှာ မိတ်ဆွေတို့ရေးသားခဲ့တဲ့ ကုဒ်(Source Code) တွေဟာ အရေးပါတဲ့ အခန်းက ပါဝင်လာပါပြီ။

ဒီ Source Code တွေလို့ပြောတဲ့နေရာမှာ၊ ဆောဖ့်ဝဲရေးသားဖို့ အဓိကသုံးတဲ့ Major Implementation Language ( ဥပမာ Java, J5EE, C#.NET, VB.NET, C, C++ ) နဲ့ ရေးထားတဲ့ကုဒ်တွေ၊  Scripting ( ဥမမာ VBScript, JavaScript) ကုဒ်တွေ၊ Markup Language (HTML, XML, etc..) ကုဒ်တွေအပြင်၊  Query ( Structured Query Language) ကုဒ်တွေပါ အားလုံး ပါဝင်ပါတယ်။

ဒါကြောင့် Software Development Process ရဲ့  ပရိုဂရမ်ရေးသားခြင်း အဆင့် (Coding/ Programming/ Implementation Stage) မှာ မိတ်ဆွေတို့ရေးသားခဲ့တဲ့ အဲဒီကုဒ်တွေရဲ့ ရှင်းလင်းမှု ( Simplicity and Clarity) နဲ့ ဖတ်ရှုနားလည်နိုင်စွမ်းရှိမှု ( Readability and Understandability) တွေဟာ ဆောဖ့်ဝဲတခုကို ဘယ်လိုအဆင်ပြေပြေ စမ်းသပ်စစ်ဆေးနိုင်မလဲ၊ ပြင်ဆင်တိုးခဲျ့ဖို့လိုအပ်လာရင် ဘယ်လောက်ထိ လွယ်ကူမလဲ  ဆိုတဲ့ မေးခွန်းတွေရဲ့ အဖြေပဲပေါ့ဗျာ။ ဒါကြောင့် ကျွန်တော်တို့ဟာ ကုဒ်ရေးသားခြင်းနဲ့ ဆိုင်တဲ့ စည်းကမ်းနည်းလမ်းတွေကို သိရှိလိုက်နာဆောင်ရွက်ကြမယ်ဆိုရင် ရေရည်မှာ အားလုံးအတွက် အကိုျးရှိနိုင်ပါတယ်။ တစ်ခု သတိချပ်ရမှာကတော့ ဒီ စံသတ်မှတ်ချက်တွေဟာလည်း “တကျောင်းတဂါထာ၊ တရွာတပုဒ်ဆန်း” ကွဲပြားနိုင်တယ်ဆိုတယ်ပါပဲ။ ဥပမာ  Sun Microsystem ကသတ်မှတ်ထားတဲ့ Java Coding Standard နဲ့ Microsoft  ကသတ်မှတ်ထားတဲ့  .NET Coding Standard တွေဟာ အနည်းငယ်တော့ ကွဲပြားမှုရှိတာပေါ့ဗျာ။ မိတ်ဆွေရဲ့ ကုမ္ပဏီမှာလည်း ကိုယ့် ကိုယ်ပိုင် သီးသန့် သတ်မှတ်ချက်တွေ ရှိကောင်းရှိနိုင်တာပေါ့။  ဒါပေမယ့် အားလုံးသော တကယ့်အရေးအကြီးဆုံး အခြေခံအချက်အလက်တွေ သဘောတရားတွေ ကတော့ အတူတူပါပဲ။

 

Ada Lovelace 

Augusta Ada King, Countess of Lovelace

(10 December 1815 – 27 November 1852)

[ကမ္ဘာ့ ပထမဆုံး ကွန်ပျူတာ ပရိုဂရမ်မာ]

 





၁။ အမည်ပေးပုံ နည်းစနစ်များ (Naming Rules)

အမည်ဟာ အရေးကြီးပါတယ်။ ဒါဟာမိတ်ဆွေရေးသားတဲ့ Application ရဲ့ ယုတ္တိအဓိပ္ပါယ်စီးဆင်းမှု (Logical Flow) ကို နားလည်စေနိုင်ဖို့ ကောင်းကောင်းအထောက်အကူ ပြုပါတယ်။ ဒါကြောင့် အမည်ပေးတဲ့အခါ အဓိပ္ပါယ်ရှိဖို့ ဒီ Application ကို သုံးစွဲမယ့် နယ်ပယ်မှာရှိတဲ့ စကားလုံးတွေဖြစ်ဖို့ လိုအပ်ပါတယ်။ အမည်ဟာ “ဘယ်လို ဘယ်ပုံ ဘယ်နည်း (how)” ဆိုတာထက် “ဘာလဲ (what)” ဆိုတာကိုသာ တိတိကျကျ ဖော်ညွှန်းရမှာ ဖြစ်ပါတယ်။

1.1။ Class Name

အကြီးစာလုံးနဲ့ စသင့်ပါတယ်။ နာမ် (Noun) ပဲဖြစ်သင့်ပါတယ်။ မိတ်ဆွေရဲ့ Class Name မှာ စကားလုံး (Word) တလုံး ထက်ပိုရင် စကားလုံးတိုင်းရဲ့ အစစာလုံးတွေကို အကြီးစာလုံးနဲ့ပဲ စသင့်ပါတယ်။ အဲဒီ စကားလုံးတွေအားလုံးရဲ့ စုပေါင်းအနက်ဟာလည်း နာမ် ပဲဖြစ်သင့်ပါတယ်။ ဥပမာ မိတ်ဆွေဟာ ကျောင်းတကျောင်းအတွက် Application တခု ရေးတယ်ဆိုပါစို့။ ဒါဆိုရင် (ဖြစ်နိုင်ခြေရှိတဲ့) Class Name တွေဟာ.. Student, Lecturer, Course, FirstYearStudent,  ExamTimeTable, ExamResult စသည်ဖြင့်ပေါ့ဗျာ။ ကိုယ့် လိုအပ်ချက်နဲ့ကိုယ်ပေါ့။ တကယ်လို့ Class မဟုတ်ပဲ Interface ဆိုရင် ရှေ့မှာ အိုင်အကြီးစာလုံး (Capital I) ထည့်ပေးရပါမယ်။  IStudent, ILecturer, IExamResult စသည်ဖြင့်ပေါ့။ ဘယ်နာမည်မှာမှ Space လုံးဝ မပါရပါဘူး။ Class Name, Interface Name, Function/Method/Procedure/Sub Routine Name, variable name….ဘယ်အမည်မဆို Space လုံးဝ မသုံးရ။

1.2။ Function/Method/Procedure/Sub Routine Name

စကားလုံးတလုံးတည်းဆိုရင် ကြိယာ (Verb) ဖြစ်သင့်ပါတယ်။ စကားလုံးတလုံးထက်ပိုရင် “ကြိယာ + နာမ်”  အတွဲဖြစ်သင့်ပြီး စုပေါင်းစကားလုံးရဲ့အနက်ဟာလည်း ကြိယာပဲ ဖြစ်သင့်ပါတယ်။ ဒီနေရာမှာ အကြီးအသေး (Casing) နဲ့ ပတ်သက်ပြီး Java နဲ့ C# နည်းနည်းကွဲပါတယ်။ Java မှာ အစ စကားလုံး ရဲ့ ရှေ့ဆုံး အက္ခရာဟာ အသေးပဲဖြစ်ရပါမယ်။ C# ကတော့ အကြီးပါ[Class Name ရေးပုံနဲ့ အတူတူပါပဲ]။

ဥပမာ…

Java             public void show()

C#               public void Show()

Java             public double calculateTotalWeight(weightUnit wu)

C#               public double CalculateTotalWeight(WeightUnit wu)

getter/setter လို  function တွေရေးရင် return ပြန်မယ့် method တွေမှာ သူပြန်ပေးမယ့် အရာကို ထည့်ရေးသင့်ပါတယ်။ ဥပမာ..

Java             public String getStudentName(String rollNo)

C#               public string GetStudentName(string RollNo)

စသည်ဖြင့် စသည်ဖြင့် ပေါ့ဗျာ။ အဲဒီလို ပထမစကားလုံးကိုအသေးနဲ့စ၊ နောက်စကားလုံးတွေကို အကြီးနဲ့ စ ပြီးရေးတဲ့ပုံစံ(Java ပုံစံ) ကို  “camel Casing” လို့ခေါ်ပြီး၊ အားလုံးအကြီးနဲ့စတဲ့ C# ရေးသားပုံကိုတော့ “Pascal Casing” လို့ ခေါ်ပါတယ်။




1.3။ Variable Name

Variable တွေဟာ “နာမ်”  သို့ မဟုတ် “နာမဝိသေသန + နာမ်” ပုံစံ ဖြစ်သင့်ပြီး “camel Casing” ကိုပဲသုံးသင့်ပါတယ်။ သင့်တော်မယ် လိုအပ်မယ်ထင်ရင် တွက်ချက်မှု အထူးပြုစကားလုံး (Computation Qualifiers – Avg, Sum, Min, Max, Index, etc) တွေ ထည့်သုံးသင့် ပါတယ်။ ဥပမာ MyCountry ဆိုတဲ့ Class ထဲမှာ variable တွေ ကြေငြာမယ်ဆိုပါစို့…

private float minimumIncome;

private double maximumGoodsPrice;

private short bottomDevelopmentIndex;

စသည်ဖြင့်ပေါ့။

Boolean variable တွေအတွက် သင့်တော်မယ်ထင်ရင် “is, Is” ဆိုတဲ့ စကားလုံးထည့်သုံးသင့် ပါတယ်။ ဥပမာ

private boolean fileIsFound; (or) private boolean isFileFound;

ကိန်းသေတွေ(Java မှာတော့ final variable ပေါ့ဗျာ) ဆိုရင် အားလုံးအကြီးစာလုံးတွေနဲ့ရေးသင့်ပြီး Word တခုနဲ့ တခုကြားမှာ underscore ထည့်ရေးပေးရပါမယ်။ ဥပမာ

public const NUM_OF_DAYS_IN_A_WEEK = 7;

ပြီးတော့ မိတ်ဆွေဟာ ဘယ်လိုအမည်အတွက်မဆို အဓိပ္ပါယ်ရှိပြီး ပြည့်စုံတဲ့ စကားလုံးတလုံးဖြစ်အောင် အားထုတ်သင့်ပါတယ်။  private int x;   ဆိုတာမိုျး ၊  private string s;   ဆိုတာမိုျး လုံးဝမလုပ်သင့်ပါဘူး။ ဒီ ‘x’  တို့ ‘s’  တို့ဟာ ဘာကိုရည်ရွယ်မှန်း၊ ဘာကြောင့် ဘာအတွက် ဘယ်နေရာ မှာ သုံးမှန်း၊  ဘယ်သိနိုင်ပါတော့မလဲ။ နောက်တချက်ကတော့ အတိုကောက်စကားလုံးတွေကို တတ်နိုင်သလောက် မသုံးစွဲ ဖို့ နဲ့၊ သုံးစွဲရင်လည်း သတိထားပြီး သုံးစွဲဖို့လိုတဲ့ အကြောင်းပါပဲ။ ဥပမာ မိတ်ဆွေဟာ  “min”  ဆိုတဲ့စကားလုံးကို “minimum” ဆိုတဲ့ အဓိပ္ပါယ်နဲ့ သုံးမယ်ဆိုရင်၊ ပရိုဂရမ်တစ်လျောက်လုံး အဲဒီ အဓိပ္ပါယ် အတိုင်းပဲ တသမတ်တည်း သုံးစွဲသွားဖို့လိုပါတယ်။ Local variable အတွက်ပဲဖြစ်စေကာမူ၊ နောက်ထပ် “min”  တစ်လုံးကို၊ “minute” (မိနစ်) အတွက်ရည်ရွယ်တာဆိုပြီး ထပ်မသုံးပါနဲ့တော့။

1.4။ Table Name

အနဲကိန်းနာမ် (Singular Noun) ဖြစ်သင့်ပါတယ်။ ဥပမာ table name ကို  Students လို့ ပေးမယ့်အစား  Student လို့ပဲပေးပါ။ Column name တွေပေးတဲ့ အခါမှာလည်း table ရဲ့ နာမည် ထပ် ထည့်မနေပါတော့နဲ့ ။ ဥပမာ  StudentID, StudentName လို့လုပ်မနေပဲ  ID, Name, စသည်ဖြင့် ပဲပေးပါ။ နောက်တချက် သတိပြု သင့်တဲ့အချက်ကတော့ column name တွေမှာ data type တွဲ ထည့်ပြီးမထားပါနဲ့။  ဥပမာ   IntID, VarCharName စသည်ဖြင့် မလုပ်ပါနဲ့။ တချိန်ချိန်မှာ ကိုယ့် table ရဲ့  column data type ကို ပြောင်းလဲဖို့ လိုအပ်လာတဲ့အခါ အလုပ်မရှုပ်တော့ဘူးပေါ့ဗျာ။  SQL  Server  ကိုသုံးတဲ့ Application တွေမှာ၊ stored procedure ကို   “sp-“၊   function ကို “fn-“၊  extended stored procedure ကို  “xp-“  နဲ့စပြီး နာမည်မပေးပါနဲ့။ ဘာလို့လဲဆိုတော့ System က ကြိုတင် သတ်မှတ်ရေးသားထားတဲ့ system defined stored procedure တွေ function တွေ နဲ့၊  မိမိရဲ့ စိတ်ကြိုက်ရေးသားထားတဲ့ user defined stored procedure  တွေ function တွေနဲ့ မရောထွေးစေဖို့ပါ။

ဒါ့အပြင် အမည်ပေးရာမှာ အသံတူစကားလုံး(Homonyms) တွေ[ဥပမာ  write/right, etc] ၊ စာလုံးပေါင်းမှားနိုင်တဲ့စကားလုံးတွေ[check/cheque, etc]၊ ဒေသိယအသုံးအနှုန်းတွေ[color/colour, center/centre, etc] ကို ရှောင်ကျဉ်သင့်ပါတယ်။ ဒါမှသာ ကုဒ်နဲ့ပတ်သက်ပြီး ပြန်လှန်သုံးသပ်ဆွေးနွေးမှု (Code Review) လုပ်တဲ့အချိန်  ပြောဆိုရာမှာ ဇဝေဇဝါ မဖြစ်တော့ဘူးပေါ့။

* * * * * * *  * * * * * * * * * * * * * ** * * * * * * * * * * * * ** * * * * * *

နောက်တချက်ဆွေးနွေးလိုတာကတော့ မိတ်ဆွေတို့ကျောင်းသူ ကျောင်းသား လူငယ်များ မေ့လျော့နေတတ်တဲ့ source code အတွင်းမှာ ရေးရမယ့်၊ မှတ်ချက် မှတ်စု (Comment) တွေ အကြောင်းပါ။ ကျောင်းတွေ သင်တန်းတွေမှာ သိပ်အရေးမကြီးသလိုဖြစ်နေတဲ့ အဲဒီကိစ္စ(Comment ရေုးခြင်း) ဟာ၊ လက် တွေ့ လုပ်ငန်းခွင်မှာတော့ သိပ်ကို အရေးပါတဲ့ ကိစ္စတစ်ရပ်အဖြစ် ရှိနေပါတယ်။



(အပိုင်း နှစ်  Comment အကြောင်း ဆက်ပါဦမယ်။)

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.