1. ホーム
  2. java

[解決済み] Java の ?: 演算子は何と呼ばれ、何をするのですか?

2022-03-03 16:58:30

質問

私は数年前からJavaを使用していますが、最近までこの構成に出会ったことがありません。

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

これはおそらく非常に単純な質問だと思いますが、どなたか解説していただけませんか? どのように読めばいいのでしょうか? 私はそれがどのように機能するかについてかなり知っていると思います。

  • もし isHere が真である場合。 getHereCount() が呼び出されます。
  • もし isHere が偽の場合 getAwayCount() が呼び出されます。

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

どのように解決するのですか?

の短縮形ですね。

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

というものです。 条件演算子 . 多くの人が(間違って)こう呼びます。 三項演算子 なぜなら、Java、C、C++、そしておそらく他の多くの言語でも、唯一の三項演算子だからです。しかし、理論的には 可能性がある は1つしかないのに対して、他の三項演算子があります。 条件演算子 .

正式名称は Java言語仕様書 :

§15.25 条 条件演算子 ?

条件演算子 ? : は、ある式のブール値を用いて、他の2つの式のうちどちらを評価すべきかを決定する。

どちらの分岐も、戻り値を持つメソッドにつながる必要があることに注意してください。

第2、第3オペランド式がvoidメソッドの呼び出しであることは、コンパイル時のエラーとなる。

実は、式文の文法によって、( §14.8 ) では、条件式が void メソッドの呼び出しが出現するようなコンテキストに出現することは許されません。

では、もし doSomething()doSomethingElse() は void メソッドであるため、これを圧縮することはできません。

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

をこの中に入れてください。

someBool ? doSomething() : doSomethingElse();

シンプルな言葉

booleanCondition ? executeThisPartIfBooleanConditionIsTrue : executeThisPartIfBooleanConditionIsFalse