Combien d'opérateurs ternaires sont autorisés en Java

introduction

Cet article est limité à Java.

L'autre jour, j'ai écrit l'article suivant (j'ai changé le titre).

Dans cet article, j'ai donné l'opérateur ternaire comme un bon exemple:

String userType = isAdmin ? "Administrateur" : "Général";

Cependant, il y a eu pas mal de réactions que l'opérateur ternaire était difficile à lire. J'avais l'intention de le donner à titre d'exemple simple, mais je ne l'ai pas suffisamment expliqué, alors j'écrirai un article séparé.

Ma conclusion est que ** les opérateurs ternaires ne peuvent être utilisés que pour des choses simples **.

Qu'est-ce qu'un opérateur ternaire?

L'opérateur ternaire a la forme suivante:

<Expression conditionnelle> ? <Valeur lorsqu'elle est vraie> : <Valeur lorsque faux>

Avant de parler de la manière d'écrire, j'écrirai un exemple de ce que je ressens "combien".

/*
 *blanc(Presque pas de problème)
 */
String userType = isAdmin ? "Administrateur" : "Général";

String userType = user.isAdmin() ? "Administrateur" : "Général";

UserType userType = user.isAdmin() ? UserType.ADMIN : UserType.NORMAL;

String userName = user.isAdmin() ? "Administrateur" : user.getName();

/*
 *Gris proche du blanc
 */
return user.getType() == UserType.GUEST ? "Utilisateur invité" : user.getName();

/*
 *Gris proche du noir
 */
String userName = user.getType() == UserType.GUEST ? "Utilisateur invité" : user.getName();

/*
 *noir(en dehors)
 */
String userName = user.getType() == UserType.GUEST ? "Les invités" : user.getType() == UserType.ADMIN ? "Administrateur" : user.getName() + "M.";

Quelle est la norme

Revenez à la définition de l'opérateur ternaire.

<Expression conditionnelle> ? <Valeur lorsqu'elle est vraie> : <Valeur lorsque faux>

Dans l'exemple précédent, le type de motif qui est bon ou mauvais peut être classé comme suit.

La raison pour laquelle les opérateurs ternaires ne sont souvent pas appréciés est que le coût de l'analyse lexicale et de l'analyse grammaticale à l'esprit est élevé, comme la valeur d'une expression conditionnelle et la valeur lorsqu'elle est vraie. De plus, la raison pour laquelle les comparaisons avec == et ! = Ne sont pas bonnes est qu'elles sont confondues avec la substitution = et sont confuses pendant un moment.

Par conséquent, j'essaie d'éviter autre chose que la simple écriture.

Comment écrire

Vous pourriez écrire quelque chose comme ça, mais je n'aime pas ça parce que c'est une solution négative.

String userName; //L'initialisation ici est inutile, alors ne le faites pas

if (user.getType() == UserType.GUEST) {
    userName = "Les invités";
} else if (user.userType() == UserType.ADMIN) {
    userName = "Administrateur";
} else {
    userName = user.getName() + "M.";
}

Si vous êtes vous-même, créez une méthode comme suit. Dans ce cas, il peut être implémenté en tant que méthode de la classe User.

Cette fois, j'ai fait une instruction if pour correspondre à l'expression conditionnelle d'origine, mais dans le cas de enum, j'utilise souvent une instruction switch.

private String getName(User user) {
    if (user.getType() = UserType.GUEST) {
        return "Les invités";
    } else if (user.getType() == UserType.ADMIN) {
        return "Administrateur";
    } else {
        return user.getName() + "M.";
    }
}

//Votre interlocuteur
String userName = getName(user);

en conclusion

Il y avait plus de modèles plus difficiles à lire que ce à quoi je m'attendais. Je pense qu'il est exagéré d'interdire les opérateurs ternaires, mais je pense qu'il est normal de n'utiliser que des opérateurs simples.

Recommended Posts

Combien d'opérateurs ternaires sont autorisés en Java
Contenu d'apprentissage de base Java 3 (opérateur / opérateur ternaire)
Quelle est la lenteur du scanner Java?
Comment apprendre JAVA en 7 jours
Comment utiliser les classes en Java?
Comment concaténer des chaînes avec Java
Qu'est-ce qu'une classe en langage Java (3 /?)
Comment implémenter le calcul de la date en Java
Comment implémenter le filtre de Kalman par Java
Prise en charge multilingue de Java Comment utiliser les paramètres régionaux
Comment écrivez-vous l'opérateur ternaire (? :)
Comment faire une conversion de base en Java
Qu'est-ce qu'une classe en langage Java (1 /?)
Qu'est-ce qu'une classe en langage Java (2 /?)
Comment appliquer les conventions de codage en Java
Quelle est la méthode principale en Java?
Comment obtenir la date avec Java
Comment afficher une page Web en Java
Le type d'intersection introduit dans Java 10 est incroyable (?)
Comment obtenir une classe depuis Element en Java
Comment masquer les champs nuls en réponse en Java
Comment résoudre les problèmes d'expression en Java
[Java] Quelque chose est affiché comme "-0.0" dans la sortie
Comment écrire Java String # getBytes dans Kotlin?
Qu'est-ce que 'java
Changements dans Java 11
Opérateur ternaire de référence
Janken à Java
Qu'est-ce que Java <>?
Qu'est-ce que 'java
Comment appeler des fonctions en bloc avec la réflexion Java
Comment créer un environnement Java en seulement 3 secondes
[Java] Comment omettre le constructeur privé dans Lombok
Comment déterminer la quantité de disque utilisée par Docker
Comment entrer / sortir des fichiers mainframe IBM en Java?
Quel est le meilleur, Kotlin ou futur Java?
Comment créer un URI de données (base64) en Java
Comment convertir un fichier en tableau d'octets en Java
Comment Git gérer les projets Java EE dans Eclipse
Résumé de la mise en œuvre des arguments par défaut en Java
Java11: exécuter le code Java dans un seul fichier tel quel
Comment mettre l'ancien Java (série 8) dans macOS 10.15 Catalina
Remarques sur l'utilisation des expressions régulières en Java
L'histoire que .java est également construite dans Unity 2018