Goto: kas tas ir — definīcija, piemēri un lietojums programmēšanā
Uzzini, kas ir Goto programmēšanā — definīcija, skaidri piemēri, lietojums, priekšrocības un trūkumi, kad to izmantot un kad izvairīties.
Goto ir paziņojums daudzās programmēšanas valodās. Nosaukums nāk no angļu vārdiem go un to — tas izsaka pāriešanu (lēcienu) uz citu programmas koda rindu vai etiķeti. Praktiski goto liek izpildei turpināties no iepriekš definētas vietas, ko parasti apzīmē ar etiķeti (label).
Sintakse un vienkāršs piemērs
Precīza sintakse atšķiras atkarībā no valodas, bet pamatideja ir līdzīga: definē etiķeti un pēc tam izmanto goto, lai pārvietotos uz šo etiķeti. Piemērs C valodā:
int main() { int x = 0; start: x++; if (x < 3) goto start; return 0; } Šajā piemērā izpilde atgriežas pie etiķetes start tikmēr, kamēr x < 3 — tas ir vienkāršs cikla modelis, ko šādā gadījumā vieglāk izteikt ar while vai for, bet goto to pieļauj arī tādā formā.
Kur goto tiek atbalstīts un kur nē
Daudzas valodas atbalsta goto izteikumu (piemēram, montāžas valodas, C, C++ un daudzas citas), bet citās valodās tas ir aizliegts vai tikai rezervēts vārds. Java valodā goto ir rezervēts vārds, bet to nevar izmantot. (Rezervēts vārds ir vārds, kas ir programmēšanas valodas sastāvdaļa un ko nevar izmantot, piemēram, mainīgo nosaukšanai.) Dažās modernajās valodās, kuru dizains balstās uz struktūrām un izņēmumiem, goto netiek izmantots vai tiek lietots tikai īpašos gadījumos.
Kritika un strukturētā programmēšana
Datorzinātnē pastāv teorija, ko sauc par strukturēto programmu teorēmu. Šī teorija rāda, ka jebkuru programmu var uzrakstīt, izmantojot tikai blokus, izvēles un ciklus (vai, praktiski, funkcijas un metodes) — bez nepieciešamības pēc goto. No šīs idejas radās kritika pret goto: tā pārmērīga lietošana var novest pie sarežģītas, grūti saprotamas programmas (t.s. "spageti kods"), ko ir viegli salauzt un grūti uzturēt.
Kad goto ir noderīgs
- Kļūdu apstrāde un resursu atbrīvošana: īpaši C valodā, kur nav automātiskas atkritumu savākšanas, goto bieži izmanto kopējai attīrīšanas (cleanup) daļai. Tas ļauj sakārtoti izgāzties no vairākām iekšējām darbībām un izsaukt tīrīšanas kodu vienuviet.
- Izeja no dziļi iestiprinātiem vai vairākām ligzdotām cilpām: reizēm ērtāk un skaidrāk ir iziet uz sākotnēji definētu etiķeti nekā lietot karājošas loģikas konstrukcijas.
- Kompliskas stāvokļu mašīnas vai zema līmeņa optimizācijas: kompilatori bieži pārvērš augstas līmeņa konstrukcijas uz lēcieniem, un dažos reģionos programmētājs var izvēlēties tiešu lēciena izmantošanu, lai iegūtu ātrumu vai precizitāti.
Piemērs: kļūdu apstrāde C valodā
int func() { char *buf = malloc(100); if (!buf) return -1; if (something_failed()) goto error; // citas darbības free(buf); return 0; error: free(buf); return -1; } Šajā piemērā goto izmanto, lai kopīgi apstrādātu kļūdu un atbrīvotu resursus vienā vietā — tas samazina kods dublikāciju.
Alternatīvas un labas prakses
- Mūsdienu augstākā līmeņa valodās bieži lieto
return,break,continue, izņēmumus (exceptions) vai mazas funkcijas/metodes, lai sasniegtu to pašu rezultātu drošāk un pārskatāmāk. - Ja izmantojat goto, dariet to taupīgi: ierobežojiet to uz skaidri definētām vietām (piem., kļūdu apstrādes bloks), dokumentējiet iemeslu un saglabājiet kodu lasāmu.
- Izmantojiet strukturētas programmas principus, sadalot funkcionalitāti loģiskās vienībās — tas bieži ļauj izvairīties no nepieciešamības pēc lēcieniem.
Kopsavilkumā — goto ir jaudīgs instruments, kas ļauj veikt tiešus lēcienus koda iekšienē. Tomēr tās izmantošana prasa piesardzību, jo tas var pasliktināt koda lasāmību un uzturēšanu. Struktūrētā programmēšana pierāda, ka goto nav obligāts, bet praktiskos un zema līmeņa scenārijos to var lietderīgi izmantot.
Izmantojiet
Goto izteikumu parasti izmanto kopā ar etiķeti. Etiķete ir vārds, kas identificē vietu kodā. Goto paziņojums kodā parasti izskatās šādi:
ieiet uz LABELŠajā piemērā dators pārietu uz atrašanās vietu LABEL.
Bieži vien goto izteikums tiek kombinēts ar if izteikumu. Šādā gadījumā dators pāries uz citu koda vietu tikai tad, ja kaut kas ir patiess. Piemēram:
IF nosacījums TAD iet uz LABELTo var lasīt kā "ja kāds nosacījums ir patiess, tad dodies uz vietu LABEL".
Dažādās programmēšanas valodās ir dažādi ierobežojumi vai ierobežojumi goto izteikumu izmantošanai. Piemēram, C programmēšanas valoda neļauj ar goto pāriet uz vietu, kas atrodas citā funkcijā (apakšprogrammā).
Jautājumi un atbildes
J: Kas ir goto paziņojums?
A: Goto ir veids, kā daudzās programmēšanas valodās pāriet uz citu koda rindu.
J: Cik daudzās programmēšanas valodās ir atbalstīts goto paziņojums?
A: Daudzas programmēšanas valodas atbalsta goto izteikumu.
J: Kurā programmēšanas valodā goto ir rezervēts vārds?
A: Java valodā goto ir rezervēts vārds, bet to nevar lietot.
J: Kas programmēšanas valodā ir rezervēts vārds?
A: Rezervēts vārds ir vārds, kas ir programmēšanas valodas sastāvdaļa un ko nevar izmantot citām lietām, piemēram, mainīgo nosaukšanai.
J: Kas ir strukturētas programmas teorēma datorzinātnē?
A: Strukturētās programmas teorēma ir teorija datorzinātnē, kas saka, ka jebkuru programmu var uzrakstīt tā, lai lietas tiktu veiktas ar funkcijām un metodēm, nevis ar vienu ļoti lielu programmu un goto paziņojumiem.
Vai strukturētās programmas teorēma pierāda, ka programmu rakstīšanai ir nepieciešami goto izteikumi?
Atbilde: Nē, strukturēto programmu teorēma pierāda, ka goto paziņojums nav nepieciešams, lai rakstītu programmas.
J: Kas ir funkcijas un metodes programmēšanā?
A: Funkcijas un metodes ir mazākas apakšprogrammas, ko izmanto programmēšanā, lai veiktu konkrētus uzdevumus.
Meklēt