Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2723 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  For ou while pour un iterateur ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

For ou while pour un iterateur ?

n°1957998
cimourdain
Posté le 14-01-2010 à 16:46:55  profilanswer
 

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.

mood
Publicité
Posté le 14-01-2010 à 16:46:55  profilanswer
 

n°1958014
MagicBuzz
Posté le 14-01-2010 à 17:09:00  profilanswer
 

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
n°1958024
MagicBuzz
Posté le 14-01-2010 à 17:43:16  profilanswer
 

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
n°1958025
fred777888​999
Posté le 14-01-2010 à 17:56:47  profilanswer
 

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.

n°1958051
Ricco
Retour au pays
Posté le 14-01-2010 à 23:28:56  profilanswer
 

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
n°1958458
cbeyls
Hail to the King, Baby
Posté le 17-01-2010 à 20:20:38  profilanswer
 

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.

n°1958509
cimourdain
Posté le 18-01-2010 à 11:30:10  profilanswer
 

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

n°1958633
cbeyls
Hail to the King, Baby
Posté le 19-01-2010 à 01:14:11  profilanswer
 

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.

n°1958656
MagicBuzz
Posté le 19-01-2010 à 09:11:03  profilanswer
 

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:

n°1958763
kuroro20
Posté le 19-01-2010 à 15:25:23  profilanswer
 

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.

mood
Publicité
Posté le 19-01-2010 à 15:25:23  profilanswer
 

n°1959190
MagicBuzz
Posté le 20-01-2010 à 17:21:59  profilanswer
 

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.

n°1959211
MEI
|DarthPingoo(tm)|
Posté le 20-01-2010 à 17:50:13  profilanswer
 

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 |
n°1959280
Ricco
Retour au pays
Posté le 20-01-2010 à 21:31:02  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  For ou while pour un iterateur ?

 

Sujets relatifs
Pb de boucle While avec 2 bases[débutant] iterateur
Problème avec boucle while qui ne s'arrêt pasboucle while
Comment faire deux while optimiséssendAndLoad // Boucle For + onRelease(valeur i)
Lancement de plusieurs commandes avec FOR les unes après les autres[Oracle & PHP] boucle if dans while : problème
Mise en forme d'une boucle while()probleme avec 2 mysql_fetch_assoc dans une seule while
Plus de sujets relatifs à : For ou while pour un iterateur ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR