[JAVA] Méthode pour tester si une variable est initialisée ?

Méthode pour tester si une variable est initialisée ? [JAVA] - Java - Programmation

Marsh Posté le 10-10-2002 à 20:58:39    

Bonjour,
 
Je suis en train d'écrire un petit prog Java où j'utilise les arguments args[].
 
Voici le début:
 
public class Test {
 
public static void main (String args[]) {
Infos Uneinfo = new Infos(args[0],Integer.parseInt[args[1]);
...
 
 
Dans la classe Infos, j'ai écris 3 constructeurs selon le nombres d'arguments passés.
 
public class Infos {
 
public Infos() {...}
public Infos(String Nomville) {...}
public Infos(String Nomville, Int Habitant) {...}
...
 
 
A l'éxecution, je me prends une ArrayIndexOutOfBoundException.
Ce qui me parait logique vu que je tente d'utiliser des variables qui sont dans certains cas non initialisées.
 
Je voudrais donc savoir s'il existe une méthode permettant de renvoyer l'argument s'il existe ou rien dans la cas contraire, dy style:
 
Infos Uneinfo = new Infos(args[0].ifExist(),Integer.parseInt[args[1]);
 
Merci d'avance...
 
 


---------------
"Nous allons reformater les français" © Nicolas Sarkozy
Reply

Marsh Posté le 10-10-2002 à 20:58:39   

Reply

Marsh Posté le 10-10-2002 à 21:05:48    

Ben tu testes la longueur de args[]...

Reply

Marsh Posté le 10-10-2002 à 21:11:34    

J'y ai pensé mais ça me fait 3 if, je voudrais savoir si une méthode testant la présence existe ?
 


---------------
"Nous allons reformater les français" © Nicolas Sarkozy
Reply

Marsh Posté le 10-10-2002 à 21:47:04    

tu fais une gestion d'execption avec un try{ ton truc }
puis un  
catch( nom de l'exception ) { le bordel si ton truc n'est pas initialisé }
 
 
 
ne me demande pas trop de détails, je suis un manche pour ce genre de trucs
ton exception sera "IndexOutOfBoundsExeption"

Reply

Marsh Posté le 10-10-2002 à 21:53:09    

kfman a écrit a écrit :

J'y ai pensé mais ça me fait 3 if, je voudrais savoir si une méthode testant la présence existe ?



Mouais, enfin c'est franchement pas la mort de faire 3 if... Sinon passe par un switch ... case :D

Reply

Marsh Posté le 10-10-2002 à 22:03:18    

SirJeannot a écrit a écrit :

tu fais une gestion d'execption avec un try{ ton truc }
puis un  
catch( nom de l'exception ) { le bordel si ton truc n'est pas initialisé }
 
 
 
ne me demande pas trop de détails, je suis un manche pour ce genre de trucs
ton exception sera "IndexOutOfBoundsExeption"



ARGH  
 
NE L'ECOUTEZ PAS


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
Reply

Marsh Posté le 10-10-2002 à 22:09:25    

--greg-- a écrit a écrit :

ARGH  
 
NE L'ECOUTEZ PAS



[:rosebud]

Reply

Marsh Posté le 10-10-2002 à 22:20:33    

Tu fais 3 if et puis c'est tout !
 
Des oifs en voulant faire du "beau" code, tu perds en efficacité ...
Comment agir différemment en fonction de trois valeurs possibles ...
Y a pas à aller cherche bien loin, tu fais 3 if, ou un switch ... et c'est tout !!
 
Et surtout pas d'exception ...
 
l'utilisation des exceptions doit rester exceptionnelle


Message édité par bobuse le 10-10-2002 à 22:20:46
Reply

Marsh Posté le 10-10-2002 à 22:30:05    

bobuse a écrit a écrit :

Tu fais 3 if et puis c'est tout !
 
Des oifs en voulant faire du "beau" code, tu perds en efficacité ...
Comment agir différemment en fonction de trois valeurs possibles ...
Y a pas à aller cherche bien loin, tu fais 3 if, ou un switch ... et c'est tout !!
 
Et surtout pas d'exception ...
 
l'utilisation des exceptions doit rester exceptionnelle




 
 
Oui papa :D
 
Mais pour ma culture générale, j'aimerai qd même savoir si la méthode existe :D


---------------
"Nous allons reformater les français" © Nicolas Sarkozy
Reply

Marsh Posté le 10-10-2002 à 22:35:15    

:??: J'ai du mal à voir l'utilité d'une telle fonction ...
 
sinon, ce que tu peux faire, c'est faire un constructeur qui prend en paramètre ton tableau de paramètres ... :/

Reply

Marsh Posté le 10-10-2002 à 22:35:15   

Reply

Marsh Posté le 10-10-2002 à 22:46:38    

bobuse a écrit a écrit :

 :??: J'ai du mal à voir l'utilité d'une telle fonction ...
 
sinon, ce que tu peux faire, c'est faire un constructeur qui prend en paramètre ton tableau de paramètres ... :/




 
En fait, je veux envoyer le paramètre seulement s'il existe... ou ne rien envoyez sinon.
 


---------------
"Nous allons reformater les français" © Nicolas Sarkozy
Reply

Marsh Posté le 11-10-2002 à 00:09:58    

kfman a écrit a écrit :

 
En fait, je veux envoyer le paramètre seulement s'il existe... ou ne rien envoyez sinon.




non ca n'existe pas. Et c'est pas plus mal !

Reply

Marsh Posté le 11-10-2002 à 00:13:09    

SirJeannot a écrit a écrit :

 [:rosebud]  




 [:benou] c'est quoi cet histoire ???
 
Tu trouves ca intelligent de répondre des conneries aux gens ? Ca n'a vraiment rien de drôle et ca va à l'encontre du but du forum.
 
le prochain coup tu t'abstient de poster !

Reply

Marsh Posté le 11-10-2002 à 01:01:59    

benou a écrit a écrit :

 
 [:benou] c'est quoi cet histoire ???
 
Tu trouves ca intelligent de répondre des conneries aux gens ? Ca n'a vraiment rien de drôle et ca va à l'encontre du but du forum.
 
le prochain coup tu t'abstient de poster !
 



moi je mdemande s'il etait pas serieux :o
y'a des gens qui font vraiment ça [:totoz] si si :/


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
Reply

Marsh Posté le 11-10-2002 à 09:24:07    

benou a écrit a écrit :

 
 [:benou] c'est quoi cet histoire ???
 
Tu trouves ca intelligent de répondre des conneries aux gens ? Ca n'a vraiment rien de drôle et ca va à l'encontre du but du forum.
 
le prochain coup tu t'abstient de poster !
 



je fais comme ca aussi  :D
edit: en général, j'initialise la variable avant de l'utiliser  :o , pour voir si elle a été modifié par autre chose  :kaola:


Message édité par Profil supprimé le 11-10-2002 à 09:24:54
Reply

Marsh Posté le 11-10-2002 à 09:24:35    

SirJeannot a écrit a écrit :

je fais comme ca aussi  :D  



[:totoz]


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
Reply

Marsh Posté le 11-10-2002 à 09:27:04    

--greg-- a écrit a écrit :

[:totoz]



mais chui un pied sur ce que j'ai dit, mais c'est une idée qui me venait...
ceci dit je préfère mon bidouillage  :D

Reply

Marsh Posté le 11-10-2002 à 09:32:45    

SirJeannot a écrit a écrit :

mais chui un pied sur ce que j'ai dit, mais c'est une idée qui me venait...
ceci dit je préfère mon bidouillage  :D  



[:tapai]


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
Reply

Marsh Posté le 11-10-2002 à 09:34:40    

--greg-- a écrit a écrit :

[:tapai]



:hap:
je parlais de celle là
edit: en général, j'initialise la variable avant de l'utiliser  :o , pour voir si elle a été modifié par autre chose  
 
ceci dit, mis à part à gestion d'erreur, je ne voyais pas autre chose   :( , dsl

Reply

Marsh Posté le 11-10-2002 à 09:34:59    

--greg-- a écrit a écrit :

[:totoz]




ouais ... ca fait peur !  :(

Reply

Marsh Posté le 11-10-2002 à 09:38:31    

benou a écrit a écrit :

 
ouais ... ca fait peur !  :(  



dsl, je ne suis pas un maitre en java non plus
ceci dit j'aurai trouvé nimporte quel moyen pour ne pas utiliser les exceptions :D

Reply

Marsh Posté le 11-10-2002 à 10:31:19    

--greg-- a écrit a écrit :

ARGH  
 
NE L'ECOUTEZ PAS




 
Mouais et bien moi je dirais qu'il a tout a fait raison (dans l'absolu) si tu estimes que le cas ou la variable n'est pas initialisee est rare et que tu cherches a gagner en efficacite en evitant certains traitements : c'est une approche optimiste du probleme.
 
La gestion de l'exception est lourde oui, mais vu qu'elle arrive rarement on prefere s'eviter un tas de ifs (meme 3 s'ils sont executes plusieurs dizaines de milliers de fois) inutiles la pluspart du temps.
 
Enfin bon la on retombe dans l'optimisation. ;)
 
Sinon : je ferais egalement ces 3 if...

Reply

Marsh Posté le 11-10-2002 à 10:39:38    

bobuse a écrit a écrit :

 
l'utilisation des exceptions doit rester exceptionnelle




 
Non : elles doivent etre utilisees a bon escient et il faut pouvoir justifier leur utilisation.
 
La seule chose qu'il faut savoir est qu'une exception generee signifie qu'une usine a gaz se met en route. Si l'on n'y fait pas attention les performances chuttent etc...
 
La programmation par exceptions est extremement utile et permet de gagner en efficacite, ainsi que de simplifier certains problemes dans des cas bien precis.
 
Sans rester de le cas precis qui nous interesse, je trouve que les developpeurs en general on tendance a ne pas assez utiliser des exceptions "fait maison" pour regler leurs problemes.
 
Mais ca c'est comme le reste : IMHO ;)

Reply

Marsh Posté le 11-10-2002 à 11:42:38    

phenixl a écrit a écrit :

 
 
Mouais et bien moi je dirais qu'il a tout a fait raison (dans l'absolu) si tu estimes que le cas ou la variable n'est pas initialisee est rare et que tu cherches a gagner en efficacite en evitant certains traitements : c'est une approche optimiste du probleme.




Les exceptions sont pas faites pour améliorer les perfs !
 
les utiliser dans ce but est une abération !

Reply

Marsh Posté le 11-10-2002 à 11:53:24    

Pourtant, les spécialistes te confirmeront que le code :

Code :
  1. for (int i = 0; i < 100000; i++) {
  2.   tab = ....
  3. }

est moins rapide que :

Code :
  1. int  i = 0;
  2. try {
  3.   while (true) {
  4.     tab[i] = ....
  5.     i++;
  6.   }
  7. }
  8. catch (ArrayIndexOutOfBoundsException e) {
  9.   // Ne rien faire, on a juste fini de parcourir le tableau.
  10. }


 
edit> Ce n'est pas que je tienne absolument à être désagréable, mais "[i]aberration" s'écrit avec deux 'r'... ;)


Message édité par BifaceMcLeOD le 11-10-2002 à 11:54:31
Reply

Marsh Posté le 11-10-2002 à 12:01:59    

Cependant, benou, je suis d'accord qu'utiliser une exception pour sortir d'une boucle, c'est franchement sale. Par contre, cela peut être bon à savoir pour détecter les tests inutiles. Du genre :

Code :
  1. class ListOfPerson {
  2.   private List  maListe;
  3.   ...
  4.   protected Person getPerson(int index) {
  5.     if (index < 0  ||  index >= this.maListe.size()) {
  6.       throw new MonException(...);
  7.     }
  8.     return (Person) this.maListe.get(index);
  9.   }
  10. }


Ici, le test sur l'index est probablement inutile, surtout si la probabilité d'erreur est vraiment faible (vous remarquerez que la méthode n'est pas publique). Il est sans doute préférable d'écrire :

Code :
  1. class ListOfPerson {
  2.   private List  maListe;
  3.   ...
  4.   protected Person getPerson(int index) {
  5.     try {
  6.       return (Person) this.maListe.get(index);
  7.     }
  8.     catch (ArrayIndexOutOfBoundsException e) {
  9.       throw new MonException(...);
  10.     }
  11.   }
  12. }

Reply

Marsh Posté le 11-10-2002 à 13:21:04    

:heink: Ha bon ? T'as des sources ?
Et c'est valables qqsoit i ? ... bizarre quand même !

Reply

Marsh Posté le 11-10-2002 à 13:42:32    

bobuse a écrit a écrit :

:heink: Ha bon ? T'as des sources ?
Et c'est valables qqsoit i ? ... bizarre quand même !




 
oui et non. Y a un test en moins à chaque itération. Ca peut etre non négligeables si i est grand.


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 11-10-2002 à 14:04:33    

DarkLord> Rien à ajouter.  :jap:  
 
bobuse> Tu remarqueras que le nombre d'itérations dans mes 2 bouts de code était 100 000 (cent mille).

Reply

Marsh Posté le 11-10-2002 à 14:38:53    

BifaceMcLeOD a écrit a écrit :

Pourtant, les spécialistes te confirmeront que le code :

Code :
  1. for (int i = 0; i < 100000; i++) {
  2.   tab = ....
  3. }

est moins rapide que :

Code :
  1. int  i = 0;
  2. try {
  3.   while (true) {
  4.     tab[i] = ....
  5.     i++;
  6.   }
  7. }
  8. catch (ArrayIndexOutOfBoundsException e) {
  9.   // Ne rien faire, on a juste fini de parcourir le tableau.
  10. }


 
edit> Ce n'est pas que je tienne absolument à être désagréable, mais "[i]aberration" s'écrit avec deux 'r'... ;)




 
Hum...
 
Il me semble que tu ne comprends pas ce que j'ai ecris...
 
Si tu as un array de 10000 objets et qu'une fois sur 100000 une case n'est pas initialisee et tu te choppes un NullPointerException je t'assure que tu as meilleurs temps de catch l'exception plutot que faire des if (tab[i] != null)
 
Enfin bon...
 
Edit : j'ai lu tes msg suivants et on parle bien de la meme chose ou presque dsl.


Message édité par phenixl le 11-10-2002 à 14:40:14
Reply

Marsh Posté le 11-10-2002 à 14:45:51    

benou a écrit a écrit :

 
Les exceptions sont pas faites pour améliorer les perfs !
 
les utiliser dans ce but est une abération !




 
Dire que les exceptions doivent etre utilisees exceptionnellement ca c'est une abberation ! Elles doivent etre utilisees intensement mais lorsque c'est justifie.
 
Ce n'est pas l'utilisation qui doit etre exceptionnelle, mais la levee d'exceptions !  
 
Si tu utilises Exceptions + polymorphisme je t'assure que tu gagnes en performances, en lisibilite de code, etc... compare a une batterie de tests lourde et executee a chaque fois.
 
Bien sur derriere il faut faire en sorte que l'exception ne soit levee qu'exceptionnellement, mais ca c'est une question de design !
 

Reply

Marsh Posté le 11-10-2002 à 20:13:12    

BifaceMcLeOD a écrit a écrit :

DarkLord> Rien à ajouter.  :jap:  
 
bobuse> Tu remarqueras que le nombre d'itérations dans mes 2 bouts de code était 100 000 (cent mille).




ha ok j'avais point le 100 000 !  :D  
 

phenixl a écrit a écrit :

 
 
Dire que les exceptions doivent etre utilisees exceptionnellement ca c'est une abberation ! Elles doivent etre utilisees intensement mais lorsque c'est justifie.
 
Ce n'est pas l'utilisation qui doit etre exceptionnelle, mais la levee d'exceptions !  
 
Si tu utilises Exceptions + polymorphisme je t'assure que tu gagnes en performances, en lisibilite de code, etc... compare a une batterie de tests lourde et executee a chaque fois.
 
Bien sur derriere il faut faire en sorte que l'exception ne soit levee qu'exceptionnellement, mais ca c'est une question de design !




 
Ok ok, tout à fait d'accord sur ce point !
En fait, je voulais juste dire qu'il faut pas en mettre n'importe où, et les utiliser à tout vent (ce que tu as dit justement). Mais bon, ma phrase aura au moins suscité le débat ... c'est toujours positif

Reply

Marsh Posté le 11-10-2002 à 22:25:16    

phenixl a écrit a écrit :

 
 
Dire que les exceptions doivent etre utilisees exceptionnellement ca c'est une abberation !



 
 [:benou] j'ai jamais dis ca !

Reply

Marsh Posté le 11-10-2002 à 22:33:50    

benou a écrit a écrit :

 
 
 [:benou] j'ai jamais dis ca !




 
PAS TOI ! :lol:  
 
J'ai reagi sur le terme "abberation" : ce que je dis est moins une abberation que ce qu'a dit bobuse (oui m'sieur ! euh d'accord m'sieur la prochaine fois je ne denoncerai pas un petit camarade :) )
 
D'ailleurs Bobuse m'a compris ;)  
 
 :hello:

Reply

Marsh Posté le 11-10-2002 à 22:45:58    

phenixl a écrit a écrit :

 
PAS TOI ! :lol:  




ok, je préfere ;)

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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