Optimisation de code Java - Java - Programmation
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)
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.
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
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
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).
Marsh Posté le 08-04-2003 à 15:28:40
as far as i know
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: |
J'ai regardé sur le site, mais je ne trouve rien qui me renseigne.
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: |
sympa ce site, meme si y'a quand memes des articles un peu bidon, genre, http://www.javaspecialists.co.za/archive/Issue064.html
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
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
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. |
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());
Marsh Posté le 08-04-2003 à 16:05:25
lorill a écrit : |
en quoi c'est plus lisible qu'un if/else ?
Marsh Posté le 08-04-2003 à 16:08:29
chrisbk a écrit : |
ca prends moins de place, et surtout on voit tout de suite que c'est une affectation conditionnelle
Marsh Posté le 08-04-2003 à 16:20:03
lorill a écrit : |
double grilled
Marsh Posté le 08-04-2003 à 16:25:23
ReplyMarsh Posté le 08-04-2003 à 16:29:09
lorill a écrit : |
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
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 :
|
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.
Marsh Posté le 10-04-2003 à 13:23:27
BifaceMcLeOD a écrit : Je préfère l'exemple de lorill. |
BifaceMcLeOD a écrit : |
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 ( ), il vaut mieux primer sur la première
Marsh Posté le 10-04-2003 à 13:25:41
lorill a écrit : |
vive les langages ayant l'affectation conditionnelle (eiffel si ma mémoire est bonne)
Marsh Posté le 10-04-2003 à 13:28:32
kadreg a écrit : |
ou l'asm
Marsh Posté le 10-04-2003 à 13:29:28
chrisbk a écrit : |
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. |
Marsh Posté le 10-04-2003 à 19:35:56
bobuse a écrit : |
Si, parfois. Dans ce cas-là, on appelle ça du code "élégant".
Marsh Posté le 10-04-2003 à 19:59:13
kadreg 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.
Marsh Posté le 10-04-2003 à 20:14:50
nraynaud a écrit : |
Si (et en plus je l'utilise régulièrement)
Marsh Posté le 10-04-2003 à 20:28:46
ReplyMarsh 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
"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."
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. |
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 ...
Marsh Posté le 13-04-2003 à 11:44:58
nraynaud a écrit : |
Je pensais etre le seul a connaitre Eiffel
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 {}
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.