Pipedija - tautosaka, gandai, kliedesiai ir jokios tiesos! Durniausia wiki enciklopedija durnapedija!
Goto to be considered harmful
Goto to be considered harmful - toksai straipsnis, kurį kažkada gal kokiais 1968 ar panašiais metais parašė toksai anuomet jau gan garsus programuotojas Edsger Dijkstra. Aname straipsnyje buvo aiškinama, kad Goto turi būti uždraustas, nes iš to vien šūdas gaunasi, o netgi kai ir ne šūdas būna, tai praktiškai niekas to nemoka naudoti, todėl to nešūdo nebūna. O todėl būna vien tik šūdas.
Kai tik straipsnis pasirodė, tai labai daugelis protestavo ir aiškino, kad niekaip to Goto neišvengsi, o ir iki šiolei atsiranda tokių aiškintojų, kurie sako, kad tipo esą Goto kažkaip tai esą kuo tai gerai ir atseit kuo tai reikalingas. Ale patikrinus, beveik visada paaiškėja, kad visi tie aiškintojai nesugeba net elementariausio ciklo ar procedūros parašyti.
Esminė Goto problema yra paprasta: jis nurodo eiti iš kokios nors programos vietos į kažkur, o į kur - visiškai niekur neaišku. Pati ta vieta, į kurią peršokama, daugeliu atvejų lieka niekaip neidentifikuojama ir nežinoma - ypač kalbose, kur peršokimui naudojamas tiesiog eilutės numeris, kaip kad Cobol, Fortran ar Basic. O netgi jei vieta ir identifikuojama ir žinoma, kaip kad Pascal, tai visvien būna pakankamai neaišku, iš kur ir kodėl į ją kažkas peršoka.
Rezultatas - jei tik remiamasi Goto peršokimais, tai gaunasi makaronų kodas, kur programa ne tik sunkiai perskaitoma ir suprantama, bet išvis neperskaitoma ir nesuprantama, nes visiškai neaišku, kas tenai vyksta ir kokia tenai logika, nes pagal vykdymo logiką viskas tėra kažkokie makaronai, kurie neaišku iš kur ir neaišku į kur einantys.
Kai Edsger Dijkstra rašė tą savo straipsnį, tai dar buvo daug diskusijų, kad gal visokios naujos programavimo kalbos, paremtos Algol idėjomis, yra nelabai gerai, nes sudėtinga tenai su visokiomis procedūromis, funkcijomis, ciklais ir taip toliau, nes tam reikia ir sudėtingo kompiliatoriaus, ir programuotojams visas tas konstrukcijas esą sunku išmokti. Tai šitus vėjus aiškindavo paprastai visokie seniai, kurie tą Goto labai aktyviai naudodavo ir jausdavosi gudrūs, nes paskui tą jų rašytą kodą kaip nors pataisyti būdavo neįmanoma, ir tik jie vieni galėdavo kažkaip susigaudyti tame, ką jie ten pridarė. Tai nesunku suprasti, kad po Dijkstra straipsnio, kuriame šis pasiūlė tiesiog uždrausti tą atsilupėlių Goto, kilo baisus fleimas su riksmais apie tai, kad jis nieko neišmano, visos programos dirbs labai lėtai ir bus visiškai blogai, ir niekas čia taip programuoti nemoka, vaikeli tu pats eik pasimokyk dar, jau kitus kartus dar dar, bet šitą kartą tai jau visai nusišnekėjai ir taip toliau.
Kietesni programuotojai gi šitą reikalą priėmė labai lengvai ir naujose programavimo kalbose nors Goto daugumoje ir išliko, bet vietoje jo visur naudojamos kitos konstrukcijos.
Tipiški pavyzdžiai:
- Procedūroms ar funkcijoms apibrėžti - naudojamos procedūros ir funkcijos, o ne sekos, kurios iškviečiamos, pereinant su Goto
- Ciklams apibrėžti - naudojami ciklai, o ne sekos, kurios sukasi su perėjimais, naudojant Goto
- Papildomam išėjimui iš ciklo naudojamas break operatorius, o ne Goto
- Bendram programos valdymui naudojamas programos dalinimas didesnėmis procedūromis/funkcijomis, o ne naudojant Goto
Gi kadangi kai kurios programavimo kalbos visgi neduoda normalių įrankių darbui be Goto, tai visvien iki šiol kartais tas Goto naudojamas, ir neišvengiamai. Tai tada yra gera praktika laikytis taisyklių:
- Visus taškus, į kur nueina Goto, sužymėti labeliais, ir prieš juos pastatyti komentarą, kuriame būtų išvardinama, iš kur gali būti nueinama
- Visus taškus, kur yra vykdomas Goto, sužymėti atitinkamais komentarais, irgi sužymint, kam Goto naudojamas: procedūrai, ciklui ar išėjimui
Bet kadangi tie, kas naudoja Goto, tokių taisyklių niekada nesilaiko, tai reikia pripažinti, kad Goto to be considered harmful, ir nėra čia ko aiškintis.