logo
post image
user image

DIGITAL GENERATION

Muallif

June 10, 2024

159

C#. Nomlanishlar

C#

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 qilinadi:
1. Ekspert baholash — Proyektdagi har bir kod boshqa kishi(senior developer) 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 boshlovchilar ishni kodlash standartini o'rganishdan boshlashlari maqsadga muvofiq.
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 Casingga misollar: BackGroundColor, TotalsCount, ConnectionString, GetPersons, GetQueryScript;
Camel Casingga misollar: backGroundColor, totalsCount, connetionString, getPersons, getQueryScript;
Nomlanishlarda quyidagi asosiy qoidalarga amal qilinishi lozim:
1. O'zgaruvchilarni va metod parametrlarini e'lon qilishda doimo Camel Case dan foydalanish lozim.
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 (Odatda kompilyatorning o'zi bunga yo'l qo'ymaydi)
5. Class, property, metod va hokozolarni nomlashda nom tushinarli bo'lishi losim. (masalan class nomi "P" o'rnida "Person" kabi)
6. .Net Freamwork ishlatadigan nomlanishlarni nomlashda ishlatmaslik
7. "_" suffikisini imkon qadar ishlatmaslik
8. Interface nomi oldida doimo "I" ni ishlatish. Masalan IHelper, IDisposable, IBussinessView kabi
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(manitiqiy) propertilar nomlari oldida doimo "Is","Has" yoki "Can" kabi suffikslarni ishlatish kerak.
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
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 BisnessView sinfidagi Cubelar sonini aniqlovchi metodni GetCount deb emas GetBisinessViewCubesCount deb nomlash lozim
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
18. Boshqa member o'zgaruvchilar ta'monidan 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
Masalan:

/uploads/image/1.png

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 )
        {
                // 1-ISH.
                // adressni saqlash.
                // ...

                // 2-ISH.
                // address o'zgarganligi haqida email jo'natish.
                // ...
        }

24. 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
Masalan:

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'g'ri:

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; kabi resurslarni ishlatish lozim)
31. Foydalanuvchiga Xatoliklar haqida xabar berish va bu xabar xatolikni bartaraf qilishda tushinarli bo'lishi lozim.
32. 1ta oddiy faylda birdan 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. Starlarni birlashtirishda doimo StringBuilderni ishlatish lozim
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. (IDisposable interfaseidan foydalanib yaratilgan class ob'yektini using() {} bloke yordamida ishlatganda Dispose() metodi avtomatik chaqiriladi)
Masalan:

using (BussinesViewDataSource bussinesViewDataSource = DataSource.GetBussinesView())
{
    // ...
}

Izohlar