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;

  • () 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.