Forma abbreviata per Java if statement


201

So che esiste un modo per scrivere una ifdichiarazione Java in forma abbreviata.

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

Qualcuno sa come scrivere la forma breve per le 5 righe sopra in una riga?



2
Presumo che tu abbia ifsbagliato la tua logica.
NPE,

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

9
@SteveKuo Ci sono tre spazi che puoi rimuovere. ;)
Peter Lawrey,

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

Risposte:


424

Usa l'operatore ternario:

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

Penso che tu abbia le condizioni al contrario - se è nullo, vuoi che il valore sia "N / A".

Cosa succede se la città è nulla? Il tuo codice * colpisce il letto in quel caso. Aggiungerei un altro controllo:

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

12
+1, anche se hai parentesi ridondanti. Avrei scritto: name = city.getName() == null ? "N/A" : city.getName();
Andres F.

20
Una questione di stile e gusto: mi piace chiarire il raggruppamento della clausola booleana.
Duffymo,

4
In ogni caso, ho usato il teorema di DeMorgan e ho ottenuto ciò di cui avevi bisogno. Non è necessario modificarlo, purché si esprima correttamente la logica.
Duffymo,

2
Cordiali saluti, la parentesi esterna non è necessaria. Puoi semplicemente farename = city.getName()==null ? "N/A" : city.getName()
Steve Kuo il

4
Non String cityName = city.getName();lancerai un NullPointerExceptionse city == null? Direi quindi che la tua soluzione intermedia è sicuramente la migliore (PS e approvo le parentesi "non necessarie"! La gente deve ricordare che il 99% della codifica sta comunicando con altre persone (e con il tuo sé futuro), non con il compilatore - altrimenti useremmo c!)
Alex

33

Per evitare di chiamare .getName()due volte vorrei usare

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

2
In un sistema multiutente con una città mutevole, potrebbe esserci un intervento city.setName(null). La tua risposta lo gestisce perfettamente.
emory

27

Il modo per farlo è con l'operatore ternario:

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

Tuttavia, credo che tu abbia un refuso nel tuo codice sopra e intendi dire:

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

23

Il ? : operatore in Java

In Java potresti scrivere:

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

L'impostazione di una singola variabile su uno dei due stati in base a una singola condizione è un uso così comune di if-else che è stata ideata una scorciatoia per essa, l'operatore condizionale,?:. Usando l'operatore condizionale puoi riscrivere l'esempio sopra in una sola riga come questa:

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

(a> b)? a: b; è un'espressione che restituisce uno dei due valori, a o b. La condizione, (a> b), è stata testata. Se è vero, viene restituito il primo valore, a,. Se è falso, viene restituito il secondo valore, b. Qualunque valore venga restituito dipende dal test condizionale, a> b. La condizione può essere qualsiasi espressione che restituisce un valore booleano.


21

in java 8:

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

18

Dimentico sempre come usare l' ?: operatore ternario . Questa risposta supplementare è un rapido promemoria. È una scorciatoia per if-then-else.

myVariable = (testCondition) ? someValue : anotherValue;

dove

  • () detiene il if
  • ? si intende then
  • : si intende else

È lo stesso di

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

10

Puoi scrivere if, else if, elsedichiarazioni in forma abbreviata. Per esempio:

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

Questa è una forma abbreviata di:

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

1
Questo non è stato ancora chiesto -1.
Makky,

8

1. È possibile rimuovere parentesi e interruzioni di riga .

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

2. È possibile utilizzare ?: Operatori in Java.

Sintassi:

Variable = Condition ? BlockTrue : BlockElse;

Quindi nel tuo codice puoi fare così:

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

3. Assegnare il risultato della condizione per Boolean

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

EXTRA: per curiosi

In alcune lingue basate su JAVAlike Groovy, puoi usare questa sintassi:

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

L'operatore ?:assegna il valore restituito dalla variabile che stiamo chiedendo. In questo caso, il valore di city.getName()se non lo è null.


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

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

in primo luogo (city.getName() == null)viene verificata la condizione . Se sì, allora "N/A"viene assegnato al nome o semplicemente name="N/A"oppure il valore da city.getName()viene assegnato al nome, ad es name=city.getName().

Cose da guardare qui:

  1. la condizione è tra parentesi seguita da un punto interrogativo. Ecco perché scrivo (city.getName() == null)?. Qui il punto interrogativo è subito dopo la condizione. Facile da vedere / leggere / indovinare anche!
  2. il valore a sinistra dei due punti ( :) e il valore a destra dei due punti (a) il valore a sinistra dei due punti viene assegnato quando la condizione è vera, altrimenti il ​​valore a destra dei due punti viene assegnato alla variabile.

ecco un riferimento: http://www.cafeaulait.org/course/week2/43.html


3

ecco un codice di riga

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

ecco un esempio di come funziona, esegui sotto il codice nel file js e comprendi il risultato. Questa ("Data" != null)è una condizione come facciamo normalmente if()ed "Data"è un'affermazione quando questa condizione si è avverata. questo " : "atto come altro ed "N/A"è una dichiarazione per condizione di else. Spero che questo ti aiuti a capire la logica.

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

console.log(name);


2

Usa org.apache.commons.lang3.StringUtils:

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

2

Semplice e chiaro:

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

versione lunga:

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

o come lo sto usando per essere chiari per altri lettori di codice:

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

0

È possibile utilizzare l'operatore ternario in Java.

Sintassi:

Condition ? Block 1 : Block 2

Quindi nel tuo codice puoi fare così,

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

Per maggiori informazioni puoi consultare questa risorsa.


4
Questa è una domanda di 6 anni e ha accettato la risposta. La tua risposta non fornisce nulla di nuovo -1
Makky,

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

4
Invece di pubblicare un po 'di codice, aiuteresti di più OP spiegando la tecnica. Come funziona, perché funziona?
Zabuzard,

1
Mettere degli spazi attorno agli operatori rende molto più facile la lettura e la manutenzione.
Geowar,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.