php 5.3-tól van goto

Sziasztok!

Biztos jót tesz egy eddig goto mentes nyelvnek (pontosabban a benne írt programkódok átláthatóságának) a goto?

http://en.wikipedia.org/wiki/Php#PHP_5.3_and_newer

Egykori tanáraim arra oktattak, hogy átláthatatlan programkódhoz vezet a goto, erősen javallt a kerülésük.
A bemutatott példa is gyakorlatilag ennyi lett volna értelmesen:

while (flock($file, LOCK_EX & LOCK_NB)) {
. . sleep(1); // hogy más szálnak is adja oda a procit a lock feloldásának várása közben.
}
Erre most azt látom, hogy a PHP-ba is belerakták a goto lehetőségét.

Bár a PHP-t sokan "tanulónyelv" szintjén kezelik, sok is az ittragadt alapszintű kódgányoló. De akkor is, miért rontják el még jobban a nyelvet?

Vagy csak én látom helytelennek a goto bevezetését?
Netán pont jó lesz ez felvételi tesztnek? Mondván aki a goto-t megtűri a kódban, az kódgányoló és nem programozó.

Hozzászólások

A goto az nem minden esetben, feltetlenul rossz. Ld. pl. a Java goto kezeleset.

A PHP standard libraryja, es a nyelvi elemei nagyon nem konzisztensek (ami miatt a PHP programkodot legtobb esetben nehezebb olvasni, mint a "szebb" nyelvekben irtat).

Volt valahol egy topic mostanaban pont arrol, hogy mi a rossz a PHP-ben, keresd meg.

A goto "nem oszt, nem szoroz" mar..

A goto akkor zavaro, ha ide-oda ugralsz vele a kodban.

Sokaig, amig nem volt a nyelvben sem exception, sem goto, hibakezelesnel ilyeneket lathattal:


while(true)
{
  //itt valamiket csinalunk, pl. megnyitunk egy file-t
  if(hiba)
    break;
  //valamiket meg csinalunk, pl. olvasunk a file-bolm bezarjuk

  break; //kilepunk a "ciklusbol"
}

Ennel szebb lett volna egy if(hiba) goto xy.
Az egymasbaagyazott if()-ek meg a fentinel is rosszabbak olvashatosag szempontjabol.

--
I hate conspiracy theorists. I'm sure they're all working together somehow to bring down society.

jaja, nagyobb if-else dzsungel helyett elegansabb egy returndzsungel

amugy a peldadban a while(true) eleve felesleges, egy valtozoval is lehetne jelezni, hogy a kovetkezo resz teljesuljon-e, pl.


int w=0;
//itt valamiket csinalunk, pl. megnyitunk egy file-t
if(hiba) { w=1; }
if (w==0)
  {
  //valamiket meg csinalunk, pl. olvasunk a file-bolm bezarjuk
}

vagy meg elegansabb, ha hiba() eleve egy return intes fuggveny, ami hiba eseten 1-et ad:


//itt valamiket csinalunk, pl. megnyitunk egy file-t
if(hiba()<1)
  {
  //valamiket meg csinalunk, pl. olvasunk a file-bolm bezarjuk
}

Egy rendes programozó, ha nincs goto, akkor implementálja a lehetőségeihez mérten.


int ctr=0;
int i=0;
while(ctr<10000)
{
	switch(ctr)
	{
		case 10: printf("Hello GOTO World!\n"); break;
		case 20: i++; break;
		case 30: if(i<10) ctr=9; break;
		default: break;
	}
	ctr++;
}

Donald E. Knuth egy könyvében (Structured Programming with Goto Statements) rávilágított arra, hogy a "goto" utasítás használata veszélyes, és ezért ezt kerülni kell.
Ugyanebben a könyvében azonban egy vicces történetet is közöl:
"1971-ben, az IFIP konferenciáján volt szerencsém összefutni a japán Dr. Eiichi Goto nevű úrral, aki tréfásan panaszkodott, hogy őt mindenki kerülni igyekszik."

--
A főnököm mindig megtartja amit ígér, ha pénzt ígér azt is!