Har et script der hiver ud af en database og tjekker om tjek == "1" den SKAL være 1 hvis den ikke er en laver den en sleep(10); så vil jeg have den til at tjekke igen og hvis ikke sleep igen osv indtil den er 0 så kan den gå videre.
Hvordan kan det lade sig gøre? En anden form for løkke?
Du kan f.eks. bruge switch, eller en if-struktur. Goto er ...ikke pænt ;-)
switch ( $variabel ) { case "hej": echo "Værdien er 'hej'!"; break; case "med": case "dig": echo "Værdien er 'med' eller 'dig'!"; break; default: echo "Ukendt værdi: $variabel";
Det har ikke så meget med undskyldninger af gøre. Hvis man koder pænt og dokumenterer sin kode så er det ikke slemt at bruge goto. Hvis man koder dårligt kan det blive noget makværk. Nu ved jeg godt at folk bliver oplært med at råbe FY når folk nævner goto, men jeg synes virkelig ikke det er begrundet.
Det er da ikke et spørgsmål om undskyldninger - det er vel et spørgsmål om det aktuelle sprog og tilgængelighed.
For eksempel har jeg selv lavet et projekt med en supercompiler over et simpelt imperativt sprog. Det var "de-sugared" om man så må sige, så man brugte goto's (og dermed hale-rekursive kald) frem for løkker - det er lidt nemmere at parse og håndtere nemlig.
Generelt undgår jeg også at bruge dem, men det er fordi jeg skriver min kode hurtigere sådan. Labels og goto er en meget simpel måde at skrive kode på og simpelt er tit godt :)
Goto svarer da netop til halerekursion - altså hvor man ikke kan modtage eller viderebehandle data efter de rekursive kald - præcis som når man laver goto.
Og der blev valgt et goto-sprog, som ofte anvendes i partiel evaluering af imperative sprog - Flowchart Language.
Jeg siger blot, at "goto" ikke er ensbetydende med et grimt sprog eller dårlig kodeteknik - blot et udtryk for et sprog med meget simple kontrolstrukturer.
Hvorom alting er, bør man kun bruge goto hvis det er den "rigtige" løsning ;-)
Jeg synes dog stadig at det lyder som om du definerer goto som tail recursion... Sproget kræver understøttelse af procedurer og/eller funktioner for at kunne lave rekursion i det hele taget, og det er ikke engang alle af disse der understøtter rekursion :)
Jeg kom lige til at kigge lidt i php.internals nyhedsgruppen i går, og der er rent faktisk en der har skrevet et patch[1] der giver php goto's. Dog synes jeg ikke der er brug for det i et sprog der har exceptions, og desuden gerne (lidt) vil være et OO sprog.
Selvom det er en smule off topic som coderdk nævnte så synes jeg faktisk det er fint hvis goto-operatoren blev tilføjet permanent til sproget. Det gør det muligt for folk at skrive meget simple (og efter min mening) elegante script, eller de kan forstille at PHP er noget andet end det egentlig er og benytte exceptions og deres fantastiske objektivorienterede model.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.