JavaRush /Java Blog /Random-TK /Java-da yzyna gaýtarma
Viacheslav
Dereje

Java-da yzyna gaýtarma

Toparda çap edildi

Giriş

Bilşimiz ýaly, Java obýekte gönükdirilen programmirleme dilidir. .Agny, esasy düşünje, sebäbi esaslaryň esasyny aýtmak hemme zadyň bir zatdygydyr. Obýektler sapaklaryň kömegi bilen beýan edilýär. Java-da yzyna gaýtarma - 1Sapaklar, öz gezeginde, ýagdaýy we özüni alyp barşyna eýe. Mysal üçin, bank hasabyndaky hasapdaky pul mukdary görnüşinde döwlet bolup biler we balansy köpeltmek we peseltmek häsiýetine eýe bolup biler. Java-da özüni alyp barş usullary ulanylýar. Usullary nädip suratlandyrmaly, Java öwreniş syýahatyňyzyň başynda girizilýär. Mysal üçin, Oracle-dan resmi sapakda: “ Usullary kesgitlemek ”. Bu ýerde iki möhüm tarap bar:
  • Her usulyň goly bar. Gol usulyň adyndan we giriş parametrlerinden durýar;
  • Usullar gaýdyp geliş görnüşini görkezmeli;
  • Yza gaýtarma görnüşi usul golunyň bir bölegi däl.
Javaene-de bu, Java-yň güýçli ýazylan dildigini we düzüjiniň haýsy görnüşleriň mümkin boldugyça ulanylýandygyna öňünden düşünmek isleýär. Againene-de ýalňyşlyklardan goramak üçin. Umuman aýdanyňda, hemme zat peýdaly. Dogrusy, bu bize ýene bir gezek maglumatlary dolandyrmak medeniýetini ornaşdyrýar, meniň pikirimçe. Şeýlelik bilen, usullar üçin bahanyň görnüşi görkezilýär. Şol bahany usullardan yzyna gaýtarmak üçin açar söz ulanylýar return.

Java-da açar söz

Beýannama açar söz, return"Dolandyryş akymynyň beýany" oracle gollanmasynda ara alnyp maslahatlaşylyşy ýaly " gözegçilik akymynyň jümlelerini " aňladýar. Şeýle hem resmi sapakda “ Gymmatlygy usuldan yzyna gaýtarmak ” barada resmi sapakda okap bilersiňiz . Düzüji, usuldan gaýtarylan bahanyň usul bilen görkezilen yzyna gaýtaryş bahasynyň görnüşine laýyk gelýändigine mümkin boldugyça gözegçilik edýär. Mysal üçin, okuw nokadyndan onlaýn IDE ulanalyň. Asyl mysala seredeliň:
public class HelloWorld {
    public static void main(String []args) {
        System.out.println("Hello World");
    }
}
Görşümiz ýaly, bu ýerde mainprogramma giriş nokady bolan bir usul ýerine ýetirilýär. Kod setirleri ýokardan aşak ýerine ýetirilýär. Usulymyz mainbahalary yzyna gaýtaryp bilmez, ýogsam ýalňyşlyk alarys: " Error: Main method must return a value of type void". Şonuň üçin bu usul diňe ekrana çykar. Indi setiriň kabul edilmegini habary almak üçin aýratyn usula geçireliň:
public class HelloWorld {

    public static void main(String []args) {
        System.out.println(getHelloMessage());
    }

    public static String getHelloMessage() {
        return "Hello World";
    }

}
Görşümiz ýaly, açar söz ulanyp return, bu usuldan soň ulanan gaýtaryş bahasyny kesgitledik println. Usulyň beýanynda (kesgitlemesinde), getHelloMessagebize gaýdyp geljekdigini görkezdik String. Bu düzüjä usulyň hereketleriniň yglan edilişine laýyk gelýändigini barlamaga mümkinçilik berýär. Elbetde, usul kesgitlemesinde görkezilen yzyna gaýtaryş bahasynyň görnüşi, koddan yzyna gaýtarylan bahanyň görnüşinden has giň bolup biler. Esasy zat, görnüşleriň biri-birine azalmagydyr. Otherwiseogsam, ýygnamak wagty ýalňyşlygy alarys: " error: incompatible types". Theeri gelende aýtsak, derrew bir sorag ýüze çykdy: Näme üçin returnprogramma akymyna gözegçilik operatorlaryna degişlidir? Emma programmanyň ýokardan aşaklygyna adaty akymyny bozup biljekdigi sebäpli. Mysal üçin:
public class HelloWorld {

    public static void main(String []args){
        if (args.length == 0)  {
            return;
        }
        for (String arg : args)  {
            System.out.println(arg);
        }
    }

}
Mysaldan görnüşi ýaly, mainjava programmamyz parametrlersiz çagyrylsa, usulyň ýerine ýetirilmegini kesýäris. returnKoduňyz bar bolsa, elýeterli bolmaýandygyny ýatdan çykarmaly däldiris . Akylly düzüjimiz muny görer we size şeýle programmany işletmäge ýol bermez. Mysal üçin, bu kod düzülmez:
public static void main(String []args) {
        System.out.println("1");
        return;
        System.out.println("2");
 }
Bu meseläni çözmek üçin hapa hack bar. Mysal üçin, düzediş maksatlary üçin ýa-da başga bir sebäp bilen. Aboveokardaky kody blok returnbilen örtüp düzedip bolar :if
if (2==2)  {
    return;
}

Erroralňyşlyk bilen işlemekde beýannama

Örän kyn bir ýagdaý bar - ony returnýalňyşlyk bilen işlemek bilen bilelikde ulanyp bileris. returnDerrew bir blokda ulanmak catchgaty erbet görnüş, şonuň üçin bu zatlardan gaça durmaly diýesim gelýär . Emma bize mysal gerek, şeýlemi? Ine:
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);
        }
    }

}
Bir seretseň, 2-i yzyna gaýtarmaly ýaly, sebäbi finallyol hemişe ýerine ýetirilýär. Nook, bahasy 1 bolar we üýtgeýäniň üýtgemegine finallyähmiýet berilmez. Mundan başga-da, eger valuebir obýekt bar bolsa we biz finallydiýsek value = null, onda ol catchentek obýekte salgylanmany yzyna gaýtaryp berer null. Emma blokdan finallyoperator returndogry işlärdi. Kärdeşler şeýle sowgat üçin size minnetdarlyk bildirmezler.
Başga näme okamaly:

yzyna gaýtarmak

void.class

Netijede. Aaly geň gurluşyk ýazyp bilersiňiz void.class. Görnüşi ýaly, näme üçin we näme? Aslynda, Java Reflection API ulanylýan dürli çarçuwalarda we kyn ýagdaýlarda bu gaty zerur bolup biler. Mysal üçin, usulyň haýsy görnüşine gaýdyp gelýändigini barlap bilersiňiz:
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);
        }
    }
}
Bu usullaryň hakyky koduny çalyşmak zerur bolan synag çarçuwalarynda peýdaly bolup biler. Thisöne munuň üçin bu usulyň özüni alyp barşyna düşünmeli (ýagny, haýsy görnüşlere gaýdyp gelýändigi). mainUsuly ýokardaky koddan durmuşa geçirmegiň ikinji usuly bar :
public static void main (String[] args) {
        for (Method method : HelloWorld.class.getDeclaredMethods()) {
            System.out.println(method.getReturnType() == Void.TYPE);
        }
 }
Olaryň arasyndaky tapawut barada has gyzykly çekişmäni stackoverflow-da okap bilersiňiz: java.lang.Void bilen boşlugyň arasynda näme tapawut bar? # Wiaçeslaw
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION