Różnica między return a brak return

0

Czy jest jakaś różnica między kodem:

    public static String function(String param) {

        if(param.equals("OK")) {
            return function("OK2");
        }

        return "exit";
    }

a


    public static String function(String param) {

        if(param.equals("OK")) {
            function("OK2");
        }

        return "exit";
    }

? Jedno i drugie się kompiluje.

5

W przypadku pierwszym po wejściu do ifa, funkcja nie poleci do linijki ostatniej return exit tylko zakończy działanie w momencie trafienia na return w ifie. W drugim przypadku niezależnie czy wejdzie czy nie wejdzie do ifa i tak zwróci exit bo wynik funkcji nie jest powiązany z wejściem do ifa i zawsze zwróci wartość z ostatniej linijki.

1

Pierwsze zwróci to, co zwróci kolejne wywołanie tej funkcji, druga zawsze zwróci "exit". To że zwracają to samo to właściwie przypadek.

Zmień na:

    public static String function(String param) {

        if(param.equals("OK")) {
            return function("OK2");
        }
        if(param.equals("OK2")) {
            return "noexit";
        }

        return "exit";
    }

I już będzie inaczej.

4

W pierwszym przypadku jeżeli w parametrze będzie OK, to rekurencyjnie wywołasz tę metodę ale z parametrem OK2. Przy wywołaniu rekurencyjnym z parametrem OK2 metoda zwróci exit i tak na prawdę wynik działania tej metody będzie exit, czyli:

function("NIE OK") == exit;
function("OK") == exit;

--- EDYTKA ---

Jeżeli chodzi o drugi przypadek, to dając OK wywołasz ją raz jeszcze rekurencyjnie z parametrem OK2 i potem ona zwróci exit, ale nie ma tutaj returna, więc przejdzie dalej i trafi na return exit?

--- EDYTKA 2 ---

Odpowiadając na pytanie:

Czy jest jakaś różnica między kodem:

Tak i nie. Obie metody zadziałają identycznie dla tych samych argumentów, ale zrobią to w inny sposób - wykonają się inaczej.

1 użytkowników online, w tym zalogowanych: 0, gości: 1