Goto-lause: definitsioon ja kasutamine programmeerimiskeeltes

Leia selge juhend goto-lausest: definitsioon, kasutamisnäited, Java eripära ja struktureeritud programmeerimise mõju – praktiline ülevaade programmeerimiskeeltes.

Autor: Leandro Alegsa

goto on paljudes programmeerimiskeeltes kasutatav avaldis. See on kombinatsioon ingliskeelsetest sõnadest go ja to. See on viis hüpata teise koodireale või siltmärgiga tähistatud kohta programmis — teisisõnu muuta täitmise voogu otseselt ilma tavapäraste kontrollstruktuurideta (nt tsüklid või tingimuslauseid) või funktsioonikõnedeta.

Kasutamine ja süntaks

Süntaks sõltub keelest. Madalama taseme keeltes (nt assembly) on põhimõtteliselt ainult hüppelaused (jump), samas kõrgetel keeltes nagu C on olemas märgistatud goto-lause, mis näeb välja umbes nii:

label:     // kood     goto label;

Selline hüpe viib täitmise kohe märgistatud kohani. Mõned keeled (näiteks Java) on sõna goto reserveerinud, kuid seda ei saa kasutada. (Reserveeritud sõna on sõna, mis on osa programmeerimiskeelest ja mida ei saa kasutada muudeks asjadeks, näiteks muutujate nimetamiseks).

Näited

Lihtne näide C-st, kus goto viib kontrolli väljapoole tsüklist:

for (int i = 0; i < n; ++i) {     if (tingimus) {         goto lõpp;     }     // muu töö } lõpp: // siit jätkatakse pärast goto-d

Teine sagedane kasutus C-s on vigade käsitlemine ja ressursside vabanemine, kus mitmes kohas võib tekkida viga ja ühest kohast on lihtsam kõike puhastada:

p = malloc(...); if (!p) goto cleanup; q = fopen(...); if (!q) goto cleanup; // kasutame p ja q cleanup: if (q) fclose(q); free(p);

Miks goto on vastuoluline

  • Loetavus ja hooldatavus: liiga palju juhte hüppeid muudab programmi loogika raskesti jälgitavaks — see on tuntud kui "spagettikood".
  • Struktureeritud programmeerimise põhimõtted: arvutiteaduses on teooria, mida nimetatakse struktureeritud programmi teoreemiks. See teooria ütleb, et iga programmi saab kirjutada nii, et asju tehakse funktsioonide ja meetodite (väiksemate alaprogrammide) abil, mitte ühe väga suure programmiga ja goto-käsklustega. Teooria tõestab, et goto-avaldust ei ole programmide kirjutamiseks vaja.
  • Vigade võimalus: juhuslikud hüpped võivad jätta ressursid avatud või jätta initsialiseerimata oleku — raskem on tagada õiged puhastustoimingud.

Millal goto võib olla kasulik

Kuigi üldiselt on kõrgema taseme koodis goto kasutamine ebasoovitav, on mõned praktikalised erandid:

  • Vigade ja erandite käsitlemine C-laadsetes keeltes, kus ei ole automaatset erandisüsteemi — üks puhastuspunkt aitab vältida korduvat koodi.
  • Väljumine mitu tasandit sügavast tsüklist või tingimuse puust, kus muud meetodid teeksid koodi oluliselt keerukamaks.
  • Madala taseme optimeerimine või spetsiifiline riistvaraga suhtlemine assemblys või väga jõudlusnõudlikes osades.

Alternatiivid

Paljud kaasaegsed keeledisainid eelistavad selgemaid konstruktsioone:

  • Funktsioonide ja meetodite kasutamine: jagab programmi loogika väiksemateks ja taaskasutatavateks osadeks.
  • Tsüklite ja standardsete kontrollstruktuuride (if/else, switch, for, while) kasutamine.
  • Erandid (exceptions): keeltes, kus need on kättesaadavad, võimaldavad samaaegselt veahaldust ja puhastust ilma goto-d kasutamata.
  • Varasema väljumise (early return) ja selgete puhastustoimingute mallid: lihtsustavad kontrollvoolu ja vähendavad vajadust hüppede järele.

Keeletugi

Mõned keeled toetavad goto-lauset otse (näiteks C, C++, PHP, Perl, Fortran ja assembly), teised keelavad selle või reserveerivad sõna ilma implementeerimata (Java, Python ei oma tavalist goto-d). Keele kogukondade ja stiilijuhendite soovitused varieeruvad: isegi kui keel lubab goto-d, soovitatakse seda kasutada ainult erandjuhtudel ja selgelt dokumenteeritult.

Kokkuvõttes on goto tööriist, mis annab tugeva kontrollvõimaluse täitmise voo üle, kuid selle kasutamine nõuab ettevaatust — struktureeritud lähenemised, selged abstraktsioonid ja kaasaegsed veahaldusmehhanismid teevad suure osa goto-vajadusest tarbetuks.

Kasutage

Goto-avaldust kasutatakse tavaliselt koos sildiga. Silt on sõna, mis identifitseerib koodi mingi koha. Goto-käsklus koodis näeb tavaliselt välja nii:

vali LABEL

Selles näites hüppab arvuti asukohale LABEL.

Paljudel juhtudel kombineeritakse avaldis goto avaldusega if. Sellisel juhul hüppab arvuti koodi teise kohta ainult siis, kui midagi on tõene. Näiteks:

IF tingimus THEN mine LABEL

Seda võib lugeda nii, et "kui mingi tingimus on tõene, siis mine LABELi asukohta".

Eri programmeerimiskeeltes on erinevad piirangud või piirangud goto-käskude kasutamisele. Näiteks C-keeles ei ole lubatud goto-lausetega hüpata teise funktsiooni (alamprogrammi) sees asuvasse kohta.

Küsimused ja vastused

K: Mis on goto avaldus?


V: Goto-käsklus on paljudes programmeerimiskeeltes võimalus hüpata teise koodireale.

K: Kui paljud programmeerimiskeeled toetavad goto-avaldust?


V: Paljud programmeerimiskeeled toetavad goto-avaldust.

K: Millises programmeerimiskeeles on goto reserveeritud sõna?


V: Java keeles on goto reserveeritud sõna, kuid seda ei saa kasutada.

K: Mis on programmeerimiskeeles reserveeritud sõna?


V: Reserveeritud sõna on sõna, mis on osa programmeerimiskeelest ja mida ei saa kasutada muudeks asjadeks, näiteks muutujate nimetamiseks.

K: Mis on struktureeritud programmi teoreem arvutiteaduses?


V: Struktureeritud programmi teoreem on teooria arvutiteaduses, mis ütleb, et iga programmi saab kirjutada nii, et asju tehakse funktsioonide ja meetoditega, mitte ühe väga suure programmiga ja goto-avaldustega.

K: Kas struktureeritud programmi teoreem tõestab, et programmide kirjutamiseks on vaja goto-avaldusi?


V: Ei, struktureeritud programmi teoreem tõestab, et programmide kirjutamiseks ei ole goto-avaldusi vaja.

K: Mis on funktsioonid ja meetodid programmeerimises?


V: Funktsioonid ja meetodid on väiksemad alamprogrammid, mida kasutatakse programmeerimises konkreetsete ülesannete täitmiseks.


Otsige
AlegsaOnline.com - 2020 / 2025 - License CC3