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

  FORUM HardWare.fr
  Programmation
  Java

  Optimisation de code Java

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Optimisation de code Java

n°355823
Math_Caen
Posté le 08-04-2003 à 15:10:19  profilanswer
 

Salut, je voudrais savoir si quelqu'un connait un site ou si vous pouviez m'expliquer la différence entre l'instruction :
if(....) {
     .....
}else{
     .....
}
 
et l'instruction :
if(?....  :.... : ....)
 
Je voudrais savoir les différences en terme de temps par exemple. La seule chose que je sais, c'est que la 1ère est plus lisible.

mood
Publicité
Posté le 08-04-2003 à 15:10:19  profilanswer
 

n°355831
darklord
You're welcome
Posté le 08-04-2003 à 15:15:45  profilanswer
 

AFAIK y en a pas sauf que dans le second cas tu ne peux mettre qu'une instruction dans ton if et dans ton else (pas de bloc donc)


---------------
Just because you feel good does not make you right
n°355843
Math_Caen
Posté le 08-04-2003 à 15:25:29  profilanswer
 

C'est sur, dans le deuxième cas, on ne peut mettre qu'une instruction. Cependant, je pense qu'il doit y avoi un avantage à cette solution, cependant je ne vois pas très bien laquelle.

n°355844
darklord
You're welcome
Posté le 08-04-2003 à 15:26:18  profilanswer
 

Math_Caen a écrit :

C'est sur, dans le deuxième cas, on ne peut mettre qu'une instruction. Cependant, je pense qu'il doit y avoi un avantage à cette solution, cependant je ne vois pas très bien laquelle.


 
la lisibilité dans le cas d'instruction très simple. Du genre si un machin est null alors lui filer une valeur par défaut sinon faire un get sur l'objet qui est pas null pour lui filer sa valur correcte


---------------
Just because you feel good does not make you right
n°355845
Profil sup​primé
Posté le 08-04-2003 à 15:26:34  answer
 
n°355847
the real m​oins moins
Posté le 08-04-2003 à 15:27:39  profilanswer
 

il me semble pas qu'il y ait un article là dessus, mais plein d'autre interessants:
http://www.javaspecialists.co.za/archive/archive.html
 
à priori, je favoriserais toujours la methode la plus lisible.
(dans certains cas, un bloh = (truc?blah:ble); peut etre plus "lisible"  qu'un bloc if/else mais bon  :ange:


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°355849
El_gringo
Posté le 08-04-2003 à 15:28:23  profilanswer
 

C'est un vestige du C.
A la création de Java, Sun a du souhaiter ne pas dépayser les programmeurs C en intégrant cet opérateur ternaire (de merde).

n°355850
the real m​oins moins
Posté le 08-04-2003 à 15:28:40  profilanswer
 

as far as i know


Message édité par the real moins moins le 08-04-2003 à 15:29:11

---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°355860
Math_Caen
Posté le 08-04-2003 à 15:39:37  profilanswer
 

the real moins moins a écrit :

il me semble pas qu'il y ait un article là dessus, mais plein d'autre interessants:
http://www.javaspecialists.co.za/archive/archive.html
 
à priori, je favoriserais toujours la methode la plus lisible.
(dans certains cas, un bloh = (truc?blah:ble); peut etre plus "lisible"  qu'un bloc if/else mais bon  :ange:  


 
J'ai regardé sur le site, mais je ne trouve rien qui me renseigne.  :(

n°355866
chrisbk
-
Posté le 08-04-2003 à 15:46:31  profilanswer
 

the real moins moins a écrit :

il me semble pas qu'il y ait un article là dessus, mais plein d'autre interessants:
http://www.javaspecialists.co.za/archive/archive.html
 
à priori, je favoriserais toujours la methode la plus lisible.
(dans certains cas, un bloh = (truc?blah:ble); peut etre plus "lisible"  qu'un bloc if/else mais bon  :ange:  


 
sympa ce site, meme si y'a quand memes des articles un peu bidon, genre, http://www.javaspecialists.co.za/archive/Issue064.html  
 

mood
Publicité
Posté le 08-04-2003 à 15:46:31  profilanswer
 

n°355877
Taz
bisounours-codeur
Posté le 08-04-2003 à 15:58:57  profilanswer
 

<HS> techniuqment, entre un if-else et un ?/ c'est le meme code assembleur qui est généré, sauf si ton compilo est une otarie.
 
comme dit plus haut: favorise la lisibilité. Joce nous a récemment donén l'exemple de code parfaitement imbitabble à coup d'opérateurs ternaires imbriqués et d'affectation planquées: horribles. tout ça par ce que le mythe "?: est plus rapide que if-else" a la peau dure :pfff:

n°355878
Math_Caen
Posté le 08-04-2003 à 15:59:57  profilanswer
 

Merci à vous tous, je pense qu'étend donné que personne ne saient vraiment pourquoi utilisé la solution barbare, je continuerai à utiliser la solution plus lisible.
 
@+ tout le monde et encore merci

n°355879
darklord
You're welcome
Posté le 08-04-2003 à 16:00:00  profilanswer
 

++Taz a écrit :

<HS> techniuqment, entre un if-else et un ?/ c'est le meme code assembleur qui est généré, sauf si ton compilo est une otarie.
 
comme dit plus haut: favorise la lisibilité. Joce nous a récemment donén l'exemple de code parfaitement imbitabble à coup d'opérateurs ternaires imbriqués et d'affectation planquées: horribles. tout ça par ce que le mythe "?: est plus rapide que if-else" a la peau dure :pfff:  


 
 :jap:


---------------
Just because you feel good does not make you right
n°355881
lorill
Posté le 08-04-2003 à 16:01:49  profilanswer
 

Math_Caen a écrit :

Merci à vous tous, je pense qu'étend donné que personne ne saient vraiment pourquoi utilisé la solution barbare, je continuerai à utiliser la solution plus lisible.


parce que "la solution barbare" est parfois plus lisible qu'un if/else.
 
val = (obj == null ? "default" : obj.getValue());

n°355883
chrisbk
-
Posté le 08-04-2003 à 16:05:25  profilanswer
 

lorill a écrit :


parce que "la solution barbare" est parfois plus lisible qu'un if/else.
 
val = (obj == null ? "default" : obj.getValue());


 
en quoi c'est plus lisible qu'un if/else ?

n°355886
lorill
Posté le 08-04-2003 à 16:08:29  profilanswer
 

chrisbk a écrit :


en quoi c'est plus lisible qu'un if/else ?


ca prends moins de place, et surtout on voit tout de suite que c'est une affectation conditionnelle  [:sinclaire]

n°355893
the real m​oins moins
Posté le 08-04-2003 à 16:20:03  profilanswer
 

lorill a écrit :


parce que "la solution barbare" est parfois plus lisible qu'un if/else.
 
val = (obj == null ? "default" : obj.getValue());

double grilled :o


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°355895
lorill
Posté le 08-04-2003 à 16:25:23  profilanswer
 


non, je n'ai fait qu'illustrer vos propos  [:sinclaire]

n°355898
Taz
bisounours-codeur
Posté le 08-04-2003 à 16:29:09  profilanswer
 

lorill a écrit :


ca prends moins de place, et surtout on voit tout de suite que c'est une affectation conditionnelle  [:sinclaire]  

tu penses qu'il serait bien mieux de déclarer une variable au plus pres de son initialisation pour éviter ce genre de choses?. tu chipotes, moi aussi

n°355899
bobuse
Posté le 08-04-2003 à 16:31:16  profilanswer
 

un exemple que j'ai utilisé ya pas longtemps (un peu modifié pour l'occasion) :

Code :
  1. boolean flag=false;
  2. // ... modification eventuelle du flag
  3. acces a un tableau :
  4. machin=tab[flag?0:2];
  5. truc=tab[flag?4:2];

n°357642
BifaceMcLe​OD
The HighGlandeur
Posté le 10-04-2003 à 12:46:42  profilanswer
 

Je préfère l'exemple de lorill.
Et de mémoire, l'opérateur termaire ne produit pas tout à fait le même bytecode qu'un plus classique if/this/else. La différence est minime, sauf si ta fonction est très courte et qu'elle est appelée un million de fois.
 
Mais je suis d'accord avec vous. La lisibilité réelle du code doit primer absolument face à son efficacité supposée.

n°357654
bobuse
Posté le 10-04-2003 à 13:23:27  profilanswer
 

BifaceMcLeOD a écrit :

Je préfère l'exemple de lorill.


:o

BifaceMcLeOD a écrit :


Et de mémoire, l'opérateur termaire ne produit pas tout à fait le même bytecode qu'un plus classique if/this/else. La différence est minime, sauf si ta fonction est très courte et qu'elle est appelée un million de fois.
 
Mais je suis d'accord avec vous. La lisibilité réelle du code doit primer absolument face à son efficacité supposée.


programmation par aspect POWAAA
la lisibilité et l'efficacité sont deux aspects qui ne font pas bon ménage :/  
Si on veut pas qu'il y ait des gens qui se tapent des migraines pendant deux mois ( [:nowad] ), il vaut mieux primer sur la première :D


---------------
get amaroK plugin
n°357656
kadreg
profil: Utilisateur
Posté le 10-04-2003 à 13:25:41  profilanswer
 

lorill a écrit :


on voit tout de suite que c'est une affectation conditionnelle  [:sinclaire]  


 
vive les langages ayant l'affectation conditionnelle (eiffel si ma mémoire est bonne)


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°357662
chrisbk
-
Posté le 10-04-2003 à 13:28:32  profilanswer
 

kadreg a écrit :


 
vive les langages ayant l'affectation conditionnelle (eiffel si ma mémoire est bonne)


 
ou l'asm [:spamafote]

n°357664
kadreg
profil: Utilisateur
Posté le 10-04-2003 à 13:29:28  profilanswer
 


 
[:tapai]


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°357668
chrisbk
-
Posté le 10-04-2003 à 13:33:21  profilanswer
 


 

Citation :

CMOV moves its source (second) operand into its destination (first) operand if the given condition code is satisfied; otherwise it does nothing.


 
[:ddr555]

n°358155
BifaceMcLe​OD
The HighGlandeur
Posté le 10-04-2003 à 19:35:56  profilanswer
 

bobuse a écrit :


la lisibilité et l'efficacité sont deux aspects qui ne font pas bon ménage :/


Si, parfois. Dans ce cas-là, on appelle ça du code "élégant".  :D

n°358166
nraynaud
lol
Posté le 10-04-2003 à 19:59:13  profilanswer
 

kadreg a écrit :


 
vive les langages ayant l'affectation conditionnelle (eiffel si ma mémoire est bonne)


Gni ? tu confonds pas avc la tentative d'affectation plutôt ?
 
variableTypéePetit ?= variableTypéeGrand
 
où la variable de gauche ne vaut pas null si le cast vers le bas était possible.

n°358174
kadreg
profil: Utilisateur
Posté le 10-04-2003 à 20:14:50  profilanswer
 

nraynaud a écrit :


Gni ? tu confonds pas avc la tentative d'affectation plutôt ?


 
Si (et en plus je l'utilise régulièrement)


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°358182
nraynaud
lol
Posté le 10-04-2003 à 20:28:46  profilanswer
 

kadreg a écrit :


je l'utilise régulièrement


un petit smiley pour fêter ça : [:lorill]

n°358596
senternal
Posté le 11-04-2003 à 11:19:45  profilanswer
 

Ouais, a mon sens les personnes qui programment en Java avec les operateurs ternaires sont a mettre au placard... Je vous rappelle pour info qu'un compilateur avec/sans optimisateur de byte-code est LARGEMENT plus efficace que le programmeur... T'auras beau mettre tous les operateurs ternaires dans ton code (au passage, evite de mettre ton nom dans ce cas dans le source...), il n'en restera pas moins qu'a reprendre, c'est injouable. J'ai deja eu le cas dans un projet, autant vous dire que le mec qui a eu l'erreur de mettre son nom dans le source s'en souvient encore... Meme lui n'arrivait plus a s'y retrouver... C'est d'autant plus vrai que c'est un relicat du C (comme mentionné dans la discussion par El_gringo). Le C n'en est pas pour autant un mauvais langage, je le trouve plutot excellent.
 
Pour conclure, le ternaire en Java, a oublier. D'ailleurs la remarque de BifaceMcLeOD est plutot comique a ce propos !! Merci  :lol:  
 
"Et de mémoire, l'opérateur termaire ne produit pas tout à fait le même bytecode qu'un plus classique if/this/else. La différence est minime, sauf si ta fonction est très courte et qu'elle est appelée un million de fois."
 

n°358652
EpoK
Let's burn
Posté le 11-04-2003 à 12:08:01  profilanswer
 

opérateur ternaire ^^

n°358725
bobuse
Posté le 11-04-2003 à 13:47:17  profilanswer
 

senternal a écrit :

Ouais, a mon sens les personnes qui programment en Java avec les operateurs ternaires sont a mettre au placard... Je vous rappelle pour info qu'un compilateur avec/sans optimisateur de byte-code est LARGEMENT plus efficace que le programmeur... T'auras beau mettre tous les operateurs ternaires dans ton code (au passage, evite de mettre ton nom dans ce cas dans le source...), il n'en restera pas moins qu'a reprendre, c'est injouable. J'ai deja eu le cas dans un projet, autant vous dire que le mec qui a eu l'erreur de mettre son nom dans le source s'en souvient encore... Meme lui n'arrivait plus a s'y retrouver... C'est d'autant plus vrai que c'est un relicat du C (comme mentionné dans la discussion par El_gringo). Le C n'en est pas pour autant un mauvais langage, je le trouve plutot excellent.
 
Pour conclure, le ternaire en Java, a oublier. D'ailleurs la remarque de BifaceMcLeOD est plutot comique a ce propos !! Merci  :lol:  
 
"Et de mémoire, l'opérateur termaire ne produit pas tout à fait le même bytecode qu'un plus classique if/this/else. La différence est minime, sauf si ta fonction est très courte et qu'elle est appelée un million de fois."


Je pense (et je ne suis pas le seul) que l'operateur ternaire peut etre utilise non pas pour esperer une qqconque optimisation a la mords-moi-le-noeud, mais pour ameliorer la lisibilite (dans certain cas)
 
Mais. c'est comme toutes les bonnes choses, il ne faut pas en abuser ...


---------------
get amaroK plugin
n°359752
Gonzoide
Les cochons... dans l'espâââce
Posté le 13-04-2003 à 11:44:58  profilanswer
 

nraynaud a écrit :


Gni ? tu confonds pas avc la tentative d'affectation plutôt ?
 
variableTypéePetit ?= variableTypéeGrand
 
où la variable de gauche ne vaut pas null si le cast vers le bas était possible.


 
Je pensais etre le seul a connaitre Eiffel :love:

n°359756
noldor
Rockn'roll
Posté le 13-04-2003 à 12:02:48  profilanswer
 

je ne suis pas d'accord avec senternal : comme déja dit précédemment, il y a des cas où l'opérateur ternaire est plus lisible qu'un if () {} else {}


---------------
http://runnerstats.net
mood
Publicité
Posté le   profilanswer
 


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

  Optimisation de code Java

 

Sujets relatifs
Avez-vous un Serpent (Nibbles) en Java ?Ouverture d'un fichier Excel en Java ?
Garder dans le cache les applets javacode d'un moteur de recherche pour site internet
question precise SERVLET java[JAVA] Etre informé lorsqu'une Frame change de taille
[JAVA] Configurer le chat EIRCManipulation de document HTML en Java => rendre le code HTML propre ?
Problème dans mon code (surement simple)[JAVA] optimisation de code JAVA
Plus de sujets relatifs à : Optimisation de code Java


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