Citat:
Ursprungligen postat av EvulTomteFar
GOTO är en dödssynd. Varenda vettig programmeringsbok avråder för att använda goto just pga av typen av buggar som kan uppstå.
Jag vågar säga att det inte finns något fall då man behöver använda goto.
De flesta erkänt bra programmeringsböckerna (som bland annat Code Complete) bannlyser inte användningen av goto utan endast föreslår att man söker en icke-goto lösning först. Huvudpoängen med dem flesta programmeringsstilarna är att göra det enklare för en att förstå sig på koden. Om det råkar vara goto som sköter det bäst för en viss situation... tja... då är det väl rimligt att man använder goto också?
Ta Katalysator's exempel och lägg på kraven att undo_X() är kodsnuttar som läser/skriver från lokala variablar och inte funktionsanrop, så att man inte enkelt kan fixa runt det hela med hjälp av funktionspekare och object som anropar funktionspekarna vid destruktion.
Försök att skriva om det utan gotos. Nestlade if-satser? Jag tror nog att dem flesta skulle klassa det som mycket svårläsligare. State variabel? Möjligt, men känns som svårt att ändra i koden (när man vill lägga till en func_D/undo_D mitt i).
Eller, exempel där man ska bryta sig ut ur nestlade loopar?
[php]
while(test_A())
{
while(test_B())
{
while(test_C())
{
if(test_D())
goto EXIT_LOOP;
}
}
}
EXIT_LOOP:
[/php]
Det går alltid att skriva goto-fri kod. Men det går inte alltid att skriva goto-fri kod som är lika enkel att förstå och/eller är lika effektiv (det senare är i 99,9999% av fallen helt irrelevant då denna lilla skillnad i prestanda inte eftersökes). Anti-goto fanatiker skulle jag nog vilja placera ungefär i samma grupp som allt-måste-skriva-i-OO-stil fanatiker.
Ibland är den enklaste lösningen helt enkelt bäst.