Goto

Från Wikipedia
Hoppa till: navigering, sök

Goto är en programflödesstyrande sats i många imperativa programspråk, bland annat Basic, C, Pascal och C#. Satsen talar om att programexekveringen ovillkorligen ska hoppa till och fortsätta vid en angiven plats, som vanligen identifieras med en etikett (engelska: label) eller ett radnummer, beroende på programspråk. I maskinkod/assembler motsvaras goto av jump eller branch.

Namnet goto kommer av engelska go to, ’gå till’.

Användning[redigera | redigera wikitext]

Ett exempel i Basic med radnumrering:

10 PRINT "Programmet startar här."
20 GOTO 40
30 PRINT "Denna rad hoppas över."
40 PRINT "Programmet fortsätter här."

En goto-sats kan kombineras med en if-sats för att göra hoppet villkorat:

20 IF I = 99 THEN GOTO 40

I kombination med if-satser kan goto användas för att återskapa andra typer av villkorssatser som återfinns i strukturerad programmering. Detta följer av att villkorssatser i maskinkod är implementerade som jämförelser och villkorade hopp.

Kritik av goto[redigera | redigera wikitext]

Goto-satsen plats i högnivåspråk har fått utstå stor kritik. En vanlig åsikt är att den leder till svårläslig kod, som är svår att förändra och uppdatera, och att den leder till spagettikod. Under 1960- och 1970-talen kom många som arbetade inom datavetenskap fram till att program bör använda en strukturerad flödeskontroll med slingor och if-satser.

Den troligtvis mest välkända kritiken av goto framfördes 1968 i ett brev 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. Det visade sig att i ett antal av dem var goto den optimala språkkonstruktionen att använda.

Goto kan i vissa fall fungera som den bästa lösningen på ett problem ifall det saknas nödvändiga programkonstruktioner för att det annars ska kunna lösas i ett visst programspråk. Till exempel saknar C stöd för korutiner; sådana kan implementeras med hjälp av goto.

Referenser[redigera | redigera wikitext]

  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.