recherche info sur goto break et continu en java ... [ JAVA ] - Java - Programmation
Marsh Posté le 06-11-2001 à 21:22:21
une aide sur les labes svp.
bon voila je suis dans une boucle qui elle meme est dans un try catch qui lui meme est dansune boucle .
ca donne:
do {
try{
...
do{
...
}while(teste);
}catch (Exception e){ ... break erreur;}
}while(teste);
...
...
...
erreur:
...
...
...
voila donc s il ya un probleme je veux atteindre lelabel erreur:
donc a laide du break.
( s il y aune autreméthode je suis intéressé. ).
et a la compilation, jbuilder me dit que le label erreur n estpas définit ( a ce moment la il pointe l erreur au niveau du break ) et je vois pas du tout comment faire ou ou est le probleme.
merci.
Marsh Posté le 06-11-2001 à 21:49:24
Clarkent a écrit a écrit : une aide sur les labes svp. bon voila je suis dans une boucle qui elle meme est dans un try catch qui lui meme est dansune boucle . ca donne: do { try{ ... do{ ... }while(teste); }catch (Exception e){ ... break erreur;} }while(teste); ... ... ... erreur: ... ... ... voila donc s il ya un probleme je veux atteindre lelabel erreur: donc a laide du break. ( s il y aune autreméthode je suis intéressé. ). et a la compilation, jbuilder me dit que le label erreur n estpas définit ( a ce moment la il pointe l erreur au niveau du break ) et je vois pas du tout comment faire ou ou est le probleme. merci. |
Ben ce n'est pas tres beau ça...
Ne me fais pas trucs comme ça à l'exam, ou bien je vais être obligé de t'allumer
Marsh Posté le 06-11-2001 à 21:54:01
Bon pour répondre à ta question...
Les labels s'utilisent comme ça:
label1:for (...) {
for (...) {
break label1;
}
}
Tu ne programmes pas en VB ici, donc les goto etc..., tu oublies... Si tu veux faire des trucs propres, tu utilises des exceptions à toi que tu lèves explicitement...
genre:
try {
for (...) {
for (...) {
throw new MyErreurException("patati" );
}
}
} catch (MyErreurException mee) {
//fais ce que tu veux ici
}
Bonne prog...
Marsh Posté le 06-11-2001 à 22:52:02
alors pour ceux qui n aiment pas les goto et autres labels:
http://penserenjava.free.fr/pens/indexMain_04&04.htm
ensuite faut arreter avec cette phobie jutilise car a m est indispensable ici, sur uncode enorme que j essaye de modifier ( on la continue sans moi ) un cas arrive constamment jene peux pas faire ca sous forme de methode car la methode me ramene ou je l ai appelle et faut absolument que la servlet se termine ici et non ailleur ou qu elle s amuse a continuer, bein sur je peux le faire sous forme de teste, mais quand on compte qu il va y avoir 200 testes suplementaires ( oui 200 ) a la place d un simple goto bein on dis pas la meme chose.
le got n est pas aime car on s embrouille tres vite si celui il y en a plusieurs c est vrai ( jai fait du VB et je sais ce que c est , d ailleur jen ai quasiement pas utilise ) mais la il n y a qu un seul label.
et le goto mal aime il est explique dans le lien au dessus, le pourquoi il n est pas aime.
parfois on fait comme on peut et la dans d autre circonstances je me serais debrouille autrement mais quand il y a 200 cas similaires et que ces 200 cas ont une maniere unique de ce termine je vais pas m amuser a faire 200 if.
sinon c est le boulot d une dactylo.
je voudrias bien leve mespropres exception, ou appeller une methode, mais il faut que le servlet s arrete ou tout du moins qu elle arrive a la fin lorsque l erreur est produite, et pour bien faire il aurait fallu que la servlet soit detruite, malheureusement je n y arrive pas, j appelle la methode destroy(), mais bein ellen execute que ce qu il y a dans le corps de cette methode et non ne detruit la servlet.
a moins que vous ayez une methode qui puisse me permettre de rejoindre la fin du code sans probleme.
et les conditions j en ai 200 alors pas de teste merci .
Marsh Posté le 07-11-2001 à 00:00:14
et alors ce pb avec les goto c est quoi ?
j attends quand meme.
je sais pas mais en assembleur ( j en ai fait ) y a quasiement que ca et les programmes assembleurs ne meurent pas, n empeche entre le c est pas beau j aimerai savoir ou est le pb des goto ou break label etc ...
a part une phobie de celui ci, seul un prof d info que j aime pas du tout, je lui ai parle des goto en vb et ca reaction fut faut pas utiliser, je lui dit ouais j avais remarquer sauf dans certain cas et il m a demande pourquoi fallait pas en utiliser et je lui ai dit car ca devient vite le bordel et il est tout a fait ok il avait franchement rien contre.
les goto et les mythes de l informatique, ils ont pas la peste.
c est un peu comme tout quand on s en sert mal ca fou le bordel, sinon tout est nocif.
avec 200testes je crois que le code sera encore plus bordelique .
Marsh Posté le 07-11-2001 à 07:54:16
Mets des exceptions... C'est vachement plus clair...
Maintenant, pourquoi tu veux couper ta servlet? Parce que generalement, c'est quelque chose qui ne se fait pas trop... Surtout, pourquoi virer les acces a une page (ta servlet), et pas aux autres (les autres servlets)? ton site va se retrouver dans un etat plutot incoherent.
Si tu veux killer toutes les servlets, c'est autre chose. Un System.exit(0) devrait faire l'affaire. Mais la, plus de service du tout!!!
Marsh Posté le 07-11-2001 à 07:57:48
BaNZai a écrit a écrit : Mets des exceptions... C'est vachement plus clair... Maintenant, pourquoi tu veux couper ta servlet? Parce que generalement, c'est quelque chose qui ne se fait pas trop... Surtout, pourquoi virer les acces a une page (ta servlet), et pas aux autres (les autres servlets)? ton site va se retrouver dans un etat plutot incoherent. Si tu veux killer toutes les servlets, c'est autre chose. Un System.exit(0) devrait faire l'affaire. Mais la, plus de service du tout!!! |
si il y a certain robleme il est preferable que je vire tout, avec un jolie message comme quoi le service est nnaccessible et voila finish, apres faut revenir plus tard .
au fait j arrive pas a tester si j ai une conection a la base ou non, enfin si j y arrive avec les exceptions, mai j aurais prefere dans certain cas effectue un tete ca m aurait ete moins couteux.
Marsh Posté le 07-11-2001 à 08:36:08
Clarkent a écrit a écrit : si il y a certain robleme il est preferable que je vire tout, avec un jolie message comme quoi le service est nnaccessible et voila finish, apres faut revenir plus tard . au fait j arrive pas a tester si j ai une conection a la base ou non, enfin si j y arrive avec les exceptions, mai j aurais prefere dans certain cas effectue un tete ca m aurait ete moins couteux. |
Ben tu peux faire une methode qui essaie de faire un acces a la base:
public boolean testDB(Connection conn) {
try {
Statement st = conn.createStatement();
st.execute("Select sysdate from dual" );
st.close();
return true;
} catch (SQLException s) {
return false;
}
}
mais c'est plutot degueulasse comme maniere de faire... Vu que quoiqu'il arrive, tu devras quand meme prendre en compte les exceptions lorsque tu attaqueras la BD...
Marsh Posté le 07-11-2001 à 10:49:52
Beurk ... Que c'est laid et en plus on trouve des articles qui disent que le GOTO est à utiliser dans certains cas !!
Enfin, je ne comprends toujous pas pourquoi il est autorisé, peut être pour des personnes comme toi.
Simplement je pense qu'un objet bien implémenté ne doit pas posséder de GOTO. Le While, break je comprends mais déjà je classerai le continue comme le goto.
Ami développeurs ou architectes objets, ayez des implémentations propres !!
Marsh Posté le 07-11-2001 à 12:16:02
Break c'est "arrete completement la boucle", continue c'est "arrete cette iteration de la boucle, et continue a l'iteration suivante". C'est donc tout a fait propre si ca ne sert pas a remplacer un mecanisme d'exception (d'ailleurs on ne fait pas des break et des continue ou on veut, sinon y'aurait pas de difference notable avec un goto)
goto quant a lui est un mot reserve du langage, mais non utilise (dans une prochaine implementation du JDK ). Bien malin celui qui pondra du code avec des gotos dedans ... je serais curieux de voir les articles dont tu parles
[edtdd]--Message édité par Gonzoide--[/edtdd]
Marsh Posté le 07-11-2001 à 16:28:15
Les articles => les liens cités plus haut ...
Marsh Posté le 07-11-2001 à 16:44:06
Bandenabos a écrit a écrit : Les articles => les liens cités plus haut ... |
"Bien que goto soit un mot réservé de Java, on ne le trouve pas dans le langage ; Java n'a pas de goto." (exactement ce que je disais un peu plus haut) ... alors "des articles qui disent que le GOTO est à utiliser dans certains cas", je demande toujours a voir
En plus, NON, break/continue ne fonctionnent pas comme un goto ... les versions avec labels servent juste a sortir de boucle imbriquees, ce qui ne change pas la structure du flot d'execution d'un programme => rien a voir avec un goto.
[edtdd]--Message édité par Gonzoide--[/edtdd]
Marsh Posté le 07-11-2001 à 17:10:32
Oups, je sais plus où était le lien que j'ai trouvé aujourd'hui mais c'est celui ci :
http://penserenjava.free.fr/pens/indexMain_04&04.htm
Avec la phrase croustillante : "Comme il est habituel en de semblables situations, la voie du milieu est la plus indiquée. Le problème n'est pas d'utiliser le goto, mais de trop l'utiliser - dans quelques rares situations le goto est réellement la meilleure façon de structurer le flux de programme."
Marsh Posté le 07-11-2001 à 19:56:49
tu sites le page cite au dessus et tu me sites moi la .
sinon quand c est soit le goto soit 200 lignes en plus y a de quoi pleurer enfin non pas 200 lignes 200 testes supplementaires.
c est laid car tu n as pas vu le code derriere.
un code simple a comprendre c est parfois mieux qu un truc super jolie et incomprehensible.
sinon le goto propre pas propre mais ca veut dire quoi ???
ca veut rien dire du tout, cest moins explicite si c est utilise a outrance ou genre on fait comme si lelangage quel on utilise est de l assembleur, lma je suis ok c est con,mais dire que cest pas propre ...
Banzai > ouais j ai pense a ca mais je truove ca aussi tres degueux, je pensais plutot aune fonction qui me retournait si c est ok ou pas, enfin je verais si j ai besoin, normalement non mais je verais.
Marsh Posté le 05-12-2001 à 09:13:28
Désolé de rester camper sur mes positions mais le goto est à banir. La preuve, je travail sur un projet de 700 classes et aucun goto !! Pourtant le objets sont déjà de haut niveau et la seule barrière pour comprendre est celle de la modélisation objet.
Je persiste en disant que, dans un langage objet (ou autre) le goto n'a pas de raison d'être si ce n'est de faciliter le coding pour des personnes n'étant pas capable de réaliser un implémentation objet. Voilà mon avis mais je ne t'empêche pas de penser ce que tu veux !!
Marsh Posté le 05-12-2001 à 10:00:44
Je suis d'accord. Le goto est clairement à Banir. Il doit etre utilisé lorsqu'on utilise deux boucles et qu'on doit sortir des deux boucles en une seule instruction.
Pour le reste il faut pas l'utiliser!
enfin c'est mon avis
Marsh Posté le 12-01-2002 à 04:03:30
Bandenabos a écrit a écrit : Désolé de rester camper sur mes positions mais le goto est à banir. La preuve, je travail sur un projet de 700 classes et aucun goto !! Pourtant le objets sont déjà de haut niveau et la seule barrière pour comprendre est celle de la modélisation objet. Je persiste en disant que, dans un langage objet (ou autre) le goto n'a pas de raison d'être si ce n'est de faciliter le coding pour des personnes n'étant pas capable de réaliser un implémentation objet. Voilà mon avis mais je ne t'empêche pas de penser ce que tu veux !! |
tiens je fais une ptite recherche global et je tombe la dessus .
mais bon faut pas voir le demon dans el goto.
la le pb etait que c etait deja programme et fallait rajoute des fonctionnalites.
j allais aps retaper les 5 milles lignes de codes.
jenepouvais pas ca a ete programmé ainsi fallait que je fasse avaec.
et rajoutez 300 testes ce st plutto galere.
enfinj ai totu arranger avec un traitement d exception simplifiez va t on dire .
mais bon la c etait pas dns le but de developpez avec un goto mais plus de la maintenance de quelque chose pas clair du tout.
Marsh Posté le 12-01-2002 à 14:22:43
pourquoi t'utilises pas la réponse de banzai (4e réponse de ce topic).
Ca commence à faire un petit moment que je fais du Java, et je n'ai JAMAIS eu besoin ou même envie de faire un goto.
tu veux que ta servlet ne fonctionne plus et affiche un message d'erreur dans un cas bien précis ? La méthode simple et propre c'est que :
1) tu déclares une variable de classe de type booléen yAUneErreur dans ta servlet
2) tu entoures le code de tes méthodes doGet et doPost d'un gros try/catch qui récupère (catch) une exception que tu auras créée.
A l'intérieur de ta servlet, lorsque tu rencontres le cas d'erreur, tu "throw" cette exception. L'execution de ta servlet sera alors rompu et reprendra à l'endroit du catch.
Dans le catch tu mets affecte true au booléen yAUneErreur (la variable de classe).
Au début des méthodes doGet et doPost tu vérifies la valeur du booléen. Si c'est true, tu affiches un message d'erreur, si c'est false tu fais ton traitement habituel.
C'est simple. c'est propre. et je vois pas l'intérêt du goto.
[edtdd]--Message édité par benou--[/edtdd]
Marsh Posté le 12-01-2002 à 14:29:29
Oui mais les servlets de Clarkent, elles sont spéciales.
Y a une seule classe, avec plein de méthodes static dont bcp font plus de 200 lignes.
Marsh Posté le 12-01-2002 à 15:42:23
Verdoux a écrit a écrit : Oui mais les servlets de Clarkent, elles sont spéciales. Y a une seule classe, avec plein de méthodes static dont bcp font plus de 200 lignes. |
Ca ne m'étonne pas vraiment
[edtdd]--Message édité par DarkLord22--[/edtdd]
Marsh Posté le 12-01-2002 à 15:46:46
Clarkent a écrit a écrit : alors pour ceux qui n aiment pas les goto et autres labels: http://penserenjava.free.fr/pens/indexMain_04&04.htm ensuite faut arreter avec cette phobie jutilise car a m est indispensable ici, sur uncode enorme que j essaye de modifier ( on la continue sans moi ) un cas arrive constamment jene peux pas faire ca sous forme de methode car la methode me ramene ou je l ai appelle et faut absolument que la servlet se termine ici et non ailleur ou qu elle s amuse a continuer, bein sur je peux le faire sous forme de teste, mais quand on compte qu il va y avoir 200 testes suplementaires ( oui 200 ) a la place d un simple goto bein on dis pas la meme chose. le got n est pas aime car on s embrouille tres vite si celui il y en a plusieurs c est vrai ( jai fait du VB et je sais ce que c est , d ailleur jen ai quasiement pas utilise ) mais la il n y a qu un seul label. et le goto mal aime il est explique dans le lien au dessus, le pourquoi il n est pas aime. parfois on fait comme on peut et la dans d autre circonstances je me serais debrouille autrement mais quand il y a 200 cas similaires et que ces 200 cas ont une maniere unique de ce termine je vais pas m amuser a faire 200 if. sinon c est le boulot d une dactylo. je voudrias bien leve mespropres exception, ou appeller une methode, mais il faut que le servlet s arrete ou tout du moins qu elle arrive a la fin lorsque l erreur est produite, et pour bien faire il aurait fallu que la servlet soit detruite, malheureusement je n y arrive pas, j appelle la methode destroy(), mais bein ellen execute que ce qu il y a dans le corps de cette methode et non ne detruit la servlet. a moins que vous ayez une methode qui puisse me permettre de rejoindre la fin du code sans probleme. et les conditions j en ai 200 alors pas de teste merci . |
C'est pas un probleme de Goto ou de servlet ou de 10000 tests clarckent. Ton probleme c'est que tu ne maitrise pas les outils et les méthodes que Java te propose.
Va lire un bouquin c'est déjà la dixieme fois que je te le dis (et regarde plus particulièrement pourquoi le try catch est une alternative au if .. else if de C / C++
A+
[edtdd]--Message édité par DarkLord22--[/edtdd]
Marsh Posté le 12-01-2002 à 16:17:14
j'ai modifié mon précédant message pour le rendre plus clair.
Je pense sincérement que la réponse à ton problème est dans ce post => jette-y un coup d'oeil.
Je pense aussi que ma signature peut te servir
Marsh Posté le 06-11-2001 à 11:38:42
jaipas tout compris aleur fonctionnement, mais j en aibesoin car je dois plusieurs fois atteindre le meme morceau de code suivant lees exectption qui auront eteprovoque et tout ca dans des boules, donc des qu il ya un pb, enfin plus precisement des que celui ci se sera provoque deux fois ala suite hop je passe aun morceau de code, donc je sorts de la boucle et jarrives aun certain point ou il ya quelques instructions a faire puis le code se termine comme ca, mais apparament ce ne st pas possible car unlabel ne doit etre que devant une boucle ou je saispas quoi enfin j ai apspiger, alors si vous pouviez m eclairer .
---------------
"PAR LE POUVOIR DU CRÂNE ANCESTRAL, JE DETIENS LA FORCE TOUTE PUISSANTE".