Tuesday, June 07, 2011

#define atoi(str) Integer.parseInt(str)

J'ai beau essayer, essayer encore, y mettre de la bonne volonté, je ne comprends pas comment la version Java "Integer.parseInt(...)" peut être préférable à ma bonne vieille A(scii)TO()I(nteger). Les programmeurs sont supposés être des spécialistes. Celui qui trouve que strlen(itoa(42)) est obscur doit tout simplement pratiquer davantage et pas écrire un langage dans lequel il faille écrire new Integer(42).toString().length(), si ?

Je risque un deuxième coup de gueule contre Java the Hutt... Qui a été bourrer le crâne des gens au point que je me retrouve avec une classe Instances qui gère un vecteur de Instances, mais en donnant de nouveaux noms (numInstances(), enumerateInstances(), addInstance()) ? Hmmm ? Personne ne se dénonce? Eh bien vous serez tous privés de stdout! Tant pis pour vous.

J'ai peut-être bien été trop entrainé en secondaire à retenir "le sens" des choses plutôt que de retenir par coeur des phrases toutes faites ... Quant à dire que Java est le "langage plus simple qui crie pour sortir de C++", bin sorry, mais je ne ferai pas le pas: mes petits outils de conversion, ils resteront en PERL.

Bon, c'est pas tout ça, 'faut que je me replonge sur ce programme. Oh. length() n'est pas une méthode des tableaux, mais une ... euh. Une quoi, au fait? Rien d'autre dans Java ne semble se comporter de la même manière que args.length.

Tout n'est pas noir, dans Java, mais tout n'est pas rose non plus. Ils nous ont ajouté à la version 5 l'équivalent du foreach du PERL ... sympa et concis. Sauf que ça ne marche que sur les Iterators, qui avaient été introduits en remplacement des Enumeration -- dont les noms de méthodes avaient alors été jugés trop longs. Alors c'est vrai que getNextElement(), ça ne m'a jamais épaté, mais du coup, si j'utilise une bibliothèque (Weka ?) qui est restées aux Enumerations, je ne peux pas me servir de foreach >_<.

3 comments:

manuc66 said...

Au passage itoa peut être considéré comme obscur pour cette raison : "The itoa (integer to ASCII) function is a widespread non-standard extension to the standard C programming language...." (http://en.wikipedia.org/wiki/Itoa et http://www.delorie.com/djgpp/doc/libc/libc_517.html)

Et pour ce qui est du java : "new Integer(42).toString()" n'est pas la meilleur façon d'obtenir une instance d'une string représentant un entier : http://findbugs.sourceforge.net/bugDescriptions.html#DM_NUMBER_CTOR

PypeBros said...

personnellement, j'aurais tendance à utiliser snprintf() plutôt que itoa, c'est vrai ... ne serait-ce que pour pouvoir borner la taille utilisée ...

Pour ce qui est de Integer.valueOf(42) ... pas convaincu que ce soit "mieux" de conserver une représentation de tous ces Integers si le but est uniquement d'en avoir une représentation en chaîne ... mais ça fait plaisir de voir qu'ils ont ajouté une version qui fait prend un int depuis la dernière fois.

manuc66 said...

L'intérêt de "Integer.valueOf(42)" vient, en effet, essentiellement du fait qu'il ne crée pas d'instance Integer.