Chiroyli kod yozish

Salom. Bugun yozmoqchi bo'lganim nafaqat endi dasturlashni o'rganayotganlar uchun balki dasturlashni yaxshi bilib turib to'g'ri va chiroyli kod yozishni bilmaydiganlarga bag'ishlamoqchiman. Oldin kurs o'tganimda endi o'rganishni boshlagan o'quvchilar kodlarni shunaqangi yozishardiki uni kompilyator zo'rg'a tushinardi.

Oldin o'zim ham kodlarni shunaqa yozardim mana vaqti kelib (mani fikrimcha) kodni chiroyli yoza olaman deb o'ylayman. Lekin hali ham o'zim qilgan proyektlarimda bironta ham komentariya yozmayman. Bu mani kamchiligim deb o'yliman. Balki jamoaviy ishlasam man ham komentariyalar yozarman. Endi keling asosiy kichkina muammolarga o'tsak.

HTML dasrslarida bollar kodlarni quyidagicha yozishardi.

<html><head><title>Birinchi dars</title></head><body>.....</html>


Bu kodni ko'rib ochig'i o'zim ham qo'rqib ketaman. Ayniqsa TABLE

ishlatilgan bo'lsa xatoni topishdan qiyin narsa bo'lmasa kerak. Ha yana

ayrim yosh dasturchilardan «Agar dastur kodi kichkina hajmni egallasa

dastur tez ishlaydi» degan gaplarni ham eshitganman.



Bu gap bir tarafdan to'g'ri, HTML, CSS, JS larda hajm katta ahamiyatga

ega. Lekin C/C++, C#, Delphi, PHP umuman kompilyatsiya qilinadigan

dasturlarda kod hajmini ahamiyati faqat kompilyatsiya jarayonini vaqtini

cho'zadi (bu ham sezilmaydigan darajada). Dasturning qanchalik tez

ishlashi dastur kodninig hajmi bilan emas undagi logika bilan aniqlash

lozim. Agar

while(true) {...}

deb yozgan bo'lsangiz albatta bu dastur qotib qoladi.

Keling endi o'zimni fikrlashimdan kelib chiqib chiroyli kod yozish haqida gapirsam.

Hurmatli dasturchilar klaviaturadagi TAB va ENTER tugmasini bosish tekin va hech qanday chegara qo'yilmagan :)

HTML tilida yozadiganlar uchun

<html>
        </head>
                <title>Birinchi dars</title>
                <meta ... />
                ...
        </head>
        <body>
                <div>
                        <p>asdsad</p>
                        <span>asdasd</span>
                </div>
        </body>
</html>

Keltirgan misolibda faqat TAB va ENTER tugmasini ko'proq bosdim. Bu

kodga qarasangiz qaysi element qayerda ochilgan qayerda yopilgan hammasi

ko'rinadi. Umuman agar element ichida element bo'lsa

<div>
        <div>
                ...
        </div>
</div>

ko'rinishida yozgan ma'qul va ichidagi elementdan oldin TAB ni bosish esdan chiqmasin. Agar element ichida faqat tekst bo'lsa

<span>Salom HTML</span>

bir qatorda yozgan ma'qul. Shunda sizning kodingizni ko'rayotgan

dasturchi ham darhol tushinib oladi va o'zgartirishi oson bo'ladi.

Agar CMS larda ishlagan bo'lsangiz ularga shablon yozguncha chap block,

o'ng block… kabi pozitsiyalarni ko'rsatish kerak. Bunaqa hollarda

...
        <!-- CHAP TARAF -->
        <div>
                ...
        </div>
        ...
        <!-- O'NG TARAF -->
        <div>
                ...
        </div>

ko'rinishida yozsangiz o'zingiz ham keyin qidirib o'tirmaysiz.

Tepada yozganimdek HTML da hajm ahamiyatga ega ekan. Agar PHP ni

ishlatayotgan bo'lsangiz shu HTML faylingizni quyidagicha qilib bir

qator kodga aylantirish mumkin.

<?php echo str_replace(array("\r", "\n", "\t"), "", "html_file.html"); ?>

Boshqa dasturlash tillari uchun

Bitta og'aynim bor, o'zi tuzgan dasturdagi funksiya nomlari, o'zgaruvchi

nomlari va dastur kodini o'zidan boshqa odam tushinishi uchun… manimcha

tushinmasa kerak. Xuddi mashina kodiga o'xshidi. Gohida o'zim ham

shunaqa qilib kod yozaman :).

Umuman olganda dasturlashda o'zgaruvchi nomlari, funksiya nomlari aynan

shunaqa bo'lsin deb yozilgan joyi yo'q. Shundoq bo'lsada qilgan ishingiz

chiroyli bo'lishi bu nafaqat sizga balki atrofdagilarga ham yoqadi.

O'zgaruvchilar e'lon qilish. Agar lotin alfavitini 26 ta

harfidan + sonlar + _ (belgisi) o'zgaruvchi yasash mumkin bo'lsa demak

jami 37 + 37^2 + 37^3 +… + 37^255 (agar o'zgaruvchi uchunligi chegarasi

255 ta bo'lsa) shuncha o'zgaruvchi e'lon qilish mumkin ekan. Lekin biz

nima qilamiz

var a1 = "salom", aa2 = "Dunyo", b = 1, bi = 2, ...

huddi a,b dan boshqa harf yo'qday.

Buning o'rniga quyidagicha shartlarni kiritsak:

Agar konstanta bo'lsa ya'ni dasturlash jarayonida o'zgarmasa katta harflar bilan: OBYEKTLAR_SONI = 5

Agar o'zgaruvchan global o'zgaruvchi bo'lsa: g_ObyektlarSoni = 5 (C++,C#), g_obyektlar_soni = 5 ©

Agar local o'zgaruvchi bo'lsa: l_ObyektlarSoni = 5

Agar klass (sinf) o'zgaruvchisi (class variables) bo'lsa: v_ObkeyetlarSoni

Agar static o'zgaruvchi bo'lsa: s_ObyektlarSoni (C++, C#), s_obyektlar_soni = 5 ©

shunga o'xshash qaysi o'zgaruvchi qaysi tipga tegishligidan kelib chiqib ham:

g_ObyektlarSonii — global int turidagi o'zgaruvhchi

l_ObyektlarSonif — local float turidagi o'zgaruvchi

ko'rinishida yozsak, bu kod bilan ishlash qanchalik oson bo'ladi. Sizga

nima kerak bo'lsa darhol topib olasiz. Ha yana dasturlashda jarayonida

ikki xil yo'nalish mavjud (mani fikrimcha): chiziqli va OOP (OYD —

Obyektga yo'naltirilgan dasturlash).

Chiziqli dasturlashda ko'pchilik dasturchilar hamma

harflarni kichik harflar bilan yozib so'zlarni (_) belgisi bilan

ajratishadi. Misol uchun

int l_count = 5;
float l_objects = 4.5f
get_obejects()

OOP dasturlashda esa so'zlarni bosh harflar bilan ajratishadi. Misol uchun

gCount = 4
GetObjects()

Shundan kelib chiqib kodga qarab qaysi usulda yozilganiga darxol tushinib olishingiz mumkin.

Endi {} kavslarni ishlatishga kelsak. Ba'zi xollarda HTML dagiga o'xshab quyidagicha kodlarga ko'zimiz tushadi.

if (shart) { k = 4; } m += k; int get_k() {return k}

Agar e'tibor bergan bo'lsangiz «return k» ning oxirida; (nuqta vergul)

qo'ilmagan. Agar kompilyatsiya qilsangiz 1 qator N — ustunda xatolik bor

deydi. Lekin topish amrimahol :).

Shu kodni quyidagicha usulda chiroyli qilib yozish mumkin

if (shart) {
        k = 4;
}

m += k;

int get_k() {
        return k;
}

yoki

if (shart)
{
        k = 4;
}

m += k;

int get_k()
{
        return k;
}


Ya'ni bu yerda ham TAB va ENTER tugmalari ko'proq bosilgan. {} larni

ishlatish jarayonida (CSS, JS da ham) { ni ochilgan qatorning o'zida

qoldirish (1 — holatdagiday) yoki pastga tushirishimiz mumkin. }

yopishdan oldin esa yana bir marotaba ENTER ni bosish lozim. Agar {}

ning ichiga hech narsa yozilmasa bir qatorda qoldirsa ham bo'ladi

try 
{
        ...
}
catch(Exception e){}
ko'rinishida.

Agar OpenSource dasturlash jarayonida qatnashgan bo'lsangiz. Kodni

boshlashdan oldin kodni yozish bo'yicha qisqacha talablar qo'yishadi.

Ya'ni man tepada keltirganimday o'zgaruvchilarni e'lon qilish,

funksiyalarni nomlash va bir qancha shunga o'xshash shartlar.

Komentariya yozish

Komentariya yozishning, ko'pchilik dasturlash tillarida, ikki xil usuli mavjud:

// bir qatordagi komentariya
/*
ko'p qatorli
komentariya
*/

Bularni ishlatishni man quyidagicha variantini ko'rsataman. Agar mashina

haydashga pravaga o'qigan bo'lsangiz yo'ldagi belgilar ko'pchiligi

birinchi chorraxagacha yoki ayrim masofagacha yoki yana bitta belgi

chiqquncha o'z ta'sirini o'tkazadi. Komentariya yozishda ham shu usuldan

foydalansak bo'ladi.

Agar komentariyani bir qat kod ichin yozmoqchi bo'lsangiz. Ya'ni

if (shart) { //agar shart = true bo'lsa k bittaga oshadi
        k++;
}
else { //agar shart = false bo'lsa k bittaga kamayadi
        k--;
}

komentariyani ham shu qatorning oxirida yozgan ma'qul.

Agar komentariyani bir block uchun yozmoqchi bo'lsangiz. Ya'ni

// shart dan kelib chiqib k ni qiymati oshadi yoki kamayadi
if (shart) {
        k++;
}
else {
        k--;
}

Agar yozgan komentariyangi juda ko'payib ketsa. Bu bizarni dasturchilar orasida deyarli kam uchraydigan holat. Unda

/* Agar shart ...
...
... */
if (shart) {
        
}
...

ko'rinishida, ya'ni /* */ lardan foydalanilgan ma'qul. Endi boyagi yo'ldagi belgilarga o'xshgan holat

/* Ushbu kod o'zgaruvchilarni tekshirib qiymatini oshiradi
...
... */
ozgina kod
/** Oshirilgan qiymatlarni bazaga kiritadi
...
... */
ozgina kod

Umuman bitta komentariya ikkinchi komentariyagacha bo'lgan qisimni izohlab beradi.

Endi dasturlash kodidagi eng qulay narsa haqida gapirsak. Agar

PHP/C++/C#… kabi tillarda dastur tuzsak (o'zim ham shu qatorda) va uni

boshqa dasturchiga bersak kamida bir oy vaqti ketadi o'rganguncha

(dastur kodiga qarab). Lekin shu vaqtni qisqartirish uchun bizga

o'xshagan dasturchilar DOCUMENTOR ya'ni hujjatlashtiradigan dasturlarni

yozishgan. Ya'ni siz e'lon qilgan o'zgaruvchi, funksiya, class larga

DOCUMENTOR talablari bo'yicha komentariya yozib ketasiz. Bu dasturlar

esa sizning komentariyalaringizdan foydalanib bitta kichkina «kitobcha»

qilib beradi. Yangi dasturchi esa shu kitobchadan foydalanib kod

logikasini emas undagi ishlaydigan funksiyalarini tezroq o'rganib oladi

va ish jarayoniga tezroq kirishadi.

Misol uchun PHP holatida:

/**
* Ushbu funksiya ikkita sonni qo'shib qaytaradi
*
* @author shranet
* @category math
* @param float $son1 birinchi son
* @param float $son2 ekkinchi son
* @returns float $son1 + $son2
*/
function qushish($son1, $son2) {
        return $son1 + $son2;
}

Agar kodingizni shunday yozib www.phpdoc.org/ dagi dasturda tashasangiz, u sizga quyidagicha «kitobcha» ni chiqarib beradi.

/uploads/image/b08ce8.png

O'zim ham birinchi marotaba quyidagicha yozdim :) va birinchi marotaba phpdoc ni o'rnatib :). Endi harakat qilaman komentariya bilan yozishga.

Bunga o'xshash en.wikipedia.org/wiki/Comparison_of_documentation_generators shu yerdan qolganlarini ham ko'rishingiz mukin.

Qisqacha qilib yozganda shu. Bu mening yozganlarim hech qayerda shunaqa bo'lishi kerak deb yozilmagan. Bunga o'xshash har xil talablarni o'zingiz guruhingizda ishlaydigan dasturchilar bilan kelishib olish kerak. Man ko'rsatganlarim bu mening shaxsiy fikrlarim. Agar yana kimdadir qo'shimchalar bo'lsa komentariya yozish cheklanmagan.

Manba:


Texnoman Jamoasi - Texnoman foydalanuvchisi

Muallif haqida

Texnoman Jamoasi Internetni rivojlantiramiz!


Blogdagi so‘nggi maqolalar:


Birinchi bo‘ling!

Iltimos, fikr bildirish uchun saytga kiring yoki ro‘yxatdan o‘ting!