[JAVA] Une histoire confuse sur un opérateur ternaire avec plusieurs expressions conditionnelles

Code en question

Soudainement, le code ci-dessous est sorti, et c'était une histoire que je me demandais.

String str =Expression conditionnelle 1?Expression conditionnelle 2? "A" : "B" : "C";

Pour faire un tableau simple, quel genre de mouvement ce sera

Expression conditionnelle 1 Expression conditionnelle 2 Résultat de sortie
true true A
true false B
false false C
false true C

Je l'ai découvert quand je l'ai mis ensemble, mais j'étais confus.

Je mets des parenthèses pour faciliter la lecture

L'opérateur ternaire, qui a plusieurs expressions conditionnelles, est complètement inconnu. Je vais mettre des parenthèses pour que ce soit facile à lire pour moi.

String str =Expression conditionnelle 1? (Expression conditionnelle 2? "A" : "B") : "C";

Cela rend un peu plus facile à voir. La prochaine fois que vous verrez un code similaire, mettez des parenthèses (dans votre esprit)! Je ferai remarquer.

J'ai essayé de le réécrire comme si ~ instruction else

Après tout, c'était le plus facile à comprendre si je le réécrivais avec une instruction if ~ else.

String str = "";
if (Expression conditionnelle 1) {
    if (Expression conditionnelle 2) {
        str = "A";
    } else {
        str = "B";
    }
} else {
    str = "C";
}

Si vous l'exprimez avec if ~ else, le nombre de lignes augmentera inévitablement. Donc, je pense que l'opérateur ternaire peut être écrit plus intelligemment.

J'ai essayé de le rendre plus facile à voir en insérant un saut de ligne

C'est la méthode enseignée dans les commentaires. Essayez d'insérer des sauts de ligne au lieu de parenthèses.

String str =Expression conditionnelle 1
    ?Expression conditionnelle 2? "A" : "B"
    : "C";

Il est courant d'écrire un opérateur ternaire sur une seule ligne, mais il peut être préférable de l'exprimer sur plusieurs lignes uniquement s'il y a plusieurs conditions. Je pense que c'est plus facile à voir que les parenthèses. * C'est juste un sentiment personnel ...

J'ai essayé de réécrire la branche conditionnelle

C'est également la méthode enseignée dans les commentaires. Les conditions ont été revues pour faciliter la visibilité.

String str = !Expression conditionnelle 1? "C" :Expression conditionnelle 2? "A" : "B";

Si vous brisez cela davantage,

String str = 
        !Expression conditionnelle 1? "C"
        :Expression conditionnelle 2? "A"
        : "B";

Il est beaucoup plus facile à voir que le premier opérateur ternaire et l'instruction if ~ else.

Sentiments divers

Récemment, j'utilise activement l'opérateur ternaire. Si vous y ajoutez une expression lambda ou une API Stream, vous pouvez l'exprimer avec un assez petit nombre de lignes, donc je l'aime beaucoup.

Cependant, si vous n'utilisez que des opérateurs ternaires lors de la révision du code, il vous sera demandé "N'est-ce pas illisible?" Que devrais-je faire ...

Recommended Posts

Une histoire confuse sur un opérateur ternaire avec plusieurs expressions conditionnelles
Affectation à plusieurs variables avec l'opérateur ternaire
À propos de l'opérateur ternaire
[PHP] Histoire de la sortie de PDF avec TCPDF + FPDI
Une histoire d'essayer de s'entendre avec Mockito
Une histoire sur la réduction de la consommation de mémoire à 1/100 avec find_in_batches
Une histoire sur le développement de ROS appelé rosjava avec java
Une histoire bloquée avec NotSerializableException
[Note] Une histoire sur la modification des outils de compilation Java avec VS Code
Une histoire sur l'utilisation de l'API League Of Legends avec JAVA
Une histoire sur la difficulté à aligner un cadre de test avec Java 6
Kotlin n'a pas d'opérateur ternaire (opérateur conditionnel)
Une petite histoire addictive avec def initialize