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 ေရုးျခင္း) ဟာ၊ လက္ ေတြ့ လုပ္ငန္းခြင္မွာေတာ့ သိပ္ကို အေရးပါတဲ့ ကိစၥတစ္ရပ္အျဖစ္ ရိွေနပါတယ္။



No comments:

Post a Comment

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