Java の ?: 演算子とは何ですか? また、どのような機能がありますか? 質問する

Java の ?: 演算子とは何ですか? また、どのような機能がありますか? 質問する

私は数年間 Java を使ってきましたが、最近までこの構造に出会ったことはありませんでした。

int count = isHere ? getHereCount(index) : getAwayCount(index);

これはおそらく非常に簡単な質問ですが、誰か説明してもらえますか? どのように読むのですか? 仕組みはわかっていると思います。

  • が真の場合isHeregetHereCount()が呼び出されます。
  • isHerefalse の場合はgetAwayCount()が呼び出されます。

正しいですか?この構造は何と呼ばれますか?

ベストアンサー1

はい、それは

int count;
if (isHere)
    count = getHereCount(index);
else
    count = getAwayCount(index);

それは条件演算子多くの人が(誤って)それを三項演算子なぜなら、Java、C、C++、そしておそらく他の多くの言語では、三項演算子(3つの引数を取る)はこれが唯一のものだからです。しかし、理論的にはできたもう一つの三項演算子は1つしか存在できないが、条件演算子

正式名称はJava言語仕様:

§15.25 条件演算子 ? :

条件演算子は、? :1 つの式のブール値を使用して、他の 2 つの式のどちらを評価するかを決定します。

両方のブランチとも戻り値を持つメソッドにつながる必要があることに注意してください。

2 番目または 3 番目のオペランド式のいずれかが void メソッドの呼び出しである場合、コンパイル時エラーになります。

実際、表現文の文法によれば(§14.8) の場合、void メソッドの呼び出しが出現する可能性のあるコンテキストに条件式を出現させることは許可されません。

したがって、doSomething()およびがdoSomethingElse()void メソッドである場合、これを圧縮することはできません。

if (someBool)
    doSomething();
else
    doSomethingElse();

次のようにします:

someBool ? doSomething() : doSomethingElse();

簡単な言葉:

booleanCondition ? executeThisPartIfBooleanConditionIsTrue : executeThisPartIfBooleanConditionIsFalse 

おすすめ記事