Salut! La leçon d'aujourd'hui ne sera pas très longue, mais elle sera certainement utile :) Nous allons parler de l' opérateur dit ternaire . Ternaire signifie « composé de trois parties ». C'est une alternative à l'
if-else
instruction de flux de contrôle que vous avez déjà rencontrée. Donnons un exemple. Supposons que quelqu'un décide d'aller voir un film classé R (moins de 17 ans nécessite un parent accompagnateur ou un tuteur adulte). L'huissier vérifie son âge à la porte : s'il a réussi le contrôle d'âge, il est autorisé à entrer ; sinon, il est renvoyé chez lui. Déclarons une Person
classe et vérifions cela à l'aide d'une if-else
instruction :
public class Person {
private int age;
public Person(int age) {
this.age = age;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public static void main(String[] args) {
Person person = new Person(22);
String usherResponse;
if (person.getAge() >= 18) {
usherResponse = "Everything is in order. Come in!";
} else {
usherResponse = "This film is not suitable for your age!";
}
System.out.println(usherResponse);
}
}
Sortie console :
"Everything is in order. Come in!"
Si nous supprimons la sortie de la console, notre vérification ressemble à ceci :
if (person.getAge() >= 18) {
usherResponse = "Everything is in order. Come in!";
} else {
usherResponse = "This film is not suitable for your age!";
}
La logique est très simple ici : une condition est vérifiée (âge >= 18) En fonction du résultat, la variable usherResponse
se voit attribuer l'une des deux chaînes avec la réponse de l'huissier. De telles situations ("une condition - deux résultats possibles") sont extrêmement courantes dans la programmation. Et c'est pourquoi l'opérateur ternaire a été créé. Nous pouvons l'utiliser pour simplifier notre vérification à une seule ligne de code :
public static void main(String[] args) {
Person person = new Person(22);
String usherResponse = (person.getAge() > 18) ? "Everything is in order. Come in!" : "This film is not suitable for your age!";
System.out.println(usherResponse);
}
Voici comment fonctionne cet opérateur. C'est ce qu'on appelle l'opérateur ternaire, car il comporte 3 composantes :
- Une condition (
person.getAge() > 18
) - Deux issues possibles ( "Tout est en ordre. Entrez !" et "Ce film n'est pas adapté à votre âge !" )
person.getAge() > 18 ?
« Cette personne a-t-elle plus de 18 ans ? » Ensuite, nous écrivons la première valeur . Cette valeur est utilisée si la condition est évaluée àtrue
:
String usherResponse = person.getAge() > 18 ? "Everything is in order. Come in!"
L'âge de cette personne est-il supérieur à 18 ans ? Si oui, définissez la usherResponse
variable sur "Tout est en ordre. Entrez !" Vient ensuite le :
symbole " " et la deuxième valeur . Cette valeur est utilisée si la condition est évaluée àfalse
:
String usherResponse = person.getAge() > 18 ? "Everything is in order. Come in!" : "This film is not suitable for your age!";
L'âge de cette personne est-il supérieur à 18 ans ? Si oui, définissez la usherResponse
variable sur "Tout est en ordre. Entrez !" . Sinon, définissez la usherResponse
variable sur "Ce film n'est pas adapté à votre âge !" En général, voici à quoi ressemble la logique de l'opérateur ternaire. condition ? résultat 1 : résultat 2 D'ailleurs, les parenthèses autour de la condition ne sont pas nécessaires : nous les avons ajoutées pour plus de lisibilité. Cela fonctionne aussi sans eux:
public static void main(String[] args) {
Person person = new Person(22);
String usherResponse = person.getAge() > 18 ? "Everything is in order. Come in!" : "This film is not suitable for your age!";
System.out.println(usherResponse);
}
Alors, que devez-vous utiliser ? Une if-else
instruction ou l'opérateur ternaire ? En termes de performances, il n'y a aucune différence. Plus précisément, peut-être qu'il y en a, mais c'est insignifiant. La plus grande considération ici est la lisibilité de votre code. Le code que vous écrivez doit non seulement fonctionner correctement, mais aussi être facile à lire . Après tout, il pourrait être "hérité" par d'autres programmeurs, vos collègues ! Si c'est difficile à comprendre, cela compliquera leur travail, et le vôtre (ils accourront toutes les 5 minutes pour vous expliquer). La recommandation générale est la suivante : si la condition est simple et facilement vérifiable, vous pouvez utiliser l'opérateur ternaire sans danger. Cela vous permet de réduire la quantité de code et le nombre deif-else
déclarations (et il y en a peut-être déjà beaucoup). Mais si la condition est complexe et implique plusieurs étapes, il est préférable d'utiliser une if-else
déclaration. Par exemple, utiliser un opérateur ternaire serait une mauvaise idée dans ce cas :
String usherResponse = (person.getAge() > 18 && (person.hasTicket() || person.hasCoupon()) && !person.hasChild()) ? "Come in!" : "You can't come in!";
Ce qui se passe ici n'est pas immédiatement évident ! Le code est devenu très difficile à lire. Et tout cela à cause de la condition complexe:
- Si quelqu'un a plus de 18 ans, a un billet (ou un laissez-passer gratuit) et n'a pas de jeunes enfants, il peut entrer.
- Si ne serait-ce qu'une partie de la condition est fausse, alors il ne peut pas.
if-else
. Oui, notre code sera plus gros, mais il sera beaucoup plus lisible. Et vos collègues n'auront pas la palme s'ils héritent de ce code :) Enfin, je peux vous recommander un bien. Nous avons abordé la lisibilité du code pendant la leçon. Le livre "Clean Code" de Robert Martin, devenu un classique, est consacré à ce sujet. Il rassemble les meilleures pratiques et recommandations pour les programmeurs, qui vous aideront à écrire du code non seulement fonctionnel, mais aussi facilement lisible.
GO TO FULL VERSION