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?

Makky
la source
5
google ternary operator in java :)
CoolBeans
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());
duffymo
la source
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";
Peter Lawrey
la source
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) ...
Sam Goldberg
la source
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.

Reza Baradaran Gazorisangi
la source
21

en java 8:

name = Optional.ofNullable(city.getName()).orElse("N/A")
digitebs
la source
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;

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

C'est la même chose que

if (testCondition) {
    myVariable = someValue;
} else {
    myVariable = anotherValue;
}
Suragch
la source
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";
}
OctopusSD
la source
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.

IgniteCoders
la source
5
name = (city.getName() != null) ? city.getName() : "N/A";
shift66
la source
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

Arafe Zawad Sajid
la source
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);

Waqas Qayum
la source
2

Utilisez org.apache.commons.lang3.StringUtils:

name = StringUtils.defaultString(city.getName(), "N/A");
Paul Rambags
la source
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";
Vasile Doe
la source
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.

Shiva
la source
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"
Ombre
la source
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