waarom de error 'not all path return a value'?

Status
Niet open voor verdere reacties.

tartuffe2

Gebruiker
Lid geworden
30 nov 2016
Berichten
56
Hello

Deze code geeft de error: "not all path return a value.".
Maar de method zal in ieder geval een return value afgeven (ofwel odd ofwel even). Er zijn geen andere mogelijkheden. Dus volgens mij hebben alle paths een return value. Waarom dan die error?
Bedankt.
T.
Code:
static void Main()
    {
        Console.WriteLine(test());
    }
 
    static string test()
    {
        for (int i = 1; i< 10; i++)
        {
            if (i % 2 == 0)
                return "even";
            else
                return "odd";
        }
    }


mod. een stukje code graag in
Code:
[/noparse] tags zetten, of het drukknopje # gebruiken.[/COLOR]
 
Laatst bewerkt door een moderator:
Even omgezet in JS, daar voel ik mij meer in thuis ;) Het werkt prima, ik zie zo gauw geen rare dingen.
Code:
function Main() {
    console.log( test() );
}
Main();

function test() {
    for (var i = 1; i < 10; i++) {
        if (i % 2 == 0) {
            console.log( "true = even" );
            return "even";
        } else {
            console.log( "false = odd" );
            return "odd";
        }
    }
}
 
Kan goed zijn, maar in C# wordt de code niet uitgevoerd wegens fout not all path return a value'. Heeft iemand een verklarind voor?
Bedankt.
 
Even googeleln.
Na de 9e keer begint de for loop aan de 10e keer en komt dan de conditie i< 10 tegen en zal daarna nooit meer een return tegenkomen. Hierbij houdt de compiler geen rekening met eventuele if constucties die in de for loop staan. De functie test() moet altijd een return hebben, onafhankelijk van het resultaat van de if. Ik denk een "catch-all" ofzo.
Code:
    static string test()
    {
        for (int i = 1; i< 10; i++)
        {
            if (i % 2 == 0)
                return "even";
            else
                return "odd";
        }
        return "";
    }

of een andere nettere oplossing die ik vond
Code:
    static string test()
    {
        string result = "";
        for (int i = 1; i< 10; i++)
        {
            if (i % 2 == 0)
                result = "even";
            else
                result = "odd";
        }
        return result;
    }
 
Laatst bewerkt:
Na de eerste ronde (met i=1) is het al afgelopen, toch? Dan is 1 % 2 niet gelijk aan 0 => return "odd".
Jouw oplossing is prima, maar ik probeer een logische uitleg te vinden waarom de code niet return "odd" doet en de functie niet verlaat. Blijkbaar gaat het in Java ...
Of ik moet gewoon de uitleg aannemen dat er een return altijd buiten de lus moet zijn, zonder me verder vragen te stellen?
 
Na de eerste ronde (met i=1) is het al afgelopen, toch?
Dan heeft de for lus niet veel nut.

Bij een kort overzichtelijk scriptje zien mensen direct de logica en gaan er dan vanuit dat de compiler dit ook ziet. Maar een compiler moet in elke situatie controleren of er mogelijke onjuistheden kunnen ontstaan. Het mag dan niet uitmaken of de for lus 10 of 1000 regels aan code bevat. Daarom hanteert de compiler rules en blijkbaar is één van die rules dat er altijd een return moet zijn die niet in een block constructie staat. Stel dat er 1000 regels in de for lus staan, dan kan je op elke plek uit de for lus stappen en zal er nooit een return worden gevonden. Vandaar deze melding. In een klein script lijkt het raar maar in een for lus van 1000 regels ben je blij dat deze melding wordt gegeven ;)

Even uit nieuwsgierigheid
Werkt het goed als je in de if/else de returns laat staan en helemaal onderaan in de functie een return toevoegt?
 
Laatst bewerkt:
Als er ook een return is buiten de lus, dan gaat het inderdaad. Dus er moet er één zijn buiten de lus.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan