web-dev-qa-db-fra.com

Que fait le mot-clé return dans une méthode void en Java?

Je regarde n tutoriel de recherche de chemin et j'ai remarqué une instruction return à l'intérieur d'une méthode void (classe PathTest, ligne 126):

if ((x < 0) || (y < 0) || (x >= map.getWidthInTiles()) || (y >= map.getHeightInTiles())) {
    return;
}

Je suis novice à Java. Quelqu'un peut-il me dire pourquoi c'est là? Autant que je sache, return à l'intérieur d'une méthode vide n'est pas autorisé.

61
Relequestual

Il suffit de quitter la méthode à ce stade. Une fois que return est exécuté, le reste du code ne sera pas exécuté.

par exemple.

public void test(int n) {
    if (n == 1) {
        return; 
    }
    else if (n == 2) {
        doStuff();
        return;
    }
    doOtherStuff();
}

Notez que le compilateur est assez intelligent pour vous dire que du code est inaccessible:

if (n == 3) {
    return;
    youWillGetAnError(); //compiler error here
}
113
CookieOfFortune

Vous pouvez avoir return dans une méthode void, mais vous ne pouvez pas renvoyer n'importe quelle valeur (comme dans return 5;), c’est pourquoi ils l’appellent une méthode void. Certaines personnes mettent toujours explicitement fin aux méthodes void avec une instruction return, mais ce n'est pas obligatoire. Il peut être utilisé pour quitter une fonction tôt, cependant:

void someFunct(int arg)
{
    if (arg == 0)
    {
        //Leave because this is a bad value
        return;
    }
    //Otherwise, do something
}
24
Pesto

Le mot-clé fait simplement apparaître une image de la pile d'appels, renvoyant le contrôle à la ligne qui suit l'appel de la fonction.

18
MahdeTo

Le Java langage spécification indique que vous pouvez avoir un retour sans expression si votre méthode retourne void.

12
John Ellinwood

Il fonctionne comme un retour de fonction avec un paramètre spécifié, à ceci près qu'il ne renvoie rien car il n'y a rien à retourner et le contrôle est retransféré à la méthode appelante.

2
Chris Ballance

Il quitte la fonction et ne renvoie rien.

Quelque chose comme return 1; serait incorrect puisqu'il retourne le nombre entier 1.

2
Albert

Voir cet exemple, vous souhaitez ajouter à la liste conditionnellement. Sans le mot "return", tous les ifs seront exécutés et ajoutés à la liste de tableaux!

    Arraylist<String> list =  new ArrayList<>();

    public void addingToTheList() {

    if(isSunday()) {
        list.add("Pray today")
        return;
    }

    if(isMonday()) {
        list.add("Work today"
        return;
    }

    if(isTuesday()) {
        list.add("Tr today")
        return;
    }
}
1
iali87