A goto vezérlés és a PHP
Mint ahogy blogmarkban is jeleztük, Sara Golemon a goto vezérlési lehetőség bevezetését javasolta a PHP 5 kódjába, mégpedig megnevezett kódpontokra való ugrás megoldásaként. A javaslat körül kialakult vitában egyesek szerint meglepően sokan nyilvánították ki pozitív véleményüket a goto bevezetését illetően. Lássuk miről is van szó!
Egy goto vezérlést használó for ciklus így nézne ki PHP 5-ben:A javaslat ellen fellépők leginkább Edsger W. Dijkstra: Go To Statement Considered Harmful című 1968-as írását emlegetik fel, illetve tanulmányaikra hivatkoznak, melyek arra engednek következtetni, hogy a goto használata nem jó ötlet, nehezen kezelhető kódhoz vezet.
A goto pártolói ellenben azt mondják, hogy az eszközt rosszul használók okozhatnak problémát. Gondolhatunk egy csákányra, melyet jó és rossz célokra egyaránt fel lehet használni, és ez az alkalmazón múlik. Maga a rossz felhasználási lehetőség ténye nem jelenti azt, hogy el kell felejteni az eszközt. A goto pozitívumai között említik a hibakezelésnél előnyös természetét, a nyelvi elemzők írásakor elfoglalt fontos szerepét, és gyorsan működő vezérlések megvalósításában vitathatatlan hasznát.
A két oldal között oda-vissza sorolhatnánk az érveket, ehelyett érdemes áttekinteni a két tábor blog bejegyzéseit. Ellenzi: Jeff Moore, John Lim. Támogatja: Wez Furlong, Alan Knowles. A teljes levelezőlista szál az internals lista archívumában is olvasható, még változatosabb véleményekkel.
■ Egy goto vezérlést használó for ciklus így nézne ki PHP 5-ben:
<?php
$counter = 0;
loop:
echo ++$counter . "<br/>\n";
if ($counter < 10) {
goto 'loop';
}
?>
A goto pártolói ellenben azt mondják, hogy az eszközt rosszul használók okozhatnak problémát. Gondolhatunk egy csákányra, melyet jó és rossz célokra egyaránt fel lehet használni, és ez az alkalmazón múlik. Maga a rossz felhasználási lehetőség ténye nem jelenti azt, hogy el kell felejteni az eszközt. A goto pozitívumai között említik a hibakezelésnél előnyös természetét, a nyelvi elemzők írásakor elfoglalt fontos szerepét, és gyorsan működő vezérlések megvalósításában vitathatatlan hasznát.
A két oldal között oda-vissza sorolhatnánk az érveket, ehelyett érdemes áttekinteni a két tábor blog bejegyzéseit. Ellenzi: Jeff Moore, John Lim. Támogatja: Wez Furlong, Alan Knowles. A teljes levelezőlista szál az internals lista archívumában is olvasható, még változatosabb véleményekkel.
hogy is mukodne?
Komolyabban: nyugodtan bevezethetnek, maximum aki nem akarna, az nem hasznalna :)
Nah a kerdesem: ha tenyleg bevezetnek, akkor ugy mukodne, mit a pascalban, vagyis odaugrana az ertelmezo, ahova kell, es onnantol futna a kod a vegeig, vagy csak az elso "?>"-ig, vagy kezzel kene kijelolni a programresz veget(akkor olyan lenne, mint egy egyszeru fuggveny), vagy meddig es hogyan? :)
Lokális goto
Tehát a mostani javaslat szerint egy függvényből a másikba vagy globális részről függvénybe nem tudnál ugrani, csak adott környezetben definiált pontokra.
megint goto - megint a régi érvekkel
Érdekes megfigyelni azt is, h. a támogatók között sokan képzett - nem feltétlenül/elsősorban - PHP-ban programozók (erős C hatást érzek), és kifejezetten speciális felhasználási területeket emlegettek a
goto
felhasználására.Tény, hogy a
goto
ütközik a struktúrált programozási paradigma néhány ismérvével:if, while, for, switch
.goto
-val ez megsérül.goto
kiküszöbölhető vezérlési szerkezet alkalmazásával, ennél fogva feleslegesen duzzasztja a nyelvi eszközök halmazát, amiből nehezebb kiválasztani a legcélszerűbbet. (Néha ez nem is annyira triviális, mint ahogy elsőre gondolnánk!) Bár mindez akadémikusan hangzik, gondoljunk az 1. pontra! (és még sok másra)Ennek ellenére vannak tényleg olyan esetek, ahol a
goto
természetesebben hat, mint bármelyik más vezérlési szerkezet, vagy nagyságrendekkel hatékonyabb lehet. Főként erről szóltak a támogatók által javasolt felhasználási területek.Ajánlom mindeki figyelmébe a Programtervezés c. könyvet a Kiskapu-tól, ahol körültekintően összegyüjtötték az érveket pro és kontra. Ha ezt mindenki elolvasná és figyelembe venné, nyugodtan be lehetne építeni a nyelvbe.