C# Coding Standards
Dasturlashni o’rganishni boshlagandan keyin biron masalani
yechishga qaratilgan dasturlarni qilish mumkin. Lekin kodni to’g’ri yo’l bilan
yozish uchun ko’p ko’nikma va bilim talab qilinadi. Ko’pchilik programmistlar
xatosiz ishlaydigan kod yoza olishadi lekin uni “yaxshi kod” deb aytish qiyn. “yaxshi
kod” – sanat asariga o’xshaydi va u programmistdan ko’proq ko’nikma, mantiqiy
fikrlash, YAXSHI USTOZ va albatta
tinimsiz o’qib o’rganish talab qiladi. Har bir programmistlar komandasi uchun “yaxshi
kod” tushunchasi turlicha bo’lishi mumkin.
Eng
avvalo “yaxshi kod”da minimal ishonchlilik, tushunarli, lozim bo’lganda oson qo’shimcha
kiritish yoki to’girlash mumkin bo’lishi kerak.
Ixtiyoriy proyekt qilinishida eng kamida quyidagi 3ta
prinsipga amal qilininadi:
1.
Ekspert baholash - Proyektdagi har bir kod
boshqa kishi(senior programmist) tamonidan test qilinishi, uning kodlash
standartlariga mos kelish yoki kelmasligini aniqlash, qo’yilgan talablarga
javob berish yoki bermasligini aniqlash.
2.
Arxitektor baholashi – komonda arxitektori proyektdagi
asosiy modellarni ko’rib chiqishi lozim
3.
Komandadagilarning fikri – proyektdagi kodlarning lozim bo’lgan qismini
komondadagilar bilan tahlil qilish, fikr almashinish
Dasturlashni o'rganishni kodlash standartini o’rganishdan
boshlashlagan maqsadga muvofiqdir.
CSharpda kodlash standarti qisman quyidagilardan iborat:
Nomlanishlarda odatda Pascal Casing(1-harfi bosh har bilan va har bir qism so’z bosh harf bilan) va Camel Casing(1-harfi kichik harf bilan boshlanadi va har bir qism so’z bosh harf bilan)lardan foydalanish mumkin.
Pascal Casing nomlanishlarga misollar: BackGroundColor, TotalsCount,
ConnectionString, GetPersons, GetQueryScript;
Camel Casing nomlanishlarga misollar: backGroundColor, totalsCount, connetionString,
getPersons, getQueryScript;
CSharpda Nomlanishlar quyidagi asosiy qoidalar yordamida hosil qilinadi:
1.
O’zgaruvchilarni va metod parametrlarini e’lon
qilishda doimo Camel Case dan foydalaniladi.
Masalan:
string fisrtName;
int rowsCount;
void GetAxisName(string column)
{
…
}
2.
Propertilarni(maydon va metodning birgalikdagi
ko’rinishi (get, set)) e’lon qilishda
Pascal Casedan foydalaniladi
Masalan:
public int Month
{
get {…}
set {…}
}
3.
Konstanta o’zgaruvchilarni e’lon qilishda doimo
o’zgaruvchi nomidagi harflar barchasi bosh harf(Upper Case) bo’lishi lozim
4.
Nomlanish hech qachon raqam bilan boshlanmasligi
lozim (Odatdan kompilyator bunga yo'l qo'ymaydi ham)
5.
Class, property, metod va hokozolarni nomlashda
nom tushinarli bo’lishi losim. Misol uchun class nomi “P” o’rnida “Person” kabi
6.
.Net Freamwork ishlatadigan nomlanishlarni
nomlashda ishlatmaslik kerak
7.
“_” suffikisini imkon qadar ishlatmaslik
8.
Interface nomi oldida doimo “I” ni ishlatish lozim. Masalan IDosposabel, IDataMining, IRawData
9.
Exception sinflari nomidan keyin doimo “Exception”
suffiksini qo’shish lozim
10.
Sinf nomini uning ichidagi properti nomlari
oldidan qo’shmaslik lozim. Masalan Person sinfida PersonFirstName emas
FirstName deb aniqlash yetarli
11.
Boolean(mantiqiy) propertilar nomlari oldida doimo “Is”,”Has”
yoki “Can” kabi suffikslarni ishlatish lozim. Masalan, IsVisible, HasChildren, HasParent,
IsActive, CanFocus, CanExecute
12.
Doimo sinf saqlanayotgan fayl nomi sinf nomiga
moas bo’lishi kerak
13.
Fayl nomlanishlarida Pascal Caseni ishlatish
lozim
14.
Controllarni nomlashda uning nomi oldidan
Control tipini bildiruvchi 3ta harfli qisqartma qo’yish maqsadga muvofiq
Masalan Label –lbl, TextBox –txt, DataGrid –
dtg, Button – btn, ImageButton – imb, HyperLink – hlk, DropDownList – ddl,
CheckBox – chk, RadioButton – rdo, Image – img, Panel – pnl va hokozo
15.
Sinfni nomlashda Pascal Case dan foydalaniladi
16.
Metod nomlanishida – Pascal Case ishlatiladi,
metod nomi metod nima qilishini anglatishi lozim. Masalan Jadvallar sonini aniqlash uchun ishlatiladigan metodni GetCount emas GetTablesCount kabi nomlash to'g'riroq bo'ladi
17.
O’zgaruvchilar nomlari doimo ma’noga ega va
tushinarli bo’lishi lozim, ya’ni i, j, k, a, b, … kabi oddiy belgi nomlardan
foydalanmaslik kerak. (takrorlanish operatorlarida odatda ko'pchilik i,k,j,a,b,... larni ko'p ishlatishadi)
18.
Boshqa member o’zgaruvchilar tomonidan qiymati
o’zgartirilishi mumkin bo’lgan local o’zgaruvchilar nomlari oldidan “_”
perifiksini qo’shish lozim
19.
Koddagi bloklarni ajratishda probel emas TABni
ishlatish lozim
20.
Har bir metodga Comment(Izoh) yozish lozim
21.
Koddagi kod guruhlarini #region bilan ajratish
lozim
Maslan
22.
Imkon qadar metodlarni qismlarga ajratish lozim,
1ta metod 25qatordan o’tmasligi kerak
23.
Metod 1ta ishni bajarishga mo’ljallangan bo’lishi
lozim
Maslan
To’g’ri yaratilgan metodlar:
void
SaveAddress ( string address )
{
// adressni saqlash.
// ...
}
void SendEmail ( string address, string email )
{
// address o’zgarganligi haqida email jo’natish.
// ...
}
Xato aniqlangan metodlar:
void SaveAddress ( string address, string email )
}
Xato aniqlangan metodlar:
void SaveAddress ( string address, string email )
{
//
1-ISH.
// adressni saqlash.
// ...
//
2-ISH.
// address o’zgarganligi haqida email jo’natish.
// ...
}
24.
Imkon qadar System namespaceda aniqlangan
tiplardan foydalanish
Masalan int (int16,int32,int64 lar emas), string
(String emas), object (Object emas)
25.
Kodning hardcode bo’lmasligiga
harakat qilish (sonlarni fayl yuqori qismida const qilib e’lon qilish,
stringlarni resurse faylidan olib kelish lozim)
26.
Stringlarni taqqoslashdan oldin Lowercase yoki
UpperCasega o’girish
27.
“” ning o’rnida String.Empty dan foydalanish
28.
Enum dan foydalanganda string bo’yicha
tekshirmaslik
Maslan,
enum MailType
{
Html,
PlainText,
Attachment
}
To’g’ri:
void SendMail (string message, MailType mailType)
{
switch ( mailType )
{
case MailType.Html:
// ... biron amallar bajarish ...
break;
case MailType.PlainText:
// ... biron amallar bajarish ...
break;
case MailType.Attachment:
// ... biron amallar bajarish ...
break;
default:
// ... biron amallar bajarish ...
break;
}
}
Noto’gri:
void SendMail (string message, string mailType)
{
switch ( mailType )
{
case "Html":
// ... biron amallar bajarish ...
break;
case "PlainText":
// ... biron amallar bajarish ...
break;
case "Attachment":
// ... biron amallar bajarish ...
break;
default:
// ... biron amallar bajarish ...
break;
}
}
29.
Bironta Control eventidagi metodni eventni
chaqirib ishlatmaslik lozim
Masalan Button controli uchun click
eventidagi metodni programma orqali
buttonni click qilib chaqirmaslik lozim
30.
Dastur joylashgan yo’lni kodda ishlatishda hardcode
qimaslik (var appPath = Environment.CurrentDirectory; ni ishlatish kerak)
31.
Foydalanuvchiga Xatoliklar haqida xabar berish
va bu xabar xatolikni bartaraf qilishda tushinarli bo’lishi lozim.
32.
1ta oddiy faylda bordan ortiq classni
aniqlamaslik lozim
33.
Juda ko’p parametrli metod yaratmaslik lozim,
agar metodda 4-5tadan ko’p parameter bo’lsa uni class yordamida aniqlash lozim
34.
Collection qaytaruvchi metodlarda null o’rnida
empty collection qaytarish lozim, chunki nullga tekshirishdan ko’ra count()
tezroq ishlaydi
35.
Proyektda ichma-ich papkalarni imkon qadar
ishlatmaslik
36.
Agar kodda database connection, socket,
filestreamlar ishlatilgan bo’lsa doimo finally qismida close() qilish lozim
37.
Satrlarni birlashtirishda doimo StringBuilderni
ishlatish lozim. Masalan var queryScript= String.Format("select {0} from {1} where {2}",totalFunctionScript,tableName,whereScript);
38.
Commentlar qayerda zarur bo’lsa o’sha yerga
comment yozish, koddagi har bir qatorga yoki har bir e’lon qilingan o’zgaruvchiga
comment yozish shart emas
Bundan tashqari agar class ko’p
resursdan foydalanishga mo’ljallangan bo’lsa unda IDisposable interfeysidan
foydalanish lozim, uning Dipose() metodi yordamida class ob’yekti ishlatilib bo’lingach
uni tozalash mumkin. (IDisposabe interfaseidan foydalanib yaratilgan class ob’yektini
using() {} bloke yordamida ishlatganda Dispose()
metodi avtomatik chaqiriladi)
Maslan
using (CubeSchemaDataSource cubeSchemaDataSource =
DataSource.GetCubeSchema())
{
// ...
}
No comments:
Post a Comment
Note: only a member of this blog may post a comment.