Java ifステートメントの短縮形


201

Java if文を短い形式で書く方法があることは知っています。

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

上記の5行の短い形式を1行に記述する方法を知っている人はいますか?



2
私はあなたがあなたのif論理を間違った方法で得たと思います。
NPE、2012年

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

9
@SteveKuo削除できるスペースは3つあります。;)
ピーター・ローリー

2
if (city.getName()!= null) name = city.getName(); else name="N/A";
アントンDozortsev 2014年

回答:


423

三項演算子を使用します。

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

私はあなたが後方に条件を持っていると思います-それがnullであるなら、あなたは値が "N / A"であることを望みます。

都市がnullの場合はどうなりますか?その場合、コードは*ベッドにヒットします。別のチェックを追加します。

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

12
+1。ただし、括弧が重複しています。私は次のように書いたでしょう: name = city.getName() == null ? "N/A" : city.getName();
Andres F.

20
スタイルと味の問題:ブール句のグループ化を明確にしたい。
duffymo 2012年

4
何でも-私はDeMorganの定理を使用して、必要なものを得ました。ロジックを正しく表現していれば、編集する必要はありません。
duffymo 2012年

2
参考までに、括弧は不要です。あなたはただすることができますname = city.getName()==null ? "N/A" : city.getName()
スティーブKuo

4
ifをString cityName = city.getName();スローしませんNullPointerExceptioncity == null?したがって、あなたの中間の解決策は間違いなく最高です(PSと私は「不要な」括弧を承認します!コーディングの99%はコンパイラではなく他の人(そしてあなたの将来の自己)と通信していることを人々は覚えておく必要があります-それ以外の場合cを使用します!)
Alex

32

.getName()2回呼び出すのを避けるには、

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

2
変更可能な都市を持つマルチユーザーシステムでは、が介在する可能性がありcity.setName(null)ます。あなたの答えはそれをうまく処理します。
エモリー

27

それを行う方法は三項演算子を使用することです:

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

ただし、上記のコードにタイプミスがあると思います。

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

23

?:Javaの演算子

Javaでは次のように記述します。

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

単一の条件に基づいて単一の変数を2つの状態のいずれかに設定することは、if-elseの一般的な使用方法であり、そのためのショートカットが考案されています。条件演算子?:です。条件演算子を使用すると、上記の例を次のように1行で書き直すことができます。

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

(a> b)?a:b; aまたはbの2つの値のいずれかを返す式です。条件(a> b)がテストされます。trueの場合、最初の値aが返されます。falseの場合、2番目の値bが返されます。どちらの値が返されるかは、条件テストa> bによって異なります。条件はブール値を返す任意の式です。


21

Java 8の場合:

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

18

?: 三項演算子の使い方をいつも忘れています。この補足的な回答は簡単に思い出させてくれます。の略記ですif-then-else

myVariable = (testCondition) ? someValue : anotherValue;

どこ

  • () 保持します if
  • ? 手段 then
  • : 手段 else

と同じです

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

10

if, else if, elseステートメントは短い形式で記述できます。例えば:

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

これは以下の短い形式です。

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

1
これはまだ求められていなかったので-1。
Makky、2015

8

1. ブラケット改行を削除できます

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

2. Java では?:演算子を使用できます。

構文:

Variable = Condition ? BlockTrue : BlockElse;

だからあなたのコードでは次のようにすることができます:

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

3. ブール値の条件結果を割り当てます

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

追加: 好奇心旺盛

JAVAlike Groovyに基づく一部の言語では、次の構文を使用できます。

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

オペレーター?:は、求めている変数から返された値を割り当てます。この場合、city.getName()ifでない場合の値null



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

最初に状態(city.getName() == null)がチェックされます。「はい」の場合、"N/A"名前に割り当てられるか、単純にname="N/A"またはそうでなければ、値from city.getName()が名前に割り当てられname=city.getName()ます。

ここで注意すること:

  1. 条件は括弧内にあり、その後に疑問符が続きます。それが私が書い(city.getName() == null)?た理由です。ここで、疑問符は状態の直後にあります。見やすく、読みやすく、推測も簡単!
  2. コロンの左側の値(:)およびコロンの右側の値(a)コロンの左側の値は、条件がtrueの場合に割り当てられます。それ以外の場合は、コロンの右側の値が変数に割り当てられます。

ここに参照があります:http : //www.cafeaulait.org/course/week2/43.html


3

ここに1行のコードがあります

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

これがどのように機能するかの例であり、jsファイルのコードの下で実行し、結果を理解します。これ("Data" != null)は通常通りの状態でif()あり"Data"、この状態が成立したときの発言です。これ" : "はelseとして機能し"N/A"、else条件のステートメントです。これがロジックの理解に役立つことを願っています。

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

console.log(name);



2

シンプルで明確:

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

長いバージョン:

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

または私が他のコードリーダーにわかりやすくするためにそれをどのように使用しているか:

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

0

Javaでは三項演算子を使用できます。

構文:

Condition ? Block 1 : Block 2

あなたのコードでは、このようにすることができます、

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

詳細については、このリソースを参照してください。


4
これは6年前の質問で、回答を受け入れました。あなたの答えは新しいものを提供しません-1
Makky

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

4
単にコードを投稿するのではなく、テクニックを説明することでOPをさらに支援します。それはどのように機能しますか、なぜそれは機能しますか?
Zabuzard 2017

1
オペレーターの周りにスペースを置くと、読みやすく、保守しやすくなります。
geowar 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.