Normaal gesproken wordt het gebruikt in functies. Net als een functie in wiskunde geeft een functie een bepaald resultaat op basis van bepaalde invoerwaarden (de parameters). Dit resultaat moet geretourneerd worden.
Code:
func Example(int number)
{
return number * number;
}
Bovenstaande functie krijgt een nummer als invoer en retourneert (de return) het kwadraat hiervan. Soms hoef je echter niets te retourneren, omdat het een functie is die geen resultaat geeft. Zulke functies of code veranderen bijvoorbeeld iets, maar hoeven dit niet terug te geven. Dit kan bijvoorbeeld het schrijven naar een database zijn:
Code:
func Example(int number)
{
_database.Write(number);
}
In sommige gevallen wil je functies zonder uitvoerwaarde ergens middenin verlaten en de rest van de code niet uitvoeren. Dit kan ook met een return midden in de code. Het volgende voorbeeld doet dit bijvoorbeeld na een het optreden van een fout. Het laat een popup zien en vervolgens returned de code:
Code:
func Example(int number)
{
var result = TryToDoSomethingWithNumber(number);
if (!result.Success)
{
ShowPopUp(result.Error);
return;
}
DoMoreStuffWithTheNumber(number);
....
}
Bovenstaande code is niet geschreven in een specifieke taal, ik heb het even als voorbeeld verzonnen. Als er dus geen succcesvol resultaat uit de aanroep van TryToDoSomethingWithNumber komt, dan gaan we de popup tonen. Vervolgens wordt return gebruikt. Dit betekent dat we de functie verlaten en de rest van de regels code niet uitvoeren. In dit geval wordt DoMoreStuffWithTheNumber niets uitgevoerd.
Dit laatste kun je uiteraard ook met if en else doen. Heb je echter meer van dit soort checks binnen die if's en else's, dan wordt het vaak wat onoverzichtelijk:
Code:
func Example(int number)
{
var result = TryToDoSomethingWithNumber(number);
if (!result.Success)
{
ShowPopUp(result.Error);
}
else
{
result = DoMoreStuffWithTheNumber(number);
if (!result.Success)
{
ShowPopUp(result.Error);
}
else
{
result = DoMoreStuffWithTheNumber(number);
if (!result.Success)
{
ShowPopUp(result.Error);
}
else
{
...
}
}
}
}
Met returns is dit als volgt te schrijven:
Code:
func Example(int number)
{
var result = TryToDoSomethingWithNumber(number);
if (!result.Success)
{
ShowPopUp(result.Error);
return;
}
result = DoMoreStuffWithTheNumber(number);
if (!result.Success)
{
ShowPopUp(result.Error);
return;
}
result = DoMoreStuffWithTheNumber(number);
if (!result.Success)
{
ShowPopUp(result.Error);
return;
}
...
}
Zoals je ziet zijn dit twee verschillende manieren om hetzelfde te bereiken. De een maakt gebruik van de voor jou bekende goede oude if's en else's. De ander combineert if's met returns om dit te doen. Er is hier geen kwestie van goed en fout. In de ene situatie is de een misschien mooier dan de ander en alsnog is het een kwestie van smaak (en bijvoorbeeld afspraken binnen een bedrijf). De versie met de returns heeft als voordeel dat het makkelijker te lezen is wanneer er veel if's en else's cascaded (binnen elkaar, waardoor de code steeds meer naar rechts verschuift en het geheel moeilijker wordt om te lezen) worden gebruikt.