Citat:
Ursprungligen postat av Ergodyne
En lite fråga vad ni tycker om att använda goto när man skriver c++
Jag fick alltid lära mig att man aldrig aldrig aldrig ska använda goto när man skriver c eller framförallt c++. Men på senare tid har jag stött på kod som använder det ganska flitigt.
Skillnaden är iofs att dessa goto-satser inte hoppar runt i programmet så mycket utan snarare ser till att man flyttar sig förbi vissa rader bara.
Följande är ett exempel på hur en kodsnutt kan se ut:
[PHP]
int SomeFunction(int parameter)
{
int retVal = FALSE;
if (!Initiate())
goto ERROR_END;
if (!AllocateMemory())
goto ERROR_END;
if (!RunAnalysis())
goto ERROR_END;
return TRUE;
ERROR_END:
ReleaseMemory();
return FALSE;
}
[/PHP]
Skulle man skriva detta med if-satser så blir det ju mycket mer nästlat och antag att man gör ännu fler kontroller så skulle det till slut bli oläsbart.
Så kan man i detta fall tycka att det är ok att använda goto?
Skulle gå att skriva allt detta med en if-sats, men jag förstår poängen, och den löses med en try-funktion:
[PHP]
static int SomeFunctionTry(int parameter);
int SomeFunction(int parameter)
{
if (!SomeFunctionTry(parameter)) {
ReleaseMemory();
return FALSE;
}
return TRUE;
}
static int SomeFunctionTry(int parameter)
{
if (!Initiate())
return FALSE;
if (!AllocateMemory())
return FALSE;
if (!RunAnalysis())
return FALSE;
return TRUE;
}
[/PHP]
Vanligtvis borde AllocateMemory och liknande funktioner ta en void ** som argument (som då SomeFunction måste ange som parameter till SomeFunctionTry) vilket sedan ReleaseMemory får städa upp om nödvändigt. Kan inte komma på något tillfälle då Try-patternet inte skulle fungera.