[Java] Goto command ??

Pagina: 1
Acties:

  • emkedouwe
  • Registratie: September 2001
  • Laatst online: 26-11-2021
Kan je in java ook gebruik maken van het GOTO command net zoals in basic ??
Dit zou bv erg handig zijn bij animaties.
Dus ik wil bv
code:
1
2
3
4
5
6
7
Hoi
if(xpositie < xeind)
  {
     xpositie++;
     repaint();
     goto hoi;
  }

  • [ti]
  • Registratie: Februari 2000
  • Niet online
ehm. ik weet dat dit gaat overkomen als een enorme flame, maar eh.. leer programmeren ;)

goto is gewoon ENORM not done, en heel erg vies.
code:
1
2
3
4
5
6
7
Hoi
if(xpositie < xeind)
  {
     xpositie++;
     repaint();
     goto hoi;
  }

kun je beter schrijven als:
code:
1
2
3
4
5
while (xpositie < xeind)
{
     xpositie++;
     repaint();
}

  • lvmeijer
  • Registratie: November 2001
  • Laatst online: 02-08 17:30

lvmeijer

www.leonmeijer.nl

goto is echt zo'n Visual Basic statement, maar wel erg handig!!!

VB -> lekker snel programma's maken via sleur en pleur en goed te begrijpen code. Zo vies is GOTO dus niet (vind ik)!

Verwijderd

Op zaterdag 22 december 2001 22:05 schreef lvmeijer het volgende:
goto is echt zo'n Visual Basic statement, maar wel erg handig!!!

VB -> lekker snel programma's maken via sleur en pleur en goed te begrijpen code. Zo vies is GOTO dus niet (vind ik)!
Je leert er alleen niet echt van programmeren.

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Hier vind je alle branch-statements in Java:

http://java.sun.com/docs/books/tutorial/java/nutsandbolts/branch.html

Je kunt dus wel een break doen naar een label... Ook kan je continue gebruiken om een iteratie af te breken. Of het fraai is, is een andere vraag :) .

Ik ga me niet in een discussie over goto mengen ;) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • MikeN
  • Registratie: April 2001
  • Laatst online: 13-09 17:41
Op zaterdag 22 december 2001 22:11 schreef mbravenboer het volgende:
[...]

Ik ga me niet in een discussie over goto mengen ;) .
* MikeN lekker wel.....

GOTO is natuurlijk hartstikke handig, je krijgt er eigenlijk alleen 2 problemen door:
  1. Je code wordt een zooitje: Als jij later je code nog een doorleest, dan snap je niet waarom je dat of dat nou hebt gedaan, dan blijkt het ineens dat er ergens een goto tussenstaan. En meer van dat soort dingen. Je maakt je code dus onleesbaar.
  2. Je leert niet proggen: Zoals Cheatah al zei, als je overal en altijd goto gebruikt, leer je totaal while for en dat soort dingen niet, dan kan lvmeijer wel zeggen dat het lekker makkelijk is, maar als je eenmaal de lussen kent, progt dat nog veel makkelijker.
Dus goto is gewoon een beetje fout ;)

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16:30

Janoz

Moderator Devschuur®

!litemod

De enige taal waarin goto 'done' is, is asembly :)..

Maar zeg nou zelf... Wat is mooier..

Dit:
code:
1
2
3
4
5
6
7
Hoi
if(xpositie < xeind)
  {
     xpositie++;
     repaint();
     goto hoi;
  }

of dit:
code:
1
2
3
4
5
while (xpositie < xeind)
  {
     xpositie++;
     repaint();
  }

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Infinitive
  • Registratie: Maart 2001
  • Laatst online: 14-09 09:56
Maar zeg nou zelf... Wat is mooier..

Dit:
...
of dit:
code:
1
2
3
4
5
while (xpositie < xeind)
  {
     xpositie++;
     repaint();
  }
Dit misschien :)
code:
1
2
 for (xpositie++; xpositie < xeind; xpositie++)
    repaint();

mmm. als die xpositie++ nu eens na de repaint had gestaan, had het pas mooi geweest, natuurlijk:
code:
1
for (; xpositie < xeind; xpositie++) repaint();

putStr $ map (x -> chr $ round $ 21/2 * x^3 - 92 * x^2 + 503/2 * x - 105) [1..4]


  • MikeN
  • Registratie: April 2001
  • Laatst online: 13-09 17:41
Op zaterdag 22 december 2001 23:43 schreef Infinitive iets met for loopjes
Ik zat erop te wachten :z

  • Steven
  • Registratie: December 2000
  • Laatst online: 14-09 10:15
goto = spaghetti programmeren = italiaans = Not done...


(wtf doet dat Italiaans er eigenlijk tussen >:))

  • MikeN
  • Registratie: April 2001
  • Laatst online: 13-09 17:41
Op zaterdag 22 december 2001 23:52 schreef Steven_NL het volgende:
(wtf doet dat Italiaans er eigenlijk tussen >:))
Wat heb je vanavond gegeten ;)...

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16:30

Janoz

Moderator Devschuur®

!litemod

Op zaterdag 22 december 2001 23:43 schreef Infinitive het volgende:

[..]

Dit misschien :)
code:
1
2
 for (xpositie++; xpositie < xeind; xpositie++)
    repaint();

mmm. als die xpositie++ nu eens na de repaint had gestaan, had het pas mooi geweest, natuurlijk:
code:
1
for (; xpositie < xeind; xpositie++) repaint();
Mwah.. Als het nog wat mooier moet zou ik het, aangezien het een animatie is en deze toch overal ongeveer hetzelfde zou moeten lopen, liever zo doen..
Eigenlijk had ik liever de verplaatsing van de tijd laten afhangen, maar aangezien de positie een geheel getal is en telkens met 1 wordt opgehoogd heb ik maar voor deze oplossing gekozen
frametime is het aantal ms per frame, en het is uit mijn hoofd, dus het kan zijn dat de methoden anders heten.
code:
1
2
3
4
5
6
7
8
9
10
for (; xpositie < xeind; xpositie++){
  starttime = System.getTimeInMilisec()
  repaint();
  try {
    Thread.sleep(Math.max(0,System.getTimeInMilisec()+frametime-starttime));
  }
  catch(exception e){
    //do nothing
  }
}

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

Op zaterdag 22 december 2001 22:11 schreef mbravenboer het volgende:


Ik ga me niet in een discussie over goto mengen ;) .
Hebben we eindelijk weer kans op een heerlijk flame topic en dan doe je niet mee :+

GOTO is not done, en getuigt van slecht design, daarom zit het niet in java. Het enige nuttige van Goto is uit een loop springen en dat zit er wel in (break, continue)

Iedereen die Goto nodig heeft in een programma is een slechte programmeur >:) ;)

  • _JGC_
  • Registratie: Juli 2000
  • Laatst online: 21:15
Hoe moet ik anders in assembly een loop maken?

En hoe moet ik anders DOS-batchscripts maken met loopjes? (ja, 4dos gebruiken: DO UNTIL, DO WHILE, FOR %D in *.* DO, etc)

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16:30

Janoz

Moderator Devschuur®

!litemod

Op zondag 23 december 2001 00:03 schreef _JGC_ het volgende:
Hoe moet ik anders in assembly een loop maken?

En hoe moet ik anders DOS-batchscripts maken met loopjes? (ja, 4dos gebruiken: DO UNTIL, DO WHILE, FOR %D in *.* DO, etc)
Maar ja... In batch scriptjes en assembly kun je ook niet 'netjes' en echt leesbaar programmeren :)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Infinitive
  • Registratie: Maart 2001
  • Laatst online: 14-09 09:56
tja, en met een try {} catch {} als vervanging van error recovery heb je de goto daar ook al niet meer voor nodig...

( \me gebruikt de laatste tijd geen goto meer :) )

Dan lijkt goto me alleen nog handig om uit geneste loopen te springen. Maar dat laatste komt mij tot nu toe eigenlijk nog niet voor.

putStr $ map (x -> chr $ round $ 21/2 * x^3 - 92 * x^2 + 503/2 * x - 105) [1..4]


  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

Op zondag 23 december 2001 00:15 schreef Infinitive het volgende:

Dan lijkt goto me alleen nog handig om uit geneste loopen te springen. Maar dat laatste komt mij tot nu toe eigenlijk nog niet voor.
en dat kan in Java gewoon met labels :+

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Nou vooruit dan, zal ff beetje meedoen ;) .
Janoz: De enige taal waarin goto 'done' is, is asembly :)..
Sterker nog: het is absoluut noodzakelijk :o . Alle gelikte for-while-foreach constructies worden gewoon omgezet naar jumps ;) .
Wasigh: hebben we eindelijk weer kans op een heerlijk flame topic en dan doe je niet mee
Sorry ;) . Ik heb niet echt een mening in deze zaak. Tegen lokale jumps in een imperatieve taal (die zuigen nl toch al ;) )heb ik niet erg veel omdat het een vokomen logische constructie is. Goto's die echt rare sprongen maken zouden natuurlijk verboden moeten worden ;) . Op zich heeft goto geen enkele nut omdat je alle logische operaties met de bekende loop-en-if-constructries kunt doen. Daarom vind ik het op zich wel een goede beslissing om goto niet in een taal op te nemen. De vrij algemene haat en verbanning van goto's vind ik echter wel iets overdreven zolang sprongen maar lokaal zijn.

Ik moet zeggen dat ik mezelf eigenlijk niet meer kan herrinneren dat ik goto nodig had. Ik heb ooit nog eens in Quick Basic geprogrammeerd en sindsdien heb ik het niet echt gemist ;) .

Nog een leuke discussie: wat is mooier, een recursie of een loop?

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • elnino
  • Registratie: Augustus 2001
  • Laatst online: 03-09 05:13
Helaas is het zo dat er wel situaties zijn, waarbij Goto misschien wel een efficiënte oplossing kan zijn, namelijk in loops waar je in één keer uit alle loops wilt springen (C/C++):
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// Let op: deze code is alleen bedoeld als voorbeeld.
// In plaats van i < 10 en i > 2 kunnen er natuurlijk ook
// andere expressies staan.
for(i = 0; i < x; i++)
{
  if(i < 10)
  {
    if(i > 2)
    {
    // En nu hier vanhieruit de for-loop breken...
    }
  }
}
// om hier naar toe te gaan

Er zijn volgens mij twee mogelijkheden:
  • Break gebruiken, en vervolgens i = x doen, zodat de loop niet meer true is, en dus gebroken wordt.
  • Goto gebruiken.
edit: Compounds en loops door elkaar gehaald |:( , een van if's moet een for-loopje zijn...

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 27-08 13:53

chem

Reist de wereld rond

wat dacht je van if (i < 10 && i > 2) ? of... if (2 < i < 10) ?

wat ik wil zeggen is dat GOTO echt heel erg not-done is meer 'tegenwoordig', en al HELEMAAL niet in Java... goddank bestaat er geen GOTO in PHP, anders zouden sommige newbie-scripts helemaal niet meer te harden zijn :P

Klaar voor een nieuwe uitdaging.


  • Tim
  • Registratie: Mei 2000
  • Laatst online: 23-07 15:18

Tim

Kan je dan niet gewoon "break 3" gebruiken?
Nog een leuke discussie: wat is mooier, een recursie of een loop?
Hangt ervanaf waar je het voor gebruikt natuurlijk, als ik een lange lijst van weetiknietwat onderelkaar moeten zetten lijkt een loop me handiger, maar als ik directories + subdirectories moet doorbladeren lijkt recursie me wel fijn :)

  • elnino
  • Registratie: Augustus 2001
  • Laatst online: 03-09 05:13
Op zondag 23 december 2001 11:42 schreef chem het volgende:
wat dacht je van if (i < 10 && i > 2) ? of... if (2 < i < 10) ?
Normaal staat er ook iets anders. Ik heb er niet voor niks een disclaimer bovengezet:
code:
1
2
3
// Let op: deze code is alleen bedoeld als voorbeeld.
// In plaats van i < 10 en i > 2 kunnen er natuurlijk ook
// andere expressies staan.

Het dient dus alleen als voorbeeld.

  • TlighT
  • Registratie: Mei 2000
  • Laatst online: 22-03 10:40
Op zondag 23 december 2001 11:37 schreef elnino het volgende:
Helaas is het zo dat er wel situaties zijn, waarbij Goto misschien wel een efficiënte oplossing kan zijn, namelijk in loops waar je in één keer uit alle loops wilt springen (C/C++):
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// Let op: deze code is alleen bedoeld als voorbeeld.
// In plaats van i < 10 en i > 2 kunnen er natuurlijk ook
// andere expressies staan.
for(i = 0; i < x; i++)
{
  if(i < 10)
  {
    if(i > 2)
    {
    // En nu hier vanhieruit de for-loop breken...
    }
  }
}
// om hier naar toe te gaan
Verkeerd voorbeeld? Een if-statement is namelijk geen loop, dus je kunt in bovenstaande voorbeeld gewoon een break gebruiken. Ik denk dat je dit bedoelt:
code:
1
2
3
4
5
6
7
8
9
for (i = x0; i < x1; i++) {
   for (j = y0; j < y1; j++) {
    if (some_condition) {
       goto done;
    }
   }
}
done:
// do finalization here

Je kunt dit natuurlijk wel anders doen:
  • een boolean variable gebruiken<li>de complete loop in een andere functie zetten en dan een return gebruiken >:)
</li>
Maar dan vind ik de goto manier eigenlijk duidelijker.

In Java kun je hier natuurlijk een labelled break voor gebruiken:
code:
1
2
3
4
5
6
7
8
9
outer_loop: 
  for (i = x0; i < x1; i++) {
     for (j = y0; j < y1; j++) {
      if (some_condition) {
         break outer_loop;
      }
     }
  }
// do finalization here

Hoera voor Java :)

Verwijderd

goto is samen met global de meest vieze commansd die er bestaan!!

  • emkedouwe
  • Registratie: September 2001
  • Laatst online: 26-11-2021
Inmiddels heb ik het FOR-statement en het DO-While statement geprobeert. Alleen mijn animatie werkt nog steeds niet :'(

Trouwens ik vind Visual basic ook 10x makkelijker dan JAVA. Maar JAVA is wel weer een beter opstap naar C++. Ik ben dit jaar bezig met JAVA op school en volgend jaar krijg ik C++ dus ik denk dat we daarom ook het eerste jaar JAVA moeten leren. Maar op de opleiding Bedrijfs informatica leren ze juist weer Visual basic(geen C++). Ik denk gewoon omdat het makkelijk is; Interface ontwerpen, database maken in access, koppelen, klaar

kijk maar op http://scanutil.cjb.net en om te downloaden op http://reboot.student.utwente.nl/~patrick/scanutil.zip dat is een programma die ik gemaakt had (met VB) voordat ik informatica ging doen

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 27-08 13:53

chem

Reist de wereld rond

Op zondag 23 december 2001 14:52 schreef GDOG het volgende:
goto is samen met global de meest vieze commansd die er bestaan!!
en brak nederlands is ook vrij brak: 'het' ipv 'de' :P

global is bij PHP al vrijwel niet meer nodig, dankzij de nieuwe scopes...

Klaar voor een nieuwe uitdaging.


  • Kees
  • Registratie: Juni 1999
  • Laatst online: 17:15

Kees

Serveradmin / BOFH / DoC
Ach.. goto is _wel_ de basis voor alle for/while etc lussen ;)
Verdiep je eens in ASM ;)

"Een serveradmin, voluit een serveradministrator, is dan weer een slavenbeheerder oftewel een slavendrijver" - Rataplan


  • Johannes
  • Registratie: Juni 2000
  • Laatst online: 14-09 23:09
Op zondag 23 december 2001 15:36 schreef emkedouwe het volgende:
Inmiddels heb ik het FOR-statement en het DO-While statement geprobeert. Alleen mijn animatie werkt nog steeds niet :'(

Trouwens ik vind Visual basic ook 10x makkelijker dan JAVA. Maar JAVA is wel weer een beter opstap naar C++. Ik ben dit jaar bezig met JAVA op school en volgend jaar krijg ik C++ dus ik denk dat we daarom ook het eerste jaar JAVA moeten leren. Maar op de opleiding Bedrijfs informatica leren ze juist weer Visual basic(geen C++). Ik denk gewoon omdat het makkelijk is; Interface ontwerpen, database maken in access, koppelen, klaar
* Johannes denkt dat je hiermee best wel op de ziel vande javahova's trapt, Java als opstapje naar C++ :D .

Uit volle borst op weg naar nergens / Zonder reden zonder doel
Met m'n zeden en m'n zonden / En mijn angstig voorgevoel
Laat mij mijn kont tegen de krib / Laat mij dit goddeloze lied
Hef jij je handen maar ten hemel / Maar red mij niet


Verwijderd

Persoonlijk heb ik Goto wel gebruikt, maar dat was in Cobol.
Het probleem met cobol is , is dat het geen functies kent die je met een return kunt verlaten.

Wat we deden , we maakten een perform block aan die scherm validaties deed en per fout een foutmelding onderaan het scherm lieten zien.

Dus om een ontontwarbare zooi van genestte if's te vermijden was het gebruikelijk alle mogelijke fouten langs te lopen en zodra er een werd gevonden het block via een goto ( aan het eind van datzelfde perform block te verlaten.

Dat werkt best wel netjes en is naar mijn mening nog steeds een van de weinige situaties waar goto toepasbaar en handig is.

Verwijderd

Persoonlijk vindt ik dat je GOTO verstandig en spaarzaam moet gebruiken, maar soms _moet_ je wel.
Bv. de error-handling in VB (voor zover je die zo kan noemen, want het steelt bar weinig voor :'(), dan MOET je wel goto gebruiken...
Maar Java is natuurlijk een heel ander verhaal...

  • elnino
  • Registratie: Augustus 2001
  • Laatst online: 03-09 05:13
Op zondag 23 december 2001 18:47 schreef KoenM het volgende:
Bv. de error-handling in VB (voor zover je die zo kan noemen, want het steelt bar weinig voor :'(), dan MOET je wel goto gebruiken...
We hadden het hier over nette code. (en VB valt daar niet altijd onder) :+

Maar even serieus: er zijn inderdaad situaties waarin Goto wel het efficiëntst is, bijvoorbeeld in de situatie die ik eerder genoemd heb, als je 2 of meer loops genest hebt, en je wilt uit beiden tegelijk springen, dan heb je, zoals ik daar toen ook al zei, 2 mogelijkheden, nl: Goto gebruiken, of een variabele aanpassen, zodat de expressie (in for/while/...) niet meer voldoet.
Pagina: 1