Ералиева Б.Ш.
Таразский Государственный Университет им. М.Х. Дулати
г.Тараз, Казахстан
САНДЫҚ ШАМАЛАРМЕН ЖҰМЫС ІСТЕУ БАРЫСЫНДА АЙҚЫН ЖӘНЕ
АВТОМАТТЫ ТҮРЛЕНДІРУ ТИПТЕРІ
Компьютер
аппараттық деңгейде бүтін санды математикалық
есептеулерді тек қана 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