Java if ifadesi için kısa biçim


201

Bir Java ifdeyimini kısa biçimde yazmanın bir yolu olduğunu biliyorum .

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

Yukarıdaki 5 satır için kısa formu bir satıra nasıl yazacağını bilen var mı?



2
Sanırım ifmantığınızı yanlış yola soktunuz.
NPE

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

9
@SteveKuo Üç boşluk kaldırabilirsiniz. ;)
Peter Lawrey

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

Yanıtlar:


425

Üçlü işleci kullanın:

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

Sanırım koşulların geriye doğru olduğunu - boşsa, değerin "Yok" olmasını istersiniz.

Ya şehir boşsa? Kodunuz * bu durumda yatağa çarpar. Başka bir çek eklerdim:

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

12
+1, ancak fazla paranteziniz var. Şunu name = city.getName() == null ? "N/A" : city.getName();
yazabilirdim

20
Bir stil ve lezzet meselesi: Boolik cümlenin gruplandırılmasını netleştirmek istiyorum.
duffymo

4
Her neyse - DeMorgan'ın teoremini kullandım ve ihtiyacınız olanı aldım. Mantığı doğru şekilde ifade ettiğiniz sürece düzenlemeye gerek yoktur.
duffymo

2
FYI dış parantez gereksizdir. Yapabilirsinizname = city.getName()==null ? "N/A" : city.getName()
Steve Kuo

4
String cityName = city.getName();Bir NullPointerExceptionif atmayacak mısın city == null? Bu nedenle orta çözümünüzün kesinlikle en iyisi olduğunu söyleyebilirim (PS ve ben 'gereksiz' parantezleri onaylıyoruz! İnsanlar kodlamanın% 99'unun derleyici ile değil diğer insanlarla (ve gelecekteki benliğinizle) iletişim kurduğunu hatırlamak zorundadır - aksi takdirde c kullanacağız!)
Alex

33

Seslenmeyi önlemek için .getName()İki kez için

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

2
Değişken bir şehri olan çok kullanıcılı bir sistemde, bir müdahale olabilir city.setName(null). Cevabınız bunu düzgün bir şekilde ele alıyor.
emory

27

Bunu yapmanın yolu üçlü operatör ile:

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

Ancak, yukarıdaki kodunuzda bir yazım hatası olduğuna inanıyorum ve demek istediniz:

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

23

? : Java'daki operatör

Java'da şunları yazabilirsiniz:

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

Tek bir koşula bağlı olarak iki durumdan birine tek bir değişken ayarlamak, eğer koşullu işleç,?: İçin bir kısayol tasarlanmışsa, öylesine yaygın bir kullanımdır. Koşullu işleci kullanarak yukarıdaki örneği aşağıdaki gibi tek bir satırda yeniden yazabilirsiniz:

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

(a> b)? a: b; "a", a veya b olmak üzere iki değerden birini döndüren bir ifadedir. Durum, (a> b) test edilir. Doğruysa ilk değer olan a, döndürülür. Yanlışsa, ikinci değer olan b, döndürülür. Hangi değer döndürülürse koşullu teste bağlıdır, a> b. Koşul, bir boole değeri döndüren herhangi bir ifade olabilir.


21

java 8'de:

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

18

?: Üçlü operatörü nasıl kullanacağımı her zaman unutuyorum . Bu ek cevap hızlı bir hatırlatmadır. Bunun için kestirme if-then-else.

myVariable = (testCondition) ? someValue : anotherValue;

nerede

  • () tutar if
  • ? anlamına geliyor then
  • : anlamına geliyor else

Aynı

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

10

if, else if, elseİfadeleri kısa formda yazabilirsiniz . Örneğin:

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

Bu kısa biçimidir:

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

1
Buna hala -1 sorulmadı.
Makky

8

1. Köşeli ayraçları ve satır sonlarını kaldırabilirsiniz .

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

2. kullanabilirsiniz :? Operatörleri java.

Sözdizimi:

Variable = Condition ? BlockTrue : BlockElse;

Kodunuzda şöyle yapabilirsiniz:

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

3. Boolean için koşul sonucu atayın

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

EKSTRA: meraklı için

JAVAGibi bazı dillerdeGroovy , bu sözdizimini kullanabilirsiniz:

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

Operatör ?:, istediğimiz değişkenten döndürülen değeri atar. Bu durumda, city.getName()değilse değeri null.


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

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

önce durum (city.getName() == null)kontrol edilir. Evet ise, "N/A"isme atanır veya basitçe name="N/A"veya başka bir değer city.getName()isme atanır, yani name=city.getName().

Burada dikkat edilmesi gerekenler:

  1. koşul parantez içinde ve ardından bir soru işareti vardır. Bu yüzden yazıyorum (city.getName() == null)?. Burada soru işareti koşuldan hemen sonra. Görmek / okumak / tahmin etmek bile kolay!
  2. iki nokta üst üste değeri ( :) ve iki nokta üst üste işareti (a) iki nokta üst üste değeri koşul doğruyken atanır, aksi takdirde iki nokta üste sağ değeri değişkene atanır.

işte bir referans: http://www.cafeaulait.org/course/week2/43.html


3

işte bir satır kodu

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

nasıl çalışır, js dosyasında kodun altında çalıştırın ve sonucu anlamak. Bu ("Data" != null), normalde yaptığımız gibi bir durumdur if()ve "Data"bu koşulun gerçekleştiği zaman ifade eder. bu " : "başka şekilde hareket eder ve "N/A"başka bir durumun ifadesidir. Umarım bu mantığı anlamanıza yardımcı olur.

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

console.log(name);


2

Org.apache.commons.lang3.StringUtils kullanın:

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

2

Basit ve anlaşılır:

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

uzun versiyon:

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

veya diğer kod okuyucular için net olması için nasıl kullanıyorum:

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

0

Java'da üçlü operatör kullanabilirsiniz.

Sözdizimi:

Condition ? Block 1 : Block 2

Yani kodunuzda bunu yapabilirsiniz,

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

Daha fazla bilgi için bu kaynağa başvurabilirsiniz .


4
Bu 6 yaşında bir soru ve cevabı kabul etti. Cevabınız yeni bir şey
sağlamıyor

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

4
Sadece bir kod göndermek yerine tekniği açıklayarak OP'ye daha fazla yardımcı olursunuz. Nasıl çalışır, neden çalışır?
Zabuzard

1
Operatörlerinizin etrafına boşluk koymak okumayı ve bakımını kolaylaştırır.
geowar
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.