Code-Complete-9780735619678

Сонлар умуман олганда (Code Complete китобидан таржима 12.1 бўлим)

Code-Complete-9780735619678

 

 

Ушбу мақолада дастурлашда сонлар билан ишлаш хақида, хамда “сехрли сонлар” хақида тушунча берилган. Мақола, Стив Макконнеллнинг Code Complete китобининг иккинчи нашри китобининг, 12.1 чи бўлимининг таржимаси хисобланади. Шу китобни бошидан охиригача ўқиб чиқишни қаттиқ тавсия этаман.

Қуйида сонлардан фойдаланишда келиб чиқиши мумкин бўлган хатолар сонини камайтириш имконини берувчи бир нечта маслахатлар берилган.
“Сехрли сонлар”дан четда бўлинг. Сехрли сонлар – бу 100 ёки 47524 каби оддий сонлар аммо улар дастурда сабабсиз пайдо бўлади. Агарда сиз номланган константаларни ишлата оладиган мухитда дастурласангиз, сехрли сонлар ўрнига улардан фойдаланинг. Агарда номланган константаларни ишлата олмасангиз, иложи бўлганида глобал ўзгарувчиларни ишлатинг.

Сехрли сонлардан халос бўлиш бизга 3та афзалликни тақдим этади.

  • Ўзгартиришларни ишончлироқ бажариш мумкин. Агарда сиз номланган константалардан фойдалансангиз, 100 сонини хар ердан қидириб ўтиришга хожат қолмайди, хамда сиз бехосдан бошқа нарса учун ишлатиладиган бошқа сонни хам ўзгартириб қўймайсиз.
  • Ўзгартиришларни киритиш осонроқ бўлади. Максимал элементлар сони 100 дан 200 га ўзгарган вақтда, сехрли сонлардан фойдаланган бўлсангиз, сиз кодни хар жойидан 100 сонини қидириб топиб уни 200 га алмаштиришингиз керак бўлади. Агарда сиз 100+1 ёки 100-1 ларни ишлатган бўлсангиз у холатда 101 ва 99 ларни 201 ва 199 ларга ўзгартиришингиз хам керак бўлади. Номланган константалардан фойдаланганда эса сиз фақатгина битта жойда константани қийматини 100 дан 200 га ўзгартирасиз.
  • Дастур яхшироқ ўқилади. Албатта:
1.for i = 0 to 99 do ...


кодига қараганда 99 бу элементларни максимал қийматини ифодалашини тахмини қилиш мумкин. Аммо:

1.for i = 0 to MAX_ENTRIES-1 do ...


кодига қараганда эса бунга аниқ ишонч хосил бўлади. Хатто сиз сон хеч қачон ўзгартмаслигига ишонсангиз хам, номланган константалардан фойдаланилганда, дастурингиз яхшироқ ўқиладиган бўлади.

Лозим бўлган жойларда аниқ белгиланган ноль ва бирлардан фойдаланинг 0 ва 1 қийматлари инкремент, декремент хамда цикллар бошланишида массивларни биринчи элементини рақамлашда ишлатилади. Қуйидаги кодларда 0 ва 1 дан фойдаланиш жуда хам мумкин:

1.for i = 0 to CONSTANT do ...

1.total = total + 1


Мана сизга яхши бир маслахат/қоида: дастурда константа сифатида фақат 0 ва 1 нигина ишлатинг, бошқа хар қандай сонларни эса тушунарли номлар билан аниқлаб константа кўринишида ишлатинг.

Нольга бўлиш хатоликлари Хар сафар бўлув “символ”идан фойдаланганингизда (кўп тилларда бу /), махраж сифатида 0 бўлиши хам мумкинлиги хақида ўйланг. Агарда шундай холат вужудга келиш эхтимоли бор бўлса, 0 га бўлиш холатидаги хатолик келиб чиқишини огохлантирувчи код ёзинг.

Турларни келтиришни тушунарли амалга оширинг
 Дастурингизни кимдур ўқиган вақтида дастурда учрайдиган маълумот турларини келтиришларингизни тушуниб етишига ишонч хосил қилинг. C++ да қуйидагича ёзишингиз мумкин:

1.y = x + (float) i


Microsoft Visual Basic да эса:

1.y = x + CSng( i )


Бу тажриба сизга келтиришларингизни бир хил маъноли бщлишини таъминлайди – хар хил компиляторлар хар хил “конвертация” қилади, бундай ёндашувда эса кутган натижангизни олишингиз кафолатланади.

Хар хил турларни солиштирувидан четланинг Агарда x – каср сон, i – бутун сон бўлса,

1.if ( i = x ) then ...

текшируви ишламаслиги деярли кафолатланади. Келтиришни кодини компилятор иккита бир хил турдаги сонни солиштира олиши учун ўзингиз ёзиб қўйинг.

Компиляторингизни огохлантиришларига эътибор беринг Кўпгина замонавий компиляторлар бир қатордаги хар хит турдаги сонлар хақида хабар беради. Бунга эътибор беринг! Эртами кечми хар қандай дастурчи жонга теккан хатони топишда у бу кимдан ёрдам сўрайди, ва натижада компилятор хар доим бу хатолик хақида хабар бериб турганлиги аён бўлади. Юқори даражали мутахассислар ўз дастурларини шундай ёзадиларки унда компиляторни бирорта хам огохлантириши бўлмайди. Ишни ўзингиз бажаргандан кўра уни бажарилишини компиляторга тақдим этиш осон.

Фарход Дадажонов таржимаси.

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

O'xshash maqolalar: