GoTo

Izvor: Wikipedia

GoTo je u većini računalskih programskih jezika podržana naredba izvršavajuća bezuvetni skok na željenu lokaciju koda programa obeleženu labelom (oznakom). Reč GoTo izvedena je od englezkoga go (idi) i to (do, prema). U početcima razvoja programskih jezika više razine početkom šezdesetih godina dvadesetoga stoleća ova naredba je bila nezamenjiva u sekvencijalnim kodovima (FORTRAN, ALGOL, BASIC) kao naredba kojom su se implementirale evaluacije logičkih izkaza i uslovljenih skokova, dok još nije bila zastupljena paradigma proceduralnoga programiranja i organiziranja koda u strukturne blokove, sve do pojave programskih jezika kao što su C i Pascal krajem šezdesetih i početkom sedamdesetih godina dvadesetoga stoleća. Ipak, većina modernih programskih jezika zadržali su ovu naredbu uzprkos sve manjoj potrebi za njezino koristjenje. Jedan od retkih programskih jezika koji ne podržava ovu naredbu je Java, iako je goto unutar Jave rezervirana reč, što znači da se ne može koristiti kao identifikator. U proceduralnim programskim jezicima C i Pascal dopušta se naredba goto, iako s njom nije moguće skakati u podprograme (procedure/funkcije) ili izvan njih.

Primeri[uredi - уреди]

GoTo se obično koristi u If-Then-Else izrazima kod sekvencijalnih programskih jezika, tamo gde se kod proceduralnih može pozvati neka već definirana standardna ili unutar koda uključena funkcija. Dakle, uslovljene naredbe bivaju izvršene bezuslovnim skokovima. Sledeći primer u MS-DOS Batch skriptnom kodu izvodi skok do dela koda obeležena labelom "err" i izpisujućega poruku o greški u slučaju nepronalaženja odredjene datoteke u datotečnom sustavu:

@echo off
 
cls
fpc GoToTron.pp -Sg
pause
 
if exist GoToTron.exe (GoToTron.exe) else (goto err)
exit
 
:err
cls
echo Kompilacija i pokretanje programa nisu uspeli.
pause
exit

Varijacije[uredi - уреди]

GoSub[uredi - уреди]

U raznim implementacijama BACIC-a postoji konstrukcija "GO SUB [redni broj komande] [...] RETURN" koja instruira interpreteru da skoči do podprograma čija je prva komanda označena brojem nakon ključne reči "Go Sub", a ključna reč "Return" osigurava povratak u glavni program odakle je subrutina pozvana, nakon što je izvršena. Kako je pozivanje podprograma u Basicu rešeno na posve nestrukturiran način, iza koda glavnoga programa i pre početka pisanja podprograma mora se navesti ključna reč STOP, kako bi se osiguralo da program nakon izvršenja glavnoga dela ne će preći i na izvršenje svih navedenih podprograma onim redom kojim su upisani.

Primer[1]:

10 REM *** Rješavanje kvadratne jednačbe ***
20 PRINT "Koliki su koeficijenti a, b, c? "
30 PRINT A, B, C
40 GO SUB 500
45 IF (B^2 - 4*A*C) < 0 THEN 10
50 PRINT "Korijeni ove jednačbe su: "
60 PRINT "x1 = "; X1 "x2 = "; X2
70 STOP
500 REM *** Podprogram za determinantu ***
510 IF (B^2 - 4*A*C) < 0 THEN 600
520 X1 = (-B + (B^2 - 4*A*C)^(1/2)) / (2*A)
530 X2 = (-B + (B^2 - 4*A*C)^(1/2)) / (2*A)
540 GOTO 610
600 PRINT "Determinanta je manja od nule. "
610 RETURN
620 END
  • Razgranati GoSub

Go Sub instrukcija koja odlučuje o programskom skoku na osnovi vrednosti pohranjene u njezinoj kondicionalnoj varijabli, ima sledeći oblik:

50 GO SUB X OF [labela1, labela2, labela3...]

npr:

50 GO SUB X OF 110, 210, 320, 1400

Ako je:

 x = 1 : skok do adrese prvoga podprograma (110);
 x = 2 : skok do 210;
 x = 3 : skok do 320;
 x = 4 : skok do 1400;
 x < 1 : razgranati Go Sub se preskače;
 x > 4 : razgranati Go Sub se preskače, jer su u instrukciji zadana samo četiri podprograma;

GoToXY[uredi - уреди]

U Turbo Pascalu postoji izvedba goto naredbe u obliku GotoXY, koja služi za prostorno zazmeštanje izpisujućih karaktera i čitajućih kursora unutar prozora terminala odredjenih dimenzija (80x24, 80x25 itd.). Može se koristiti za crtanje prozora (okvira) i grafičko oblikovanje TUI aplikacija, ili smeštanje pokazivača koji učitava potrebnu varijablu iznad već ocrtanih znakova.

Funkcija GotoXY uzima dva argumenta X i Y tipa integera bez predznaka: X u vrednosti od 1 do 80 (što predstavlja širinu terminala), i Y koji može biti od 1 do 24 ili 25 (u zavisnosti od vrste grafičkoga adaptera kojem je program prilagodjen). Sintaksa GotoXY naredbe izgleda ovako:

gotoXY (X, Y);

gde X i Y u zagradi predstavljaju koordinate za izpis znakova na terminalu kako je prethodno navedeno. Dakle, GotoXY funkcija za argumente uzima dvodimenzionalnu matricu celih brojeva.

Izpod je primer u Pascalu koji crta dva okvira različite veličine u konzolnom programu[2].

program Okna;
 
procedure makewin (x1,y1,x2,y2 : byte);
var i, j : byte;
begin
  gotoXY (x1, y1);
  write (#201);
  for i:= x1+1 to x2-1 do write (#205);
  write (#187);
  for i:= y1+1 to y2-1 do
      begin
        gotoXY (x1, i);
        write (#186);
        for j:= x1+1 to x2-1 do write (' ');
        write (#186);
      end;
 
  gotoXY (x1, y2);
  write (#200);
  for i:=x1+1 to x2-1 do write (#205);
  write (#188);
  readln;
 end;
 
{---->}
begin
 
makewin (1,1,30,8);
makewin (10,10,60,18);
 
end.

Break & Continue[uredi - уреди]

U C programskom jeziku, osim standardne goto komande postoji i varijacija za izskakanje iz petlje pod odredjenim uvetima. Naredba Break prekida izvršavanje petlje unutar koje je pozvana vraćajući se na delnicu programa pre pojavljivanja petlje, dok Continue ponovno testira brojač petlje (ako je u pitanju for iteracija) ili uslov iteracije (kod while petlji). Primeri koristjenja Break i Continue skokova preuzeti su iz knjige "Programski jezik C" autora Dennisa Ritchieja i Briana Kernighana[3]

  • Break
/* trim: remove trailing blanks, tabs, newlines */
int trim(char s[])
   {
     int n;
     for (n=strlen(s)-1; n>=0; n--)
         if (s[n] != ' ' && s[n] != '\t' && s[n] != '\n')
            break;
     s[n+1] = '\0';
     return n;
   }
  • Continue
for (i = 0; i < n; i++)
    if (a[i] < 0) /* skip negative elements */
       continue;
    ... /* do positive elements */

Vanjske veze =[uredi - уреди]

Izvori[uredi - уреди]

=

  1. Željko Reljić, Branimir Makanec (1984). BASIC kompjuterski jezik. Tehnička knjiga - Zagreb. str. 84. 
  2. [1][mrtav link]
  3. Brian W. Kernighan, Dennis M. Ritchie (1988). The C Programming Language (Second Edition). Prentice Hall. str. 62.