Ералиева Б.Ш.

Таразский Государственный Университет им. М.Х. Дулати

г.Тараз, Казахстан

 

САНДЫҚ ШАМАЛАРМЕН ЖҰМЫС ІСТЕУ БАРЫСЫНДА АЙҚЫН ЖӘНЕ АВТОМАТТЫ ТҮРЛЕНДІРУ ТИПТЕРІ

 

Компьютер аппараттық деңгейде бүтін санды математикалық есептеулерді тек қана int немесе long шамаларымен ғана жүзеге асыра алады. Бұл кезде негізгі математикалық операциялардағы ( + , - , * , / , % ) операндылар біртипті болуы қажет. Сондықтан да, операндылар әртүрлі типті немесе byte, short не char типті болған кезде, типтердің автоматты түрлену  ережесі іске қосылады: byte, short немесе char типтерінің шамалары үшін алдымен int типіне түрлендірілу жүреді, содан кейін ғана олардың операнды ретіндегі ауыстырулары жүзеге асады. Егер операндылардың біреуі long типті болса, онда іс-әрекет long типті сандармен жасалады, себебі, екінші операнды да автоматты түрде осы типке ауыстырылады. Осыған сәйкес Java-да аппараттық деңгейде заттық шамалармен жұмыс істеу барысында float және double типті операндыларын ғана қолдануға болады. Егер операндылардың біреуі double типіне ие болса, ал екіншісінің типі float болса, онда іс-әрекет double типті сандармен жүзеге асырылады, себебі, float типті операнд автоматты түрде double типіне түрленеді. Егер операндылардың біреуі бүтін санды, екіншісі заттық болса, онда ең алдымен бүтін санды операндының тура сондай заттық типке түрленуі жүреді, содан кейін оператор орындалады.

Енді типтердің меншіктелуінің сәйкестілігінің ережелерін қарастырайық. Олар өте қарапайым: типтің сол жақ диапазонының мәні типтің оң жақ диапазонымен салыстырғанда қысқа болуы керек. Сондықтан да, типтің оң жақ бөлігі сол жақ бөлігіне сыймайтындай меншіктеу кезінде типтің айқын түрлендіруіне көрсету керек болады.  Олай жасамаса, компилятор адекватты диагностикалық “possible loss of precision” (“нақтылықты жоғалту мүмкіндігі”) қате туралы хабарлама шығарады.

Мысалы, заттық типтер үшін меншіктеу тек қана сол жағындағы заттық айнымалы оң жағындағы бүтін санды немесе заттық айнымалымен салыстырғанда ұзындау болған жағдайда жүзеге асады. Мысалы, double типті айнымалыны float типті мәнге меншіктеуге болады, бірақ керісінше емес. Бірақ типтердің түрлендірулерін келесі меншіктеулерді жүргізу үшін қолдануға болады. Мысалы:

double d=1.5;

float f=(float)d;

Басқа мысалдардан мүмкін болатын:

byte byte0=1; //-128..127

short short0=1;//- 32768.. 32767

char char0=1;//0.. 65535

int int0=1; //- 2.147483648E9.. 2.147483647E9

long long0=1;//-9.223E18.. 9.223E18

float float0=1;// ұ(1.4E-45..3.402E38)

double double0=1;// ұ(4.9E-324..1.797E308 )

short0=byte0;

byte0=(byte)short0;

char0=(char)short0;

int0=short0;

int0=char0;

char0=(char)int0;

short0=(short)int0;

long0=byte0;

byte0=(byte)long0;

long0=char0;

long0=int0;

int0=(int)long0;

float0=byte0;

float0=int0;

float0=(float)double0;

double0=float0;

 

Өрнектерді есептеу кезінде операторлардың басымдылықтары өте маңызды рөл атқарады. Қосу, алу, бөлу және көбейту операторлары үшін ол «табиғи»: көбейту мен бөлудің басымдылықтары бірдей жоғары болып келеді, ал алу мен қосуда басымдылық деңгейлері бірдей - төмен. Сайып келгенде, мысалы  a*b/c+d

бұл дегеніміз келесі түрде бола алады:

( (a*b)/c )+d

Дөңгелек жақшалар өрнек элементтерін топтастыруға мүмкіндік береді. Осы кезде жақша ішіндегі өрнектер жалпы өрнектің басқа бөліктері есептелмей тұрып орындалады. Яғни, жақшалардың басымдылығы басқа операторлармен салыстырмалы түрде алғанда жоғары. Сондықтан да (a+b)*c былайша есептелінеді: алдымен a+b қосындысы шығарылады, содан кейін ғана с мәніне көбейтіледі. Жоғарыда айтылғандардан басқа Java тілінде әртүрлі операторлардың басымдылықтарын анықтайтын басқа да көптеген ережелер бар. Оларды оқу, білу мақсатсыз, сонымен қатар, өте зиянды: бағдарламаны жазу кезінде барлық орындалатын іс-әректтер тізбегі айқын болу керек және бағдарлама мәтінін түсіну барысында еш қиындық тудырмауы, сонымен қатар, ешқандай да логикалық қателерге әкеліп соқтырмауы қажет. Сондықтан да жақшаларды белгілі бір іс-әрекеттер тізбектілігін көрсетіп тұратын, бірақ теоретикалық көзқарас бойынша қажет емес жағдайларда да қою қажет. Көрсете кететін жағдай, осындай іс-әрекеттер арифметикалық толып кетуге байланысты көптеген күрделі мәселелерді шешуге мүмкіндік береді. Төменде анықтамалық мақсатта операторлар басымдылығының кестесі көрсетілген. Оны дұрыс жазылмаған бағдарламаларда, бағдарламалар операторлардың тізбектілігі түсініксіз болған жағдайда қолдануға болады.

Java тілінің синтаксисіне байланысты көптеген құрылымдарда тек қана бір оператор тұруы мүмкін, бірақ бірнеше операторлардан тұратын тізбекті қолдану қажеттілігі жиі кездеседі.

Құрама оператор — фигуралы жақшалар {} арасындағы код блогы: Мәтінді фигуралы жақшаларда пайдалана отырып қалыптастырудың жалпыға белгілі екі тәсілі бар. Олардың біріншісінде жақшалар бірінің астына бірі жазылады, ал олардың арасында тұрған мәтін оң жаққа қарай 1-2 символға жылжиды (кей кездерде одан да көп). Мысал:

оператор

{

Жай немесе құрама операторлар тізбегі

}

Көбірек таралған екіншісінде ашатын жақшаны келесі жолға түсірмей құраушы оператор басталатын жолда жазады. Ал жабатын жақшаны ең бірінші сөздің астынан жазады. Мысал:

оператор{

Жай немесе құрама операторлар тізбегі

}

NetBeans ортасында бастапқы форма бойынша осындай тәсіл орнатылған және сол осы жазбада айтылып жатқан бағдарламалық код бөліктерінде қолданылады. Бірақ негізінен алғанда бағдарламалық кодты формаға келтірудің бірінші кодын пайдаланған дұрыс, себебі ол басқалармен салыстырғанда тез оқылады. Мұндай формаға келтіру әдісін бастапқы формаға орнату үшін Tools/Options менюіне бару керек, одан кейін Editor/Indentation таңдап, пайда болған диалогтық формада Add New Line Before Brace бөлімін белгілеу керек. Java, сонымен қатар /C++ тілдерінің ережесі бойынша фигуралы жақшадан кейін ереже бойынша “;” символын қойып қажет емес. Бірақ кейде фигуралы жақшалардан кейін программаға қоюға болатын жерлеріне еш қызмет атқармайтын “;” бос операторын қолдануға болады.

 

Әдебиет тізмі

1. Васильев А.Н.  Java. Объектно-ориентированное программирование СПб.: Питер, 2011

2. Хорстманн,  Кей  С.,  Корнелл  Гари.  Java  2.  Библиотека профессионала.  Том  2.  Тонкости программирования.  М.: Издательский дом «Вильямс», 2007