![Citation](https://forum.developpez.be/images/misc/quote_icon.png)
Envoyé par
Pragmateek
Et les développeurs sans assez de recul et de maturité qui y goûtent on tendance à l'utiliser partout.
Je vois régulièrement ce genre de code :
for (var i = 0; i < n; ++i)
Et c'est clairement n'importe quoi, on ne gagne même pas un caractère, on a juste obfusqué le code. :/
Je ne suis pas d'accord avec toi, et je ne vois pas quel est lien avec la maturité. Ceci pour deux raisons :
- Si on est pas capable de savoir que dans ce cas i sera de type int, alors y'a quand même un souci
![:aie:](https://www.developpez.net/forums/images/smilies/aie.gif)
- Ca ne change rien, puisque qu'on mette explicitement int ou var on utilise le même nombre de lettres, et au-delà de cet argument que certains qualifieront de futile, on se retrouve bien avec un type int au final. C'est juste une question de préférence personnelle
Sur le projet sur lequel je bosse actuellement, nous avons beaucoup de généricité, donc on se retrouve parfois avec des appels du genre (j'ai mis n'importe quoi, c'est juste pour l'exemple) :
IGenericObject<MaClasseA, IDictionary<MaClasseB, MaClasseC>> myVariable1 = new IGenericObject<MaClasseA, IDictionary<MaClasseB, MaClasseC>>();
Ca prend déjà la moitié de la ligne ! Et en plus si on en a plusieurs d'affilé, c'est pas très sexy visuellement :
1 2 3
| IGenericObject<MaClasseA, IDictionary<MaClasseB, MaClasseC>> myVariable1 = new IGenericObject<MaClasseA, IDictionary<MaClasseB, MaClasseC>>();
IEnumerable<IDictionary<MaClasseA, MaClasseB>> myVariable2 = new IEnumerable<IDictionary<MaClasseA, MaClasseB>>();
IEnumerable<IEnumerable<IDictionary<MaClasseA, IDictionary<MaClasseB, MaClasseC>>>> myVariable3 = new IEnumerable<IEnumerable<IDictionary<MaClasseA, IDictionary<MaClasseB, MaClasseC>>>>(); |
Personnellement, je pense qu'il vaut mieux avoir un truc un peu plus lisible, et qui donne le même résultat :
1 2 3
| var myVariable1 = new IGenericObject<MaClasseA, IDictionary<MaClasseB, MaClasseC>>();
var myVariable2 = new IEnumerable<IDictionary<MaClasseA, MaClasseB>>();
var myVariable3 = new IEnumerable<IEnumerable<IDictionary<MaClasseA, IDictionary<MaClasseB, MaClasseC>>>>(); |
Surtout qu'il suffit de survoler la variable pour connaître son type en cas de doute.
Mais bon encore une fois, c'est une question de préférence et éventuellement de norme de codage définie sur un projet. Au final, ça revient strictement au même.
Partager