web-dev-qa-db-ja.com

短いIF-ELSEステートメント

コードを読みやすくしようとしているので、短いIFステートメントを使用することにしました。

動作しないコード(「ステートメントではない」)を次に示します。

jXPanel6.isVisible() ? jXPanel6.setVisible(true) : jXPanel6.setVisible(false);

これの何が問題になっていますか?ブラケットが必要ですか?どこ?

76
monczek

「三項式」x ? y : zは、条件付き割り当てにのみ使用できます。つまり、次のようなことができます。

String mood = inProfit() ? "happy" : "sad";

これは、3項式が何か(この例ではString型)を返しているためです。

短いインラインのif-elseとして使用することを意図したものではありません。特に、個々の部分が値を返さない場合、または互換性のない型の値を返す場合は使用できません。 (したがって、両方のメソッドが同じ値を返す場合にこれを行うことができますが、副作用のためにのみshould n'tを呼び出します)。

したがって、これを行う適切な方法は、if-elseブロックを使用することです。

if (jXPanel6.isVisible()) {
    jXPanel6.setVisible(true);
}
else {
    jXPanel6.setVisible(false);
}

もちろんこれは短縮できます

jXPanel6.setVisible(jXPanel6.isVisible());

私にとっては、後者の表現はどちらも読みやすく、あなたがやろうとしていることをより明確に伝えています。 (そして、ちなみに、条件を間違った方法で取得しましたか?これは、トグルではなく、ノーオペレーションのようです)。

文字数が少ない読みやすさを混同しないでください。重要なポイントは最も理解しやすいものです。そして、言語機能を軽度に誤用することは、読者を混乱させる、または少なくとも彼らに精神的なダブルテイクをさせる明確な方法です。

202
Andrzej Doyle
jXPanel6.setVisible(jXPanel6.isVisible());

またはあなたのフォームで:

jXPanel6.setVisible(jXPanel6.isVisible()?true:false);
27
mauretto

他の人が示したように、何かの形

x ? y : z

(完全な)ステートメントではなく、式です。割り当ての右側や関数のパラメータなど、どこかで使用する必要がある右辺値です。

おそらくあなたはこれを見ることができます: http://download.Oracle.com/javase/tutorial/Java/nutsandbolts/expressions.html

3

三項演算子は、代入の右側のみであり、独自のステートメントではありません。

http://www.devdaily.com/Java/edu/pj/pj010018/

3
perdian

私はパーティーに少し遅れましたが、将来の読者のために。

私が知ることができることから、あなたはちょうど可視性状態を正しく切り替えたいですか?なぜ!演算子を使用しないのですか?

jxPanel6.setVisible(!jxPanel6.isVisible);

Ifステートメントではありませんが、例に関連するコードではこの方法を好みます。

2
Andy Body