JavaRush /Блоги Java /Random-TG /Изҳороти баргардонидан дар Java
Viacheslav
Сатҳи

Изҳороти баргардонидан дар Java

Дар гурӯҳ нашр шудааст

Муқаддима

Тавре ки мо медонем, Java забони барномасозии ба an object нигаронидашуда мебошад. Яъне мафхуми асосй, зеро гуфтани асоси асосхо он аст, ки хама чиз an object аст. Объектҳо бо истифода аз синфҳо тавсиф карда мешаванд. Изҳороти баргардонидан дар Java - 1Дар навбати худ синфхо холат ва рафтор доранд. Масалан, суратҳисоби бонкӣ метавонад дар шакли маблағи пул дар суратҳисоб ҳолат дошта бошад ва рафтори зиёд ва кам кардани бақия дошта бошад. Рафтор дар 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-и мо бе параметр даъват карда шавад. Дар хотир доштан муҳим аст, ки агар шумо returncode дошта бошед, он дастнорас мегардад. Ва компилятори интеллектуалии мо инро пай мебарад ва ба шумо имкон намедиҳад, ки чунин барномаро иҷро кунед. Масалан, ин 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 чист? #Вячеслав
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION