Goto commando in Perl

Pagina: 1
Acties:

Onderwerpen


  • VulcanRaven
  • Registratie: Januari 2007
  • Laatst online: 11-09 18:56
Beste Tweakers,

Ik hoop dat dit bericht hier goed geplaatst is en anders mijn excuses ervoor!

Ik moet voor school een simpel Perl script maken. Aan het einde van het script moet ik weer teruggaan naar het invoerscherm in het begin. Nu heb ik dit script gemaakt en heb ik gebruik gemaakt van het "goto" command en dit werkt prima. Helaas mogen we dit commando absoluut niet gebruiken van onze docent.
Nu is mijn vraag, is er een alternatief voor dit commando? Ik heb ernaar gezocht maar ik kan het helaas niet vinden. Ik ben een beginner met perl en scripten dus misschien dat ik verkeerd zoek.

Alvast bedankt voor de hulp,

VulcanRaven

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Goh, weer zo'n "goto is evil"-moraalridder.

Kun je de invoer niet in een loop opvragen en verwerken?

Maar kijk ook bijvoorbeeld eens hier en hier. Mail de links maar aan je docent.

[ Voor 45% gewijzigd door CodeCaster op 23-09-2010 18:58 ]

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


  • TrailBlazer
  • Registratie: Oktober 2000
  • Laatst online: 10-09 18:35

TrailBlazer

Karnemelk FTW

code:
1
2
3
4
5
$continue=1;
while ($continue) {
doe programma
$continue=<>;
}

[ Voor 31% gewijzigd door TrailBlazer op 23-09-2010 19:11 ]


  • VulcanRaven
  • Registratie: Januari 2007
  • Laatst online: 11-09 18:56
Dat met een loop zal ik eens gaan opzoeken hoe ik dat het beste kan doen.

Ik zal mijn docent de links geven :P

iig al bedankt voor de hulp :)

  • VulcanRaven
  • Registratie: Januari 2007
  • Laatst online: 11-09 18:56
TrailBlazer schreef op donderdag 23 september 2010 @ 19:07:
code:
1
2
3
4
5
$continue=1;
while ($continue) {
doe programma
$continue=<>;
}
Dat was het commando dat ik zocht! Heel erg bedankt :)

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 13:10
De standaardvormen om code in een eindeloze lus uit te voeren, zijn:
Perl:
1
2
3
for (;;) {
// code hier
}

En:
Perl:
1
2
3
while (1) {
// code hier
}
CodeCaster schreef op donderdag 23 september 2010 @ 18:56:
Goh, weer zo'n "goto is evil"-moraalridder.
Hoewel goto niet altijd evil is, lijkt er hier geen noodzaak toe. Als je een oneindige lus wil, schrijf dan ook een lus. Dat heeft als voordeel dat het vanaf het begin duidelijk is dat een stuk code herhaald wordt, terwijl je met een label en een goto statement minder goed kan zien of en waar er precies naar het begin wordt teruggesprongen.

Dit soort misbruik van goto, waar meer gestructureerde constructies volstaan, is precies waarom goto considered harmful steeds herhaald wordt. Niet omdat goto per se evil is, maar omdat het een statement is dat door beginners te pas en te onpas misbruikt wordt.

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 13:10
TrailBlazer schreef op donderdag 23 september 2010 @ 19:07:
code:
1
2
3
4
5
$continue=1;
while ($continue) {
doe programma
$continue=<>;
}
Als dit is wat je wil (inclusief een regel lezen dus), dan kun je dat simpeler zo schrijven:
Perl:
1
2
3
do {
   // code hier
} while (<>)

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

CodeCaster schreef op donderdag 23 september 2010 @ 18:56:
Goh, weer zo'n "goto is evil"-moraalridder.
Er zijn vast uitzonderingen maar ook in Perl kan ik me niet voorstellen dat zo'n simpel idee als inloggen per se een goto nodig zou hebben. De standaard loop- en branche-structuren zijn makkelijker te debuggen. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Je zal mij ook niet horen zeggen dat goto vaak een goede oplossing is, of dat het voorkeur heeft boven andere manieren van flow control, maar de docent is pertinent tegen goto en heeft niet aan TS duidelijk kunnen maken waarom niet dus ik denk even de andere kant te laten zien :)

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 13:10
Aan het niveau te zien geeft die docent een introductiecursus programmeren. Dan kan ik me best voorstellen dat je van je studenten vraagt dat ze bepaalde constructies niet gebruiken totdat ze de basis goed beheersen. Ik neem aan dat de opdrachten ook zo gekozen zijn dat ze gemaakt kunnen worden met de behandelde stof. Het voorbeeld van de TS is een typisch voorbeeld waarvan ik denk dat een for/while-lus volstaat en dus te verkiezen is boven goto.

Tijdens zo'n inleidende cursus kun je mijns inziens dus prima beperkingen opleggen (in dit geval: geen goto gebruiken) als dat het leerproces bevordert. Dan wordt je als student gedwongen om beter na te denken over hoe je je programma handig kan structuren. Daar lijkt mij niets mis mee.

  • HuHu
  • Registratie: Maart 2005
  • Niet online
CodeCaster schreef op donderdag 23 september 2010 @ 19:24:
Je zal mij ook niet horen zeggen dat goto vaak een goede oplossing is, of dat het voorkeur heeft boven andere manieren van flow control, maar de docent is pertinent tegen goto en heeft niet aan TS duidelijk kunnen maken waarom niet dus ik denk even de andere kant te laten zien :)
Ik zeg tegen m'n studenten ook dat goto niet goed is. Als ze net beginnen met programmeren, het verschil tussen een while en een for nog niet kennen, hoe wil jij ze dan uit gaan leggen in welke situaties je wel en geen goto mag gebruiken? Ik ben van mening dat je in het begin beter gewoon "nee" kunt zeggen en als ze er aan toe zijn de "tenzij ..." erachteraan plakken. Anders wordt het allemaal veel te moeilijk.

  • VulcanRaven
  • Registratie: Januari 2007
  • Laatst online: 11-09 18:56
Het is idd een beginnerscursus. Het is het 1e van 3 vakken en dit is pas de 3e opdracht.

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

HuHu: het is net zo makkelijk om te zeggen dat goto in veruit de meeste gevallen ondergeschikt is aan andere flow control en dat het voor de opdrachten voor het betreffende vak niet nodig is zonder direct te zeggen dat het per definitie fout is. :P

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • HuHu
  • Registratie: Maart 2005
  • Niet online
Ik zeg ook niet dat het fout is, maar dat het niet goed is. En dat ze beter andere code kunnen gebruiken.

Een studente kwam eens naar me toe met echt hele lelijke code, die wel werkte, maar ik zei toch dat het niet goed was (het kon worden vervangen door een paar simpele regels code). Daarop zei zij: "maar het geeft toch het goede antwoord?" Waarop ik antwoordde: "std::cout << "5,7"; geeft ook het goede antwoord, maar dat maakt het nog niet goed."

Zo'n vergelijking kun je ook maken voor de goto. Het is niet fout, want het doet wat je moet doen, maar dat maakt het nog niet goed. En ik wil dat mijn studenten goed worden 8-).

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Mja, maar op het moment dat iemand naar je toe komt met "de oplossing" en hij gebruikt daarin een goto, dan moet je IMO wel uitleggen waarom goto niet goed is. Ik ken zo heel veel mensen die zeggen dat goto per definitie fout is, dat eval evil is en dat je absoluut geen tables mag gebruiken en in plaats daarvoor voor CSS moet kiezen. Zonder redenering gaan ze het als definitieve waarheid zien, en da's net zo slecht als de aanname dat het wél goeie tools zijn die je te pas en te onpas kan gebruiken. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1