Skrócony formularz instrukcji if Java

201

Wiem, że istnieje sposób na napisanie ifinstrukcji Java w krótkiej formie.

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

Czy ktoś wie, jak napisać krótki formularz dla powyższych 5 wierszy w jednym wierszu?

Makky
źródło
5
google operator trójskładnikowy w java :)
CoolBeans
2
Zakładam, ifże źle zrozumiałeś swoją logikę.
NPE
7
if (city.getName()!=null){name = city.getName();}else{name="N/A"}
Steve Kuo,
9
@ SteveKuo Istnieją trzy spacje, które można usunąć. ;)
Peter Lawrey
2
if (city.getName()!= null) name = city.getName(); else name="N/A";
Anton Dozortsev

Odpowiedzi:

423

Użyj operatora trójskładnikowego:

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

Myślę, że masz warunki do tyłu - jeśli jest to null, chcesz, aby wartość była „nie dotyczy”.

Co jeśli miasto jest puste? W takim przypadku Twój kod * uderza w łóżko. Dodałbym kolejny czek:

name = ((city == null) || (city.getName() == null) ? "N/A" : city.getName());
duffymo
źródło
12
+1, chociaż masz nadmiarowe nawiasy. Napisałbym: name = city.getName() == null ? "N/A" : city.getName();
Andres F.
20
Kwestia stylu i smaku: lubię wyraźne grupowanie klauzuli boolowskiej.
duffymo
4
Cokolwiek - użyłem twierdzenia DeMorgan i dostałem to, czego potrzebowałeś. Nie trzeba edytować, o ile poprawnie wyrażasz logikę.
duffymo
2
Dla twojej informacji zewnętrzny nawias jest niepotrzebny. Możesz po prostu zrobićname = city.getName()==null ? "N/A" : city.getName()
Steve Kuo,
4
Nie String cityName = city.getName();rzucisz NullPointerExceptionif city == null? Dlatego powiedziałbym, że twoje środkowe rozwiązanie jest zdecydowanie najlepsze (PS i ja aprobuję „niepotrzebne” nawiasy! Ludzie muszą pamiętać, że 99% kodowania komunikuje się z innymi ludźmi (i twoim przyszłym sobą), a nie z kompilatorem - inaczej użylibyśmy c!)
Alex
32

Aby uniknąć .getName()podwójnego połączenia , skorzystałbym

name = city.getName();
if (name == null) name = "N/A";
Peter Lawrey
źródło
2
W systemie z wieloma użytkownikami i zmiennym miastem może wystąpić interwencja city.setName(null). Twoja odpowiedź dobrze to rozwiązuje.
emory
27

Można to zrobić za pomocą operatora trójskładnikowego:

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

Uważam jednak, że masz literówkę w powyższym kodzie i chcesz powiedzieć:

if (city.getName() != null) ...
Sam Goldberg
źródło
23

The? : operator w Javie

W Javie możesz napisać:

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

Ustawienie jednej zmiennej na jeden z dwóch stanów w oparciu o jeden warunek jest tak powszechnym zastosowaniem if-else, że opracowano dla niego skrót, operator warunkowy?:. Za pomocą operatora warunkowego możesz przepisać powyższy przykład w jednym wierszu, takim jak ten:

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

(a> b)? a: b; to wyrażenie, które zwraca jedną z dwóch wartości, a lub b. Warunek (a> b) jest testowany. Jeśli to prawda, zwracana jest pierwsza wartość a. Jeśli jest to fałsz, zwracana jest druga wartość, b. Niezależnie od tego, która wartość zostanie zwrócona, zależy od testu warunkowego a> b. Warunkiem może być dowolne wyrażenie zwracające wartość logiczną.

Reza Baradaran Gazorisangi
źródło
21

w java 8:

name = Optional.ofNullable(city.getName()).orElse("N/A")
digitebs
źródło
18

Zawsze zapominam, jak korzystać z ?: operatora trójskładnikowego . Ta uzupełniająca odpowiedź jest szybkim przypomnieniem. To jest skrót od if-then-else.

myVariable = (testCondition) ? someValue : anotherValue;

gdzie

  • () posiada if
  • ? znaczy then
  • : znaczy else

To jest to samo co

if (testCondition) {
    myVariable = someValue;
} else {
    myVariable = anotherValue;
}
Suragch
źródło
10

Możesz pisać if, else if, elsewyciągi w krótkiej formie. Na przykład:

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

To krótka forma:

Boolean isCapital = city.isCapital();
String isCapitalName;
if(isCapital == null) {
    isCapitalName = "";
} else if(isCapital) {
    isCapitalName = "Capital";
} else {
    isCapitalName = "City";
}
OctopusSD
źródło
1
To nie było zadawane, więc nadal -1.
Makky,
8

1. Możesz usunąć nawiasy klamrowe i podziały linii .

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

2. Możesz używać ?: Operatorów w java.

Składnia:

Variable = Condition ? BlockTrue : BlockElse;

W swoim kodzie możesz to zrobić w następujący sposób:

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

3. Przypisz wynik warunku dla wartości logicznej

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

DODATKOWY: dla ciekawskich

W niektórych językach opartych na JAVApodobnych Groovymożna użyć tej składni:

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

Operator ?:przypisuje wartość zwróconą przez zmienną, o którą prosimy. W tym przypadku wartość, city.getName()jeśli nie jest null.

IgniteCoders
źródło
5
name = (city.getName() != null) ? city.getName() : "N/A";
shift66
źródło
3
name = ( (city.getName() == null)? "N/A" : city.getName() );

najpierw (city.getName() == null)sprawdzany jest warunek . Jeśli tak, to "N/A"jest przypisane do nazwy lub po prostu name="N/A"albo wartość z city.getName()jest przypisana do nazwy, tj name=city.getName().

Rzeczy, na które warto zwrócić uwagę:

  1. warunek znajduje się w nawiasie, po którym następuje znak zapytania. Dlatego piszę (city.getName() == null)?. Tutaj znak zapytania znajduje się zaraz po warunku. Łatwo zobaczyć / odczytać / zgadywać nawet!
  2. wartość po lewej stronie dwukropka ( :) i wartość po prawej stronie dwukropka (a) wartość po lewej stronie dwukropka jest przypisywana, gdy warunek jest spełniony, w przeciwnym razie wartość po prawej stronie dwukropka jest przypisywana do zmiennej.

tutaj jest odniesienie: http://www.cafeaulait.org/course/week2/43.html

Arafe Zawad Sajid
źródło
3

tutaj jest jeden kod wiersza

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

oto przykład, jak to działa, uruchom poniżej kodu w pliku js i zrozum wynik. Jest ("Data" != null)to warunek taki, jak robimy to normalnie if()i "Data"jest stwierdzeniem, kiedy warunek ten się spełnił. to " : "działa jak inne i "N/A"jest stwierdzeniem warunku else. Mam nadzieję, że pomoże ci to zrozumieć logikę.

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

console.log(name);

Waqas Qayum
źródło
2

Użyj org.apache.commons.lang3.StringUtils:

name = StringUtils.defaultString(city.getName(), "N/A");
Paul Rambags
źródło
2

Prosty i przejrzysty:

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

długa wersja:

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

lub w jaki sposób używam go, aby być czytelnym dla innych czytników kodów:

 String manType = "poor";
    if (hasMoney())
        manType = "rich";
Vasile Doe
źródło
0

Możesz użyć trójskładnikowego operatora w java.

Składnia:

Condition ? Block 1 : Block 2

W swoim kodzie możesz to zrobić,

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

Aby uzyskać więcej informacji, możesz polecić ten zasób.

siedmiodniowa żałoba
źródło
4
To pytanie ma 6 lat i przyjął odpowiedź. Twoja odpowiedź nie zawiera niczego nowego -1
Makky
-3
name = city.getName()!=null?city.getName():"N/A"
Cień
źródło
4
Zamiast po prostu opublikować kod, pomógłbyś OP bardziej, wyjaśniając technikę. Jak to działa, dlaczego to działa?
Zabuzard,
1
Umieszczenie przestrzeni wokół operatorów znacznie ułatwia czytanie i utrzymanie.
geowar