j'ai passé 3/4h à chercher
et mon erreur venait de là!
final private int MODE_ADDPOINT=0;
final private int MODE_MOVEPOINT=1;
final private int MODE_REMOVEPOINT=2;
final private int MODE_INSERTPOINT=2;


) avec :
final private int MODE_ADDPOINT = ENUM_ZERO+1; final private int MODE_MOVEPOINT = MODE_ADDPOINT+1; final private int MODE_REMOVEPOINT = MODE_MOVEPOINT+1; final private int MODE_INSERTPOINT = MODE_REMOVEPOINT+1;
final private int MODE_ADDPOINT=0; // enum final private int MODE_MOVEPOINT=1; // enum final private int MODE_REMOVEPOINT=2; // enum final private int MODE_INSERTPOINT=3; // enum
Le problème reste le même.
(je parle d'expérience
)
smeet :
A. OK pour le "moins moche". Mais dans le cas d'une énumération courte, je conseille "ma" méthode. Car "ta" méthode présente l'inconvénient de ne pas supprimer les erreurs potentielles de copier collerLe problème reste le même.
B. Bon courage. NE pas oublier de faire une copie du projet avant de lancer un truc comme ça(je parle d'expérience
)
smeet
:Je ne vois pas en quoi c'est puissant que le langage t'initialise lui même tes varaibles avec des valeurs différentes. On suppose que t'es suffisamment intelligent pour le faire toit même.

] )
* n'utilise pas le typage (et donc le compilo n'y verra que du feu si tu intervertis MODE_MOVEPOINT et WEAPON_SHOTGUN dans l'ordre des args d'une fonction... [remarque, ça peut être un bon moyen de faire du code obfuscaté ça ] )
* t'oblige à tout définir manuellement, d'où risques d'erreurs à la con comme ./1
* ne fournit absolument aucune métadonnée, par exemple lorsque tu voudras écrire qqpart "je suis dans le mode InsertPoint", ben tu vas devoir réécrire une fonction (d'où risque d'erreur, et prise de tête parce que chaque identifiant apparaît 3x et pas une fois seulement, qui plus est à des endroits potentiellement loins dans le code, et en plus à chaque fois tu es obligé de rajouter un préfixe pour faire un nom unique, ce qui n'est pas nécessaire en C# puisque les enums sont dans leurs propre namespace)
smeet
:* n'utilise pas le typage (et donc le compilo n'y verra que du feu si tu intervertis MODE_MOVEPOINT et WEAPON_SHOTGUN dans l'ordre des args d'une fonction... [remarque, ça peut être un bon moyen de faire du code obfuscaté ça ] )Oui, je suis d'accord. Si tu veux faire une énumération propre, tu utilises les objets à ta disposition. Par extension, je dirais qu'on ne peut pas faire de la programmation "propre" en Java si on continue d'utiliser les types primitifs (celà dit, j'admets qu'ils sont bien pratiques ^^).
Sauf qu'en pratique, c tellement lourd qu'on reste sur le mauvais langage...
* t'oblige à tout définir manuellement, d'où risques d'erreurs à la con comme ./1Le problème ici vient du programmeur. Il n' existe pas encore de langage qui code à ta place. Alors si tu fais des erreurs cons, tu assumes, c'est pour ta pomme, et non pas la faute du langage. *

Si tu te plantes dans les offsets ou que tu déréférences pas alors qu'il fallait le faire, "tu assumes, c'est pour ta pomme" 

* ne fournit absolument aucune métadonnée, par exemple lorsque tu voudras écrire qqpart "je suis dans le mode InsertPoint", ben tu vas devoir réécrire une fonction (d'où risque d'erreur, et prise de tête parce que chaque identifiant apparaît 3x et pas une fois seulement, qui plus est à des endroits potentiellement loins dans le code, et en plus à chaque fois tu es obligé de rajouter un préfixe pour faire un nom unique, ce qui n'est pas nécessaire en C# puisque les enums sont dans leurs propre namespace)
rien compris...
enum Mode { AddPoint, MovePoint, RemovePoint, InsertPoint }
Mode mode;
string WhereAmI() {
return "je suis dans le mode "+mode;
}final private int MODE_ADDPOINT=0;
final private int MODE_MOVEPOINT=1;
final private int MODE_REMOVEPOINT=2;
final private int MODE_INSERTPOINT=3;
int mode;
String WhereAmI() {
String s="java sux";
if (mode==MODE_ADDPOINT)
s="ADDPOINT";
else if (mode==MODE_ADDPOINT)
s="ADDPOINT";
else if (mode==MODE_ADDPOINT)
s="ADDPOINT";
else if (mode==MODE_ADDPOINT)
s="ADDPOINT";
return "je suis dans le mode "+s;
}

Et comme Java ne fournit pas de struct
final private int MODE_ADDPOINT=0;
final private int MODE_MOVEPOINT=1;
final private int MODE_REMOVEPOINT=2;
final private int MODE_INSERTPOINT=3;
int mode;
String WhereAmI() {
String s="java sux";
if (mode==MODE_ADDPOINT)
s="ADDPOINT";
else if (mode==MODE_ADDPOINT)
s="ADDPOINT";
else if (mode==MODE_ADDPOINT)
s="ADDPOINT";
else if (mode==MODE_ADDPOINT)
s="ADDPOINT";
return "je suis dans le mode "+s; }

smeet
:Et comme Java ne fournit pas de structY'a un truc, ca s'appelle des classes.
) un moyen de faire des structures de données qui se comportent en tout point comme des "int", par exemple : allocation sur la pile/dans les registres et pas sur le tas, passage par valeur et non par référence, etc (et il se trouve que ces structures de données s'appellent struct). Si tu passes par une classe wrapper, alors tu vas te chopper tout l'overhead de la garbage collection : au lieu de stocker un entier sur 8, 16 ou 32 bits, tu vas être obligé de stocker un pointeur 32 bits, qui va lui-même devoir pointer sur un autre bloc de mémoire, lequel va probablement devoir contenir une virtual function table et la valeur qui t'intéresse. Donc il y a des chances que si tu veux optimiser ton prog et que tu n'aies pas de type struct, tu sois obligé de passer par des int...
final private int MODE_ADDPOINT=0;
final private int MODE_MOVEPOINT=1;
final private int MODE_REMOVEPOINT=2;
final private int MODE_INSERTPOINT=3;
int mode;
String WhereAmI() {
String s="java sux";
if (mode==MODE_ADDPOINT)
s="ADDPOINT";
else if (mode==MODE_ADDPOINT)
s="ADDPOINT";
else if (mode==MODE_ADDPOINT)
s="ADDPOINT";
else if (mode==MODE_ADDPOINT)
s="ADDPOINT";
return "je suis dans le mode "+s; }
Cette fonction ne sert à rien.
Et puis, si tu utilises des int, autant les utiliser comme index d'un array de string, non?
(et je ne parle même pas d'essayer d'insérer un élément au milieu, sachant que le nb de blancs qu'il doit y avoir entre 2 éléments de l'énum dépend de la position de cet élément, il faut tout refaire
)
Par ailleurs, en informatique, peut importe la taille des fichiers, c'est vraiment al derniere chose qui compte. Ce qui importe est, au choix, la rapidité, ou le haut-niveau.
Java est haut niveau. Ca prend beaucoup de lignes, c'est comme ca.
Bref, j'ai l'impression que tu cherches une argumentation pour descendre Java, mais il te faudrait un peu plus les travailler
Au contraire, c'est pas vraiment une critique sur Java puisque l'absence d'énum a été corrigée. C'est plutôt une critique sur le fait que tu dises que les énum sont inutiles...