Муқаддима
Тавре ки мо медонем, Java забони барномасозии ба an object нигаронидашуда мебошад. Яъне мафхуми асосй, зеро гуфтани асоси асосхо он аст, ки хама чиз an object аст. Объектҳо бо истифода аз синфҳо тавсиф карда мешаванд.
Дар навбати худ синфхо холат ва рафтор доранд. Масалан, суратҳисоби бонкӣ метавонад дар шакли маблағи пул дар суратҳисоб ҳолат дошта бошад ва рафтори зиёд ва кам кардани бақия дошта бошад. Рафтор дар Java бо истифода аз усулҳо амалӣ карда мешавад. Тарзи тавсифи усулҳо дар оғози сафари омӯзиши Java ҷорӣ карда мешавад. Масалан, дар дастури расмии Oracle: “
Муайян кардани усулҳо ”. Дар ин ҷо ду ҷанбаи муҳим вуҷуд дорад:
- Ҳар як усул имзо дорад. Имзо аз номи усул ва параметрҳои вуруди он иборат аст;
- Усулҳо бояд намуди бозгаштро муайян кунанд;
- Навъи бозгашт қисми имзои метод нест.
Боз ҳам, ин натиҷаи он аст, ки Java забони сахт чопшуда аст ва компилятор мехоҳад пешакӣ бифаҳмад, ки кадом намудҳо дар куҷо истифода мешаванд. Боз, то ки моро аз хатогиҳо эмин нигоҳ дорад. Умуман, ҳама чиз ба манфиат аст. Хуб, ин бори дигар ба мо фарҳанги коркарди маълумотро меомӯзад, ба назарам. Ҳамин тавр, барои усулҳо навъи арзиш муайян карда мешавад. Ва барои баргардонидани ҳамин арзиш аз усулҳо калимаи калидӣ истифода мешавад
return
.
Изҳороти баргардонидани калимаи калидӣ дар Java
Калимаи калидии изҳорот
return
ба "баёноти ҷараёни назорат" ишора мекунад, ки дар дарси oracle "
Изҳороти ҷараёни назорат " баррасӣ шудааст. Шумо инчунин метавонед дар бораи чӣ гуна баргардонидани арзишҳо дар дастури расмӣ хонед: "
Баргардонидани арзиш аз усул ". Компилятор ба қадри имкон бодиққат назорат мекунад, ки арзиши аз метод баргардонидашуда ба навъи арзиши баргардонидани метод мувофиқат мекунад.
Биёед IDE-ро аз tutorialspoint ҳамчун мисол истифода барем. Биёед ба мисоли аслӣ назар кунем:
public class HelloWorld {
public static void main(String []args) {
System.out.println("Hello World");
}
}
Тавре ки мо мебинем, дар ин ҷо методе иҷро мешавад
main
, ки нуқтаи вуруд ба барнома мебошад. Сатрҳои code аз боло ба поён иҷро карда мешаванд. Усули мо
main
арзишҳоро баргардонида наметавонад, вагарна мо хатогиро мегирем: "
Error: Main method must return a value of type void
". Аз ин рӯ, усул танҳо ба экран мебарояд. Биёед ҳоло қабули сатрро ба усули алоҳидаи қабули паём гузаронем:
public class HelloWorld {
public static void main(String []args) {
System.out.println(getHelloMessage());
}
public static String getHelloMessage() {
return "Hello World";
}
}
Тавре ки мо мебинем, бо истифода аз калимаи калидӣ
return
мо арзиши бозгаштро муайян кардем, ки онро баъдтар дар метод истифода кардем
println
. Дар тавсифи (таърифи) усул,
getHelloMessage
мо нишон додем, ки он ба мо бармегардад
String
. Ин ба компилятор имкон медиҳад, ки тафтиш кунад, ки амалҳои метод бо тарзи эълоншуда мувофиқанд. Табиист, ки навъи арзиши баргардонидани дар таърифи усул нишондодашуда метавонад аз намуди арзиши аз code баргардонидашуда васеътар бошад, яъне. Муҳим он аст, ки намудҳо ба ҳамдигар кам карда мешаванд. Дар акси ҳол, мо хатои вақти ҷамъоварӣ мегирем: "
error: incompatible types
". Дар омади гап, шояд дарҳол савол пайдо шавад: Чаро
return
он ба операторҳои идоракунии ҷараёни барномаҳо дахл дорад? Аммо азбаски он метавонад ҷараёни муқаррарии барномаро аз боло ба поён халалдор кунад. Барои намуна:
public class HelloWorld {
public static void main(String []args){
if (args.length == 0) {
return;
}
for (String arg : args) {
System.out.println(arg);
}
}
}
Тавре ки аз мисол дида мешавад, мо иҷрои методро қатъ мекунем,
main
агар барномаи java-и мо бе параметр даъват карда шавад. Дар хотир доштан муҳим аст, ки агар шумо
return
code дошта бошед, он дастнорас мегардад. Ва компилятори интеллектуалии мо инро пай мебарад ва ба шумо имкон намедиҳад, ки чунин барномаро иҷро кунед. Масалан, ин code тартиб дода намешавад:
public static void main(String []args) {
System.out.println("1");
return;
System.out.println("2");
}
Барои бартараф кардани ин як хаки ифлос вуҷуд дорад. Масалан, бо мақсади ислоҳ кардан ё бо ягон сабаби дигар. Рамзи дар боло зикршударо тавассути печонидани он
return
дар
if
блок ислоҳ кардан мумкин аст:
if (2==2) {
return;
}
Баргардонидани изҳорот дар коркарди хато
Як ҳолати хеле душвор вуҷуд дорад - мо метавонем онро
return
дар якҷоягӣ бо коркарди хатогиҳо истифода барем. Ман фавран гуфтан мехоҳам, ки истифодаи он
return
дар
catch
блок шакли хеле бад аст, бинобар ин шумо бояд аз он канорагирӣ кунед. Аммо ба мо намуна лозим аст, дуруст? Ана вай:
public class HelloWorld {
public static void main(String []args) {
System.out.println("Value is: " + getIntValue());
}
public static int getIntValue() {
int value = 1;
try {
System.out.println("Something terrible happens");
throw new Exception();
} catch (Exception e) {
System.out.println("Catched value: " + value);
return value;
} finally {
value++;
System.out.println("New value: " + value);
}
}
}
Дар назари аввал, чунин менамояд, ки 2 бояд баргардонида шавад, зеро
finally
он ҳамеша иҷро карда мешавад. Аммо не, арзиш 1 хоҳад буд ва тағирот ба тағирёбанда
finally
сарфи назар карда мешавад. Гузашта аз ин, агар он
value
дорои an object бошад ва мо
finally
гуфтем
value = null
, он
catch
ба ҳар ҳол истинод ба an objectро бармегардонад, на
null
. Аммо аз блок
finally
оператор
return
дуруст кор мекард. Ҳамкорон барои чунин тӯҳфа ба шумо бешубҳа ташаккур намегӯянд.
void.class
Ва ниҳоят. Шумо метавонед як сохтори аҷибе мисли
void.class
. Чунин ба назар мерасад, ки чаро ва чӣ маъно дорад? Дар асл, дар чаҳорчӯбаҳои гуногун ва ҳолатҳои душворе, ки
Java Reflection API истифода мешавад , ин метавонад хеле зарур бошад. Масалан, шумо метавонед тафтиш кунед, ки кадом намуди усул бармегардад:
import java.lang.reflect.Method;
public class HelloWorld {
public void getVoidValue() {
}
public static void main(String[] args) {
for (Method method : HelloWorld.class.getDeclaredMethods()) {
System.out.println(method.getReturnType() == void.class);
}
}
}
Ин метавонад дар чаҳорчӯбаҳои санҷишӣ муфид бошад, ки иваз кардани рамзи воқеии усулҳо зарур аст. Аммо барои ин кор, шумо бояд фаҳмед, ки ин усул чӣ гуна рафтор мекунад (яъне, кадом намудҳоро бармегардонад). Роҳи дуюми татбиқи усул
main
аз рамзи дар боло овардашуда мавҷуд аст:
public static void main (String[] args) {
for (Method method : HelloWorld.class.getDeclaredMethods()) {
System.out.println(method.getReturnType() == Void.TYPE);
}
}
Муҳокимаи хеле ҷолиб дар бораи фарқияти байни онҳоро дар stackoverflow хондан мумкин аст:
Фарқи байни java.lang.Void ва void чист? #Вячеслав
GO TO FULL VERSION