Miten ohjelman suorituksen saa palaamaan tiettyyn kohtaan?
Jos olet vaikka break:illä hypännyt loopista pois niin palautuminen tapahtuu continue:lla.
Kirjoita toistettava osa silmukaksi (tai funktioksi). Gotoa ei tueta.
Älkää väheksykkää gotoa ;)
Esimerkiksi kun on kaksi sisäkkäistä silmukkaa ja pitäisi poistua molemmista sisäkkäisestä, niin break ei auta. Ilman gotoa joutuisi tekemään ylimääräisen muuttujan ja tarpeettoman ehtolauseeseen.
Toinen juttu, että tälläisiä tilanteita tulee harvoin.
Gotoa voi käyttää, mutta jos sinulla on about 10 goto-kohtaa koodissasi, se on aika spagettia. Tee jokin purkka silmukoilla ja funktioilla.
Gotoa voi kyllä käyttää juuri esim. kahdesta silmukasta poistumiseen, mutta hyvä perusperiaate on, että gotoa ei käytetä itse varsinaisen silmukan tekemiseen, tai siirtymiseen ohjelman osasta toiseen silloin, kun saman voisi tehdä selkeämmin ehtolauseella tai aliohjelmalla. Myös usemmasta silmukasta poistumisen voi tehdä ilman gotoa, mutta se tuottaa helposti gotoakin epäselvempää jälkeä.
Itsekin olen joskus törmännyt siihen ongelmaan että goto olisi ollut huomattavasti parempi ratkaisu, koska muuten olisi pitänyt kirjoittaa turhaa ohjelmakoodia.
Onneksi PHP:ssä on "break 4;" komento, eli hyppää esim neljän silmukan sisältä ulos.
Ihmettelen miksi gotoa väheksytään... ehkä aloittelijoiden takia sitä mustamaalataan? koska aloittelijathan saattavat käyttää pelkkää gotoa kaikkeen mahdolliseen toimintaan, jolloin koodista tuleekin helvetin epäselkeää.
Niinhän se taitaa olla, alottelijoille se voi olla helppo ymmärtää "Looppauskomentona", mutta väärinkäytettynä aiheuttaa koodin sekavuutta.
rndprogy kirjoitti:
Jos olet vaikka break:illä hypännyt loopista pois niin palautuminen tapahtuu continue:lla.
Olet ymmärtänyt väärin. continue ei ole sallittu loopin ulkopuolella. Oikeasti continue kertoo, että sitä seuraavat lauseet halutaan jättää suorittamatta, eli se siis "hyppää takaisin loopin alkuun".
En ole ollut tekemisissä continuen kanssa ja näin se tietysti on. Hätäpäissäni vastasin :P
Aihe on jo aika vanha, joten et voi enää vastata siihen.