Formulaire abrégé pour Java if


201

Je sais qu'il existe un moyen d'écrire une ifdéclaration Java sous une forme courte.

if (city.getName() != null) {
    name = city.getName();
} else {
    name="N/A";
}

Quelqu'un sait-il comment rédiger le formulaire abrégé des 5 lignes ci-dessus en une seule ligne?



2
Je suppose que vous avez ifmal tourné votre logique.
— NPE du

7
if (city.getName()!=null){name = city.getName();}else{name="N/A"}
— Steve Kuo

9
@SteveKuo Vous pouvez supprimer trois espaces. ;)
— Peter Lawrey

2
if (city.getName()!= null) name = city.getName(); else name="N/A";
— Anton Dozortsev

Réponses:


424

Utilisez l'opérateur ternaire:

name = ((city.getName() == null) ? "N/A" : city.getName());

Je pense que vous avez les conditions à l'envers - si elle est nulle, vous voulez que la valeur soit "N / A".

Et si la ville est nulle? Votre code * frappe le lit dans ce cas. J'ajouterais un autre chèque:

name = ((city == null) || (city.getName() == null) ? "N/A" : city.getName());

12
+1, bien que vous ayez des parenthèses redondantes. J'aurais écrit: name = city.getName() == null ? "N/A" : city.getName();
— Andres F.

20
Une question de style et de goût: j'aime clarifier le regroupement de la clause booléenne.
— duffymo

4
Peu importe - j'ai utilisé le théorème de DeMorgan et j'ai obtenu ce dont vous aviez besoin. Pas besoin d'éditer, tant que vous exprimez correctement la logique.
— duffymo

2
Pour info les parenthèses externes ne sont pas nécessaires. Vous pouvez juste fairename = city.getName()==null ? "N/A" : city.getName()
— Steve Kuo

4
Ne lancera pas String cityName = city.getName();un NullPointerExceptionsi city == null? Je dirais donc que votre solution intermédiaire est certainement la meilleure (PS et j'approuve les parenthèses `` inutiles ''! Les gens doivent se rappeler que 99% du codage communique avec d'autres personnes (et votre futur soi), pas avec le compilateur - sinon nous utiliserions c!)
— Alex

33

Pour éviter d'appeler .getName()deux fois, j'utiliserais

name = city.getName();
if (name == null) name = "N/A";

2
Dans un système multi-utilisateurs avec une ville mutable, il pourrait y avoir un intervenant city.setName(null). Votre réponse gère parfaitement cela.
— emory

27

La façon de le faire est avec l'opérateur ternaire:

name = city.getName() == null ? city.getName() : "N/A"

Cependant, je crois que vous avez une faute de frappe dans votre code ci-dessus, et vous voulez dire:

if (city.getName() != null) ...

23

Le ? : opérateur en Java

En Java, vous pourriez écrire:

if (a > b) {
  max = a;
}
else {
  max = b;
}

Définir une variable unique sur l'un des deux états sur la base d'une seule condition est une telle utilisation courante de if-else qu'un raccourci a été conçu pour elle, l'opérateur conditionnel,?:. En utilisant l'opérateur conditionnel, vous pouvez réécrire l'exemple ci-dessus sur une seule ligne comme ceci:

max = (a > b) ? a : b;

(a> b)? un B; est une expression qui renvoie l'une des deux valeurs, a ou b. La condition (a> b) est testée. S'il est vrai, la première valeur, a, est renvoyée. S'il est faux, la deuxième valeur, b, est renvoyée. La valeur renvoyée dépend du test conditionnel, a> b. La condition peut être n'importe quelle expression qui renvoie une valeur booléenne.


21

en java 8:

name = Optional.ofNullable(city.getName()).orElse("N/A")

18

J'oublie toujours comment utiliser l' ?: opérateur ternaire . Cette réponse supplémentaire est un rappel rapide. C'est un raccourci pour if-then-else.

myVariable = (testCondition) ? someValue : anotherValue;

où

  • () détient le if
  • ? veux dire then
  • : veux dire else

C'est la même chose que

if (testCondition) {
    myVariable = someValue;
} else {
    myVariable = anotherValue;
}

10

Vous pouvez écrire des if, else if, elsedéclarations sous forme abrégée. Par exemple:

Boolean isCapital = city.isCapital(); //Object Boolean (not boolean)
String isCapitalName = isCapital == null ? "" : isCapital ? "Capital" : "City";      

Il s'agit d'une forme abrégée de:

Boolean isCapital = city.isCapital();
String isCapitalName;
if(isCapital == null) {
    isCapitalName = "";
} else if(isCapital) {
    isCapitalName = "Capital";
} else {
    isCapitalName = "City";
}

1
Cela n'a pas été demandé donc toujours -1.
— Makky

8

1. Vous pouvez supprimer des crochets et des sauts de ligne .

if (city.getName() != null) name = city.getName(); else name = "N/A";

2. Vous pouvez utiliser les opérateurs ?: En java.

Syntaxe:

Variable = Condition ? BlockTrue : BlockElse;

Donc, dans votre code, vous pouvez faire comme ceci:

name = city.getName() == null ? "N/A" : city.getName();

3. Attribuer un résultat de condition pour Boolean

boolean hasName = city.getName() != null;

EXTRA: pour les curieux

Dans certaines langues basées sur JAVAlike Groovy, vous pouvez utiliser cette syntaxe:

name = city.getName() ?: "N/A";

L'opérateur ?:attribue la valeur renvoyée par la variable que nous demandons. Dans ce cas, la valeur de city.getName()sinon null.


5
name = (city.getName() != null) ? city.getName() : "N/A";

3
name = ( (city.getName() == null)? "N/A" : city.getName() );

tout d'abord l'état (city.getName() == null)est vérifié. Si oui, alors "N/A"est assigné au nom ou simplement name="N/A"ou bien la valeur de city.getName()est assignée au nom, ie name=city.getName().

Choses à regarder ici:

  1. la condition est entre parenthèses suivie d'un point d'interrogation. Voilà pourquoi j'écris (city.getName() == null)?. Ici, le point d'interrogation est juste après la condition. Facile à voir / lire / deviner même!
  2. la valeur à gauche de deux points ( :) et la valeur à droite de deux points (a) la valeur à gauche de deux points est affectée lorsque la condition est vraie, sinon la valeur à droite de deux points est affectée à la variable.

voici une référence: http://www.cafeaulait.org/course/week2/43.html


3

voici un code de ligne

name = (city.getName() != null) ? city.getName() : "N/A";

voici un exemple de fonctionnement, exécutez le code ci-dessous dans le fichier js et comprenez le résultat. C'est une ("Data" != null)condition comme nous le faisons normalement if()et "Data"c'est une déclaration lorsque cette condition est devenue vraie. ceci " : "agit comme autre chose et "N/A"est une déclaration de condition else. J'espère que cela vous aidera à comprendre la logique.

name = ("Data" != null) ? "Data" : "N/A";

console.log(name);


2

Utilisez org.apache.commons.lang3.StringUtils:

name = StringUtils.defaultString(city.getName(), "N/A");

2

Simple et clair:

String manType = hasMoney() ? "rich" : "poor";

version longue:

      String manType;
    if (hasMoney()) {
        manType = "rich";
    } else {
        manType = "poor";
    }

ou comment je l'utilise pour être clair pour les autres lecteurs de code:

 String manType = "poor";
    if (hasMoney())
        manType = "rich";

0

Vous pouvez utiliser l'opérateur ternaire en java.

Syntaxe:

Condition ? Block 1 : Block 2

Donc, dans votre code, vous pouvez faire comme ça,

name = ((city.getName() == null) ? "N/A" : city.getName());

Pour plus d'informations, vous pouvez consulter cette ressource.


4
Ceci est une question de 6 ans et a accepté la réponse. Votre réponse ne fournit rien de nouveau -1
— Makky

-3
name = city.getName()!=null?city.getName():"N/A"

4
Au lieu de simplement publier du code, vous aideriez davantage OP en expliquant la technique. Comment ça marche, pourquoi ça marche?
— Zabuzard

1
Mettre des espaces autour de vos opérateurs facilite la lecture et l'entretien.
— geowar
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.