Citat:
Sada znam da sam to mogao uraditi na drugi nacin, ali mi se GOTO ucinio nekako najpogodnijim. A zasto se kaze da naredba goto "nije u duhu Paskala" i ako je tako zasto su je uopste ugradili u Paskal?
GoTo su ugradili (odnosno g-din Niklaus Wirth je ugradio :) u pascal iz istorijskih razloga - to je u stvari direktan naslednik mašinske JUMP instrukcije, pa je starim kukama koje su na strukturirane jezike prelazili sa asemblera to bilo verovatno znatno olakšanje. Stvar svakako i danas ima primenu (ja sam baš neki dan uglavio jedan GoTo u kood - moglo se i drugačije ali GoTo je bio najčišće rešenje). Pogledaj npr. ovaj kood koji koristi GoTo:
Code:
procedure TForm1.Button1Click(Sender: TObject);
label
exit;
var
i, j, k, x: integer;
begin
x := 0;
for i := 1 to 700 do
for j := 1 to 700 do
for k := 1 to 700 do
begin
inc(x);
if j = 10 then goto exit; // ovde je dostignut neki uslov za izlaz iz sve tri petlje
end;
exit:
label1.Caption := inttostr(x);
end;
i njegov ekvivalent bez GoTo-a:
Code:
procedure TForm1.Button2Click(Sender: TObject);
var
i, j, k, x: integer;
bExit: boolean;
begin
x := 0;
bExit := false;
for i := 1 to 700 do
begin
for j := 1 to 700 do
begin
for k := 1 to 700 do
begin
inc(x);
if j = 10 then // ovde je dostignut neki uslov za izlaz iz sve tri petlje
begin
bExit := true;
break;
end;
end;
if bExit then break;
end;
if bExit then break;
end;
label1.Caption := inttostr(x);
end;
Sad, voleo bih da me neko ubedi da je dobra praksa u svakom slučaju izbegavati GoTo, odnosno da neko ovaj drugi kood napiše na jednostavniji i kraći način od prvog. Plaćam pivo ko to uradi :)
Svakako, preteranu upotrebu je najbolje izbegavati (imho).
ss.
When something is hard to do, then it's not worth doing.