Goto

Från Rilpedia

Version från den 16 maj 2009 kl. 15.12 av DragonBot (Diskussion)
(skillnad) ← Äldre version | Nuvarande version (skillnad) | Nyare version → (skillnad)
Hoppa till: navigering, sök
Wikipedia_letter_w.pngTexten från svenska WikipediaWikipedialogo_12pt.gif
rpsv.header.diskuteraikon2.gif

GOTO är en sats som existerar i mängder av programspråk, bland annat C, men mest kända användningen torde dock vara Basic. Kommandot innebär helt enkelt att man hoppar inom koden till en specifik namngiven plats eller till ett specifikt radnummer (beroende på språk och implementering) och fortsätter programmets exekvering där.

Användning

En GOTO-sats kombineras ofta med vanliga if-satser för att göra hoppandet i koden beroende på om ett logiskt villkor uppfylls.

   IF villkor THEN GOTO label;

I denna C-kod visar vi hur man, när ett visst villkor uppfylls, hoppar direkt ut ur en loop för att därefter fortsätta exekveringen:

int a;
for(int i=0; true ; i++)
{
  if(i == 3)
  {
     a = i;      
     goto end_of_loop;
  }
}

end_of_loop:
 int b = a;

Här startar vi helt enkelt en loop, när loop-indexet i blir 3 så sätter vi a till i:s värde och hoppar direkt ut ur loopen till den namngivna punkten "end_of_loop".

Kritik av GOTO

GOTO-satsen har fått utstå stor kritik då flera anser att den leder till oläslig och kod som är svår att förändra och uppdatera och att det leder till s.k. spagettiprogrammering. Under 1960- och 1970-talen kom många som arbetade inom datavetenskap fram till att program bör använda en struktuerad flödeskontrol med loopar och if-then-else-satser istället för GOTO. Motståndare tror dock att GOTO kan användas till kod som håller bra kvalité och det finns vissa uppgifter som inte kan lösas på ett lika smidigt sätt utan användandet av GOTO, tex att implementera finita automater, att hoppa ut ur nästlade loopar eller hantera fel.

Den troligtvis mest välkända kritiken av GOTO framfördes 1968 i ett brev författat av Edsger Dijkstra, med titeln Go To Statement Considered Harmful [1]. I detta brev argumenterar Dijkstra för att man bör ta bort den okontrollerade användandet av GOTO-satser i högnivåspråk då de försvårade arbetet med att analysera och verifiera programmets korrekthet. En annan synvinkel presenteras i Donald Knuths Structured Programming with go to Statements[2] där flera vanliga programmeringsuppgifter analyserades och det visade sig att i ett antal av dem var GOTO den optimala språkkonstruktionen att använda.

Referenser

  1. Dijkstra, Edsger: Go To Statement Considered Harmful. Communications of the ACM 11:3 (1968), 147–148.
  2. Knuth, Donald: Structured Programming with Goto Statements. Computing Surveys 6:4 (1974), 261–301.
Personliga verktyg