Parfois, les conditions peuvent s’avérer un peu longues à écrire, un peu trop indigestes… et on aimerait bien pouvoir les remplacer par quelque chose de plus court. C’est justement là tout l’intérêt des expressions ternaires (ou plus simplement ternaires) : raccourcir l’écriture de certains morceaux de code, et peut-être même un peu trop pour certains, mais nous en reparlerons un peu plus bas.

Dans quels cas ?

Les expressions ternaires peuvent remplacer des conditions, mais pas n’importe lesquelles bien évidemment. Commençons par poser le contexte : nous avons une variable et nous voulons lui affecter une valeur. Jusque-là, rien de bien exceptionnel, mais ça se corse un peu quand on précise que cette valeur change en fonction d’une certaine condition. Par exemple, imaginons une variable contenant une chaîne de caractères valant soit « positif » si un nombre est supérieur ou égal à 0, soit « négatif » si ce nombre est strictement inférieur à 0.

Bon, techniquement, nous n’avons rien de bien compliqué et nous pouvons programmer facilement notre exemple, ici en pseudo-code pour plus d’universalité :

si (nombre >= 0)
	signe = "positif";
sinon
	signe = "négatif";

Soit quatre lignes pour une si petite chose, et encore, on n’a pas utilisé d’accolades !

Les expressions ternaires

Une expression ternaire, comme son nom l’indique, est composée de trois éléments : une condition, une première valeur qui sera prise si la condition est respectée et une seconde valeur qui sera prise sinon. Concrètement, il vous suffit donc d’écrire ceci :

variable = (condition) ? valeur_si_vrai : valeur_si_faux;

Ce qui donne quelque chose de simple avec notre exemple :

signe = (nombre >= 0) ? "positif" : "négatif";

Comme vous le voyez, c’est plutôt simple, l’écriture est raccourcie, bref, tout est beau. Et là où c’est encore plus beau, c’est que vous n’êtes pas forcément obligé de passer par une variable. Imaginons que le code vu ci-dessus soit en fait extrait d’une fonction, vous pourriez être tenté d’écrire ça :

fonction signe(nombre) {
	s = (nombre >= 0) ? "positif" : "négatif";
	return s;
}

Mais vous pouvez directement, si vous le souhaitez, passer votre expression ternaire au return :

fonction signe(nombre) {
	return (nombre >= 0) ? "positif" : "négatif";
}

Les questions existentielles de la clarté

Les ternaires ne font pas l’unanimité et si elles permettent de raccourcir l’écriture, certains reprochent à ce type d’expression le fait de ne pas être très clair. Personnellement, je les trouve suffisamment claire… tant qu’on ne pond pas des lignes de 10 mètres de long en imbriquant des douzaines d’expressions ternaires. À vous de vous faire votre propre opinion, mais sachez que comme beaucoup de choses, les ternaires ont leurs détracteurs.