Листинг 1 Бир ўлчовли массивлар билан ишлаш
Ўзгартиришлар
Қийматлар типини стандарт арифметик ўзгартириш
Ифодаларни арифметик ҳисоблаш жараёнида ҳисоблаш натижасидан келиб чиққан қиймат типини ўзгартиришга тўғри келиб қолиши мумкин. Агар операндларнинг ҳар иккиси бир хил типга тегишли бўлса ва бажарилувчи арифметик амал шу тип учун аниқланган бўлса у ҳолда натижа ҳам айнан шу типли қиймат бўлади. Тип учун арифметик амал аниқланган деб, шу тип учун ёзилган амални бажаришга рухсат этилишига айтилади.
Агар операндлар ҳар хил типли бўлса ва бу типлар учун арифметик амал аниқланмаган бўлса, ҳисоблашдан аввал кичикроқ типни унинг қийматини ва аниқлигини сақлаган холда каттароқ типга автоматик ўзгартириш бажарилади. Бундай ўзгартиришни автоматик ёки ошкор бўлмаган ўзгартириш дейилади.
Автоматик ўзгартириш қачонки қийматни йўқотишга олиб келмайдиган ҳолат бўлса шундагина амалга ошади. Акс холда ошкор ўзгартиришни амалга оширишга тўғри келади. Ошкор ўзгартириш дастурчи томонидан (тип)х амалини бажариш орқали амалга оширилади. Масалан: (int)a; Бунда қийматни аниқлилиги дастурчининг қандай тип танлашига боғлиқ бўлади.
Арифметик амаллар int типидан кичик бўлган типлар учун аниқланмаган. Бу шуни билдирадики агар ифодада sbyte, byte, short ва ushort каби типли катталиклар иштирок этган бўлса, амални бажаришдан олдин улар int типига автоматик ўзгартириб олинади, сўнгра амал бажарилади.
4.3.1 расмда автоматик ўзгартиришни амалга ошишини кетма-кетлиги келтирилган. Унга кўра ифодада операндларнинг бири иккинчисига нисбатан кичикроқ типга тегишли бўлса, ҳисоблаш жараёни давомида кичикроқ тип каттароғига автоматик ўзгартириб олинади. Ушбу ўзгартириш операндга таъсир этмайди. Агар тип чегарадан ўтиб кетса ёки расмдаги тартибга тўғри келмаса компильяция жараёнида хатолик юзага келади.
Ифодаларни ҳисоблаш жараёнида турли хил хатоликлар юзага келиши мумкин, масалан: 0 га бўлиш, хотиранинг тўлиб кетиш ва ш.к.лар. Бундай холларда барча юқори босқичли алгоритмик тилларда бўлгани каби C# да ҳам хатоликларни қайта ишлаш механизми мавжуд бўлиб, ушбу механизмдан фойдаланиб дастурнинг авария холати билан якунланишининг олди олинади. Бу механизм фавқулод(истисно)ли холатларни қайта ишлаш механизми деб юритилади.
4.3.1.-расм Типларни ошкор бўлмаган арифметик ўзгартириш кетма-кетлиги
Ҳисоблаш жараёнида хатолик юзага келса, механизм бу хатоликка мос келувчи махсус қиймат генерация қилади. Ҳар бир типнинг унга мос келувчи ўзининг фавқулод кодлари мавжуд. Бу кодлар С# да, хатоликларнинг умумий аждод синфи Exception синфи орқали тақдим этилади. Масалан, 0 га бўлишда DivideByZeroException хатолик коди, хотира етишмаслигида эса OutOfMemoryException хатолик коди қайтарилади. Дастурчи ушбу кодларни истисноли холатларни қайта ишлаш блоки try..catch конструкцияси орқали “тутиб” олади ва қайта ишлайди. Истисноли холатларни қайта ишлаш механизми тўғрисида кейинроқ батафсил тўхталиб ўтамиз.
Do'stlaringiz bilan baham: |