Code-Complete-9780735619678

O‘zgaruvchilarni sifatli e’lon qilish (Code Complete kitobidan tarjima 10.2 bo‘lim)

Ushbu maqolada o‘zgaruvchilarni to‘g‘ri e’lon qilishga va ularni qiymatini to‘g‘ri belgilash haqida umumiy tushuncha berilgan. Maqola, Stiv Makkonnellning Code Complete kitobining ikkinchi nashridan 10.2 chi bo‘limi tarjimasi hisoblanadi. Hammangizga shu kitobni o‘qib chiqishni tavsiya etaman.

Ma’lumotlarni noto‘g‘ri “initsializatsiya” (qiymat belgilash) bo‘lishi – dasturlashda eng ko‘p xatolar kelib chiqadigan holatlardan biri hisoblanadi. Noto‘g‘ri “initsializatsiya” deganda, o‘zgaruvchini boshlang‘ich qiymati, siz o‘ylagandan boshqa bo‘ladi. Bu narsa quyidagi sabablarga ko‘ra kelib chiqishi mumkin.

  1.     O‘zgaruvchiga qiymat belgilanmagan.
  2.    O‘zgaruvchini qiymati eskirib qolgan. Qachonlardur o‘zgaruvchiga qiymat belgilangan edi, ammo hozir u o‘z muhimligini yo‘qotdi.
  3.     O‘zgaruvchini ba’zi qismlariga qiymat belgilandi, ba’zilariga yo‘q.

 

Oxirgi xolat bir necha xil ko‘rinishda bo‘lishi mumkin. Siz obyektni bir nechta a’zolarini “initsializatsiya” qilgan bo‘lishingiz mumkin, hammasini emas. Siz initsializatsiya qilinmagan  ko‘rsatgich yo‘naltirilgan o‘zgaruvchiga qo‘shimcha xotira ajratishni va “initsializatsiya” qilishni esingizdan chiqargan bo‘lishingiz mumkin. Bu holatda siz xotiradagi tasodifiy bo‘limga qandaydur ma’lumot kiritib qo‘yishingiz mumkin. Bu bo‘lim boshqa ma’lumotlar saqlanuvchi joy xam yoki kod saqlanuvchi joy ham bo‘lishi mumkin. Yoki bu bo‘limda OT (Operatsion Tizim) ga tegishli ma’lumotlar xam bo‘lishi mumkin. Ko‘rsatgichlarga taalluqli bo‘lgan muammo umuman kutilmagan vaqtda har safar har xil holatda kelib chiqishi mumkin. Shuning uchun bunday xatolarni topish boshqalaridan ko‘ra qiyinroq bo‘ladi. Quyida initsializatsiyaga bog‘liq bo‘lgan muammolarni bartaraf etish yo‘llari keltirilgan.

Har bir o‘zgaruvchini qiymatini uni e’lon qilish vaqtida belgilang.

 

O‘zgaruvchilarni qiymatini uni e’lon qilinishi bilan belgilash – “initsializatsiya” xatolaridan saqlovchi oson uslub hisoblanadi. Quyidagi kod, talabaBaholari massivining “initsializatsiya”si har safar u joylashgan metodni chaqirilish vaqtidada amalga oshirilishini kafolatlaydi:

float talabaBaholari[ MAX_TALABALAR ] = { 0.0 };

Har bir o‘zgaruvchini qiymatini uni birinchi marta ishlatilish joyida belgilang.

 

Visual Basic (avvalgi versiyasi) va ba’zi dasturlash tillarida o‘zgaruvchilarni uni e’lon qilinish vaqtida belgilash imkoni yo‘q. Natijada kod xunuk shaklga kelishi mumkin. Ya’ni, avval bir nechta o‘zgaruvchilarni e’lon qilinishi, undan keyin esa bu o‘zgaruvchilarga qiymati belgilanishi. Unisi ham, bunisi ham o‘zgaruvchilarni birinchi marta ishlatilgan joyidan ancha yiroqda bo‘lishi mumkin.

O‘zgaruvchilarni xunuk “initsializatsiya” bo‘lshiga misol (Visual Basic):

01.' barcha o‘zgaruvchilarni e’lon qilinishi
02.Dim tartibRaqam As Integer
03.Dim jami As Double
04.Dim tamom As Boolean
05. 
06.' barcha o‘zgaruvchilarga qiymat belgilanishi
07.tartibRaqam = 0
08.jami = 0.0
09.tamom = False
10....
11. 
12.' tartibRaqam  o‘zgaruvchisini ishlatilishi
13....
14. 
15.' jami o‘zgaruvchisini ishlatilishi
16. 
17....
18.' tamom o‘zgaruvchisini ishlatilishi
19.While Not tamom
20....

 

Bundan ko‘ra har bir o‘zgaruvchini qiymatini, uni birinchi marta ishlatilish joyiga yaqinroq joyda belgilash yaxshiroq bo‘ladi:
O‘zgaruvchilarga qiymat belgilashga yaxshi misol (Visual Basic):

01.Dim tartibRaqam As Integer
02.tartibRaqam = 0
03.' tartibRaqam o‘zgaruvchisini ishlatilishi
04....
05. 
06.Dim jami As Double
07.total = 0.0
08.' total o‘zgaruvchisini ishlatilishi (jami o‘zgaruvchisini e’lon qilinishi va uni qiymatini belgilanishi uni ishlatilishidan shundaygina yuqorisida amalga oshirilmoqda)
09.Dim tamom As Boolean
10.done = False
11.' tamom o‘zgaruvchisini ishlatilishi
12.While Not done
13....

 

Yuqoridagi ikkinchi holat birinchi holatdan bir nechta sabablarga ko‘ra afzal. Birinchi holatda dasturni bajarilishi to tamom o‘zgaruvchisini ishlatilishigacha borgunicha, tamom o‘zgraruvchisini qiymati ham o‘zgarib qolgan bo‘lishi mumkin. Xatto dasturni yozilish vaqtida shunday bo‘lmasa ham, dasturga bir qancha o‘zgartirishlar kiritilganidan so‘ng ham bu narsa o‘zgarmay qolishiga hech qanday kafolat yo‘q. Bundan tashqari, birinchi misolda barcha o‘zgaruvchilarni qiymati bir joyda belgilanmoqda, va shundan xuddi ular barchasi butun metod davomida ishlatiladi degan xulosa kelib chiqadi.

 

Haqiqatda esa, tamom o‘zgaruvchisi faqatgina metodni eng oxirida ishlatiladi. Va nihoyat, dasturni o‘zgartirishlari natijasida (ularni bo‘lmasligini ilojisi ham yo‘q) tamom o‘zgaruvchisini ishlatuvchi kod, siklga kirib qolishi mumkin va bunda o‘zgaruvchini qiymatini har safar qaytadan belgilash kerak bo‘ladi. Ikkinchi misolda esa dasturga bir ozgina o‘zgartirish kiritiladi xolos. Birinchi misol “initsializatsiya” xatolaridan kamroq himoyalangan. Ushbu ikki misollar Yaqinlik nuqtai nazarini yaqqol namoyon etmoqda: bir biri bilan bog‘liq bo‘lgan ma’lumotlarni guruxlashtirishga harakat qiling. Bu “prinsip” kodni sharhini kodga yaqinligi, siklni sozlovchi kodni siklni o‘ziga yaqinligini va shu kabi narsalarni ifoadalaydi.

“Ideal” xolatda har bir o‘zgaruvchini uni ishlatilish joyidan bevosita yuqorisida e’lon qiling va qiymatini belgilang.

O‘zgaruchini e’lon qilishda siz uni turini ko‘rsatasiz. Qiymat belgilash vaqtida siz unga biron bir qiymatni belgilaysiz. Agarda siz ishlatayotgan dasturlash muhiti bunga yo‘l qo‘ysa (masalan, C++ va Java), o‘zgaruvchini uni aynan ishlatilish joyidan yuqorisida e’lon qilib darxol qiymatini belgilash lozim. “Ideal” holatda har bir o‘zgaruvchini qiymatini uni e’lon qilinish vaqtida belgilash lozim:
O‘zgaruvchini qiymatini belgilashga yaxshi misol (Java) :

1.int tartibRaqam = 0;
2.// tartibRaqam o‘zgaruvchisini ishlatilishi
3....
4.boolean tamom = false;
5.// tamom o‘zgaruvchisini ishlatilishi
6.while (!done) {
7....

O‘zgaruvchilarni iloji boricha final yoki const sifatida e’lon qiling. O‘zgaruvchilarni Java dagi final yoki C++ dagi const sifatida e’lon qilib, siz uni qiymatini belgilanganidan so‘ng o‘zgarishini oldini olasiz. final va const kalit so‘zlari klass konstantlalarini, faqatgina kiruvchi parametrlar sifatida ishlatiluvchi o‘zgaruvchilarni hamda qiymati o‘zgramas qoluvchi har qanday lokal o‘zgaruvchilarni e’lon qilishda qo‘l keladi.

Hisobchi (schetchik) va akkumulyatorlarga alohida e’tibor qarating.

i, j, k, sum, total kabi o‘zgaruvchilar ko‘p holatlarda “schetchik” yoki akkumulyator sifatida ishlatiladi. Ba’zi holatlarda dasturchilar schetchikni qiymatini yana bir bor ishlatishdan boshlang‘ich qiymatga keltirishni unutib qo‘yishadi.

 

Klassdagi o‘zgaruvchilarni qiymatlarini uni konstruktorida belgilang.

Xuddi metodni o‘zgaruvchilarini qiymatini, metodni chaqirishda belgilanganidek, klassdagi ma’lumotlarni qiymatini ham uni konstruktorida belgilash lozim. Agarda konsturktorda xotira ajratilsa, destruktorda uni bo‘shatish lozim.

 

Qo‘shimcha qiymat belgilashni shartligini tekshiring.

O‘zingizga, o‘zgaruvchini qiymatini qayta belgilash kerak bo‘ladimi yo‘qmi degan savolni bering: masalan, undan siklda foydalanish yoki metodlarni chaqirish orasida qiymatini o‘zgartirish uchun. Agarda javob ha bo‘lsa, o‘zgaruvchini qiymatini belgilovchi buyruq kodda borligiga amin bo‘ling.

Konstantalarni qiymatini bir marta belgilang; o‘zgaruvchilarni qiymatini kodda belgilang.

Agarda o‘zgaruvchilardan konstantalar sifatida foydalansangiz, ularni qiymatini dasturni ishga tushish vaqtida belgilash mumkin. Misol uchun ularni qiymatini Startup() metodida belgilang. Haqiqiy o‘zgaruvchilarni qiymatini kodni o‘zida, ularni ishlatilish joyiga iloji boricha yaqinroqda belgilang.

Kompilyatorni shunday sozlab qo‘yingki, u o‘zgaruvchilarni qiymatini avtomatik tarzda belgilasin.

 

Kompilyatorni ogohlantirishlariga diqqatli bo‘ling.

Ko‘pgina kompilyatorlar qiymati belgilanmagan o‘zgaruvchilarni ishlatilayotganligi haqida ma’lumot beradi.

Kiruvchi parametrlarni to‘g‘lirigini tekshiring.

Bu narsa “initsializatsiya” xatolarini oldini olishni yana bir samarali yo‘li. Kiruvuchi parametrni qiymatini darxol ishlatishdan avval, uni to‘g‘riligini, ishlatishga yaroqli ekanligini tekshiring.

 

E’tiboringiz uchun raxmat.

(973 marta o'qilgan, bugun 1 marta o'qildi)

O'xshash maqolalar: