Optimisation de code Java

Optimisation de code Java - Java - Programmation

Marsh Posté le 08-04-2003 à 15:10:19    

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.

Reply

Marsh Posté le 08-04-2003 à 15:10:19   

Reply

Marsh Posté le 08-04-2003 à 15:15:45    

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
Reply

Marsh Posté le 08-04-2003 à 15:25:29    

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.

Reply

Marsh Posté le 08-04-2003 à 15:26:18    

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
Reply

Marsh Posté le 08-04-2003 à 15:26:34    

Reply

Marsh Posté le 08-04-2003 à 15:27:39    

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 ?
Reply

Marsh Posté le 08-04-2003 à 15:28:23    

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).

Reply

Marsh Posté le 08-04-2003 à 15:28:40    

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 ?
Reply

Marsh Posté le 08-04-2003 à 15:39:37    

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.  :(

Reply

Marsh Posté le 08-04-2003 à 15:46:31    

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  
 

Reply

Marsh Posté le 08-04-2003 à 15:46:31   

Reply

Marsh Posté le 08-04-2003 à 15:58:57    

<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:

Reply

Marsh Posté le 08-04-2003 à 15:59:57    

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

Reply

Marsh Posté le 08-04-2003 à 16:00:00    

++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
Reply

Marsh Posté le 08-04-2003 à 16:01:49    

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());

Reply

Marsh Posté le 08-04-2003 à 16:05:25    

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 ?

Reply

Marsh Posté le 08-04-2003 à 16:08:29    

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]

Reply

Marsh Posté le 08-04-2003 à 16:20:03    

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 ?
Reply

Marsh Posté le 08-04-2003 à 16:25:23    


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

Reply

Marsh Posté le 08-04-2003 à 16:29:09    

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

Reply

Marsh Posté le 08-04-2003 à 16:31:16    

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];

Reply

Marsh Posté le 10-04-2003 à 12:46:42    

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.

Reply

Marsh Posté le 10-04-2003 à 13:23:27    

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
Reply

Marsh Posté le 10-04-2003 à 13:25:41    

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 !
Reply

Marsh Posté le 10-04-2003 à 13:28:32    

kadreg a écrit :


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


 
ou l'asm [:spamafote]

Reply

Marsh Posté le 10-04-2003 à 13:29:28    


 
[:tapai]


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 10-04-2003 à 13:33:21    


 

Citation :

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


 
[:ddr555]

Reply

Marsh Posté le 10-04-2003 à 19:35:56    

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

Reply

Marsh Posté le 10-04-2003 à 19:59:13    

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.

Reply

Marsh Posté le 10-04-2003 à 20:14:50    

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 !
Reply

Marsh Posté le 10-04-2003 à 20:28:46    

kadreg a écrit :


je l'utilise régulièrement


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

Reply

Marsh Posté le 11-04-2003 à 11:19:45    

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."
 

Reply

Marsh Posté le 11-04-2003 à 12:08:01    

opérateur ternaire ^^

Reply

Marsh Posté le 11-04-2003 à 13:47:17    

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
Reply

Marsh Posté le 13-04-2003 à 11:44:58    

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:

Reply

Marsh Posté le 13-04-2003 à 12:02:48    

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
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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