
Envoyé par
Obsidian
1 2 3 4 5 6
| s = i==1 ? "Un"
: i==2 ? "Deux"
: i==3 ? "Trois"
: i==4 ? "Quatre"
: i==5 ? "Cinq"
: "Indéterminé" ; |

Envoyé par
gangsoleil
1 2 3 4
|
(config == NULL) ? print_error ("null pointer not allowed")
: config.filename == NULL ? print_error ("cannot open NULL file")
: file = fopen (config->filename, "r") ; |
Il y a une énorme différence entre ces deux codes
Le premier est une utilisation comme expression, le second comme une instruction (expression non affectée).
Dans le premier cas, il s'agit de condenser un code pas forcément lisible non plus:
1 2 3 4 5 6 7 8
| switch(i){
case 1 : s = "Un"; break;
case 2 : s = "Deux"; break;
case 3 : s = "Trois"; break;
case 4 : s = "Quatre"; break;
case 5 : s = "Cinq"; break;
default : s = "Indéterminé"; break;
} |
Moi, je préfère effectivement un ternaire bien indenté
Bonus, la version ternaire garantie l'affectation, alors qu'il est toujours possible d'oublier le default (entre autre dans un vrai code).
Autre bonus, cela permet aussi une utilisation comme initialiseur:
const char* chaine = condition?"succes":"echec"
Partager