For ou while pour un iterateur ?

For ou while pour un iterateur ? - Java - Programmation

Marsh Posté le 14-01-2010 à 16:46:55    

Salut,
 
La question est débile, mais vous préférez écrire:
 

Code :
  1. Iterator it = maListe.iterator();
  2. while(it.hasNext()) {
  3. }


 
ou:
 

Code :
  1. for(Iterator it = maListe.iterator(); it.hasNext(); ) {
  2. }


 
?
 
Moi j'écrivais de la deuxième façon mais deux de mes chefs me disent que c'est mal, sans donner d'argument (a part un qui dit que son prof lui mettait 0 si il utilisait la "mauvaise" façon).
Moi mon argument c'est: avec for on a un iterateur qui a une portée de boucle ce qui est bien puisqu'il ne sert que la.

Reply

Marsh Posté le 14-01-2010 à 16:46:55   

Reply

Marsh Posté le 14-01-2010 à 17:09:00    

Ben au pire, tu fais :

 
Code :
  1. {
  2.  Iterator it = maListe.iterator();
  3.  while (it.hasNext()) {
  4.  }
  5. }
 

Et du coup ton iterator il a une portée pas plus grande [:magicbuzz]
Ou alors tu utilises un bloc with (il me semble que ça existe en java non ?)

 

Quant à l'argument du CP, super, même moi j'ose pas en faire des comme ça :D

 

A première vue, je préférais la première syntaxe, mais effectivement, la seconde me semble bien plus propre.

 

Ok, j'interviens plus dans la cat Java :D


Message édité par MagicBuzz le 14-01-2010 à 17:13:06
Reply

Marsh Posté le 14-01-2010 à 17:43:16    

En fait, je persiste et signe, du coup je continue ma contribution à la cat Java...

 

Faisant du C#, je m'interrogeais sur l'absence du "foreach" en Java (c'est quand même plus joli...)

 

Et je suis tombé là dessus :

 

http://java.sun.com/j2se/1.5.0/doc [...] reach.html

 

Bon, après je maîtrise pas le truc, mais... Ce serait pas mieux quand même comme syntaxe ? En tout cas, l'article insiste bien dessus... Et vu que c'est la doc officielle...

 

Seule limite, comme en C#, tu peux pas t'en servir pour changer le nombre d'éléments dans ta liste.

 

PS : Au pire, ça confortera ta position vis à vis du for, puisqu'ils ne mentionnent pas la syntaxe du while, qui semble hors concours ;)


Message édité par MagicBuzz le 14-01-2010 à 17:46:06
Reply

Marsh Posté le 14-01-2010 à 17:56:47    

cimourdain a écrit :


...
Moi j'écrivais de la deuxième façon mais deux de mes chefs me disent que c'est mal, sans donner d'argument (a part un qui dit que son prof lui mettait 0 si il utilisait la "mauvaise" façon).
Moi mon argument c'est: avec for on a un iterateur qui a une portée de boucle ce qui est bien puisqu'il ne sert que la.


Ton chef a beaucoup de temps libre probablement et cherche a se faire mousser.  
Comme il ne peux visiblement pas le faire par sa competence, il le fait avec des arguments qu'au mieux j'appelerai navrants.
Si ca pose un probleme de l'ecrire d'une facon ou d'une autre, change de boite, les deux sont completement equivallents et devraient etre lus avec la meme facilite par tout developpeur dont l'intelligence depasse l'oursin.

Reply

Marsh Posté le 14-01-2010 à 23:28:56    

Lol j'aurai tendance à interdire les notations en 1 ligne parce que j'ai pas l'habitude d'en écrire et que pê du coup je trouve ça moins facile à lire.
 
Maintenant j'ai toujours déteste les iterator et depuis que j'ai connu les for each je n'utilise que ça.


---------------
"L'informatique n'est pas plus la science des ordinateurs que l'astronomie n'est celle des télescopes." Michael R. Fellows & Ian Parberry
Reply

Marsh Posté le 17-01-2010 à 20:20:38    

Salut,
 
Je suis du même avis que toi cimourdain: la 2e notation réduit le scope de l'itérateur. De nombreux sites sur Internet utilisent d'ailleurs cette notation.
 
Effectivement elle n'est peut-être pas très "jolie", c'est pourquoi on a inventé le foreach, qui est implémenté en java depuis la version 1.5 sortie en 2004. Pour ton exemple cela donne ceci:
 

Code :
  1. for(Bidule b : maListe) {
  2. }


 
En pratique, le compilateur traduit le foreach par ta 2e méthode, donc une boucle for avec un Iterator déclaré localement, mais la syntaxe est beaucoup plus sympa.

Reply

Marsh Posté le 18-01-2010 à 11:30:10    

Je peux pas faire de for each parce qu'on est en Java 1.4 dans ma boite ! ;)

Reply

Marsh Posté le 19-01-2010 à 01:14:11    

Il faut faire pression sur tes supérieurs et leur dire qu'on est en 2010! Parce que Java 1.4 ça date de 2002 je crois, et Java 1.5 de fin 2004 donc c'est quand même stable et mature comme technologie.

Reply

Marsh Posté le 19-01-2010 à 09:11:03    

D'un autre côté, si je ne m'abuse, il y a eu pas mal de modifications entre 1.4 et 1.5, du coup le code 1.4 n'est pas 100% compatible avec 1.5 si ? Il me semble avoir entendu parler de quelques incompatibilités.
Du coup sur un gros projet, je conçois que personne n'ait envie d'endosser la charge de travail liée à la conversion... Le gens préfèrent gaspiller tout le temps un peu plutôt que de dépenser beaucoup une seule fois :spamafote:

Reply

Marsh Posté le 19-01-2010 à 15:25:23    

Euh je pense pas qu'il y aie eu tant de changement que ca,  certes il y a eu les generics, et le code déja fait sera plein de warning dans un compilo 1.5 , mais je vois pas pourquoi ca ne compilerait plus.

Reply

Marsh Posté le 19-01-2010 à 15:25:23   

Reply

Marsh Posté le 20-01-2010 à 17:21:59    

C'était juste une supposition, il me semblait avoir entendu parler de changements de syntaxe, ou éventuellement de namespace, je ne sais pas. Un peu comme quand .NET est passé de 1.1 à 2.0 > Le code ne compilait partiellement plus, certains appels à des fonctions du framework ayant été déplacés, renommés ou modifiés.

Reply

Marsh Posté le 20-01-2010 à 17:50:13    

cbeyls a écrit :

Salut,
 
Je suis du même avis que toi cimourdain: la 2e notation réduit le scope de l'itérateur. De nombreux sites sur Internet utilisent d'ailleurs cette notation.
 
Effectivement elle n'est peut-être pas très "jolie", c'est pourquoi on a inventé le foreach, qui est implémenté en java depuis la version 1.5 sortie en 2004. Pour ton exemple cela donne ceci:
 

Code :
  1. for(Bidule b : maListe) {
  2. }


 
En pratique, le compilateur traduit le foreach par ta 2e méthode, donc une boucle for avec un Iterator déclaré localement, mais la syntaxe est beaucoup plus sympa.


C'est quand même typiquement le cas ou un while/do-while est très largement plus adapté pour la clarté du code. Sans foreach je crois qu'il faut quand même mieux avoir un while et un porté un peu plus grand qu'un force qui fait mal fini.
 
Perso j'ai toujours appris que les deux étaient interchangeables, et jamais sanctionné en cours, mais parfois il faut laisser allé le bon sens plus que l'optimisation primaire.
 
Pour finir, pour ceux que ça gène le plus, sauf si en Java ce n'est pas pareil, entourer le bloc d'instruction pas des {} limitera de toutes façons la portée. (le cas en C/C++)


---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
Reply

Marsh Posté le 20-01-2010 à 21:31:02    

Tiens je viens d'apprendre un truc, ça marche aussi en Java ...  
 
Moi qui croyait qu'on pouvait mettre des accolades comme ça sans incidences ... [:lqmqh]


---------------
"L'informatique n'est pas plus la science des ordinateurs que l'astronomie n'est celle des télescopes." Michael R. Fellows & Ian Parberry
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed