JavaRush /Java Blog /Random-JA /Javaの三項演算子

Javaの三項演算子

Random-JA グループに公開済み
こんにちは!今日の講義はそれほど長くはありませんが、間違いなく役に立ちます :) いわゆる三項演算子について話します。 三項演算子 - 1「ターナリー」とは「三重」という意味です。if-elseこれは、すでによく知られている条件演算子に代わるものです。例を挙げてみましょう。ある人が 18 歳以上指定の映画を観に映画館に行くことにしたとします。警備員は入り口で彼の年齢をチェックし、年齢制限を満たしていれば入場を許可し、満たしていなければ家に帰します。クラスを作成してMan、次のようにチェックしてみましょうif-else
public class Man {

   private int age;

   public Man(int age) {
       this.age = age;
   }

   public int getAge() {
       return age;
   }

   public void setAge(int age) {
       this.age = age;
   }

   public static void main(String[] args) {

       Man man = new Man(22);

       String securityAnswer;

       if (man.getAge() >= 18) {
           securityAnswer = "It's all right, come in!";
       } else {
           securityAnswer = "This movie is not suitable for your age!";
       }

       System.out.println(securityAnswer);

   }
}
コンソール出力:

"Все в порядке, проходите!"
コンソールへの出力を削除すると、テストは次のようになります。
if (man.getAge() >= 18) {
           securityAnswer = "It's all right, come in!";
       } else {
           securityAnswer = "This movie is not suitable for your age!";
       }
実際、ここでは単純なロジックが機能します。つまり、1 つの条件がチェックされます (年齢 >= 18)。これに応じて、securityAnswerガードの応答を含む 2 行のうち 1 行が変数に割り当てられます。「1 つの条件 - 2 つの可能な結果」という状況は、プログラミングにおいて非常に頻繁に発生します。したがって、同じ三項演算子がそれらに対して作成されました。これを使用すると、検証を 1 行のコードに簡素化できます。
public static void main(String[] args) {

   Man man = new Man(22);

   String securityAnswer = (man.getAge() >= 18) ? "It's all right, come in!" : "This movie is not suitable for your age!";

   System.out.println(securityAnswer);

}
これがこのオペレーターの仕事の様子です。3 つのコンポーネントがその作業に参加するため、これは 3 要素 (トリプル) と呼ばれます。
  • 条件は 1 つ ( man.getAge() >= 18)
  • 考えられる結果は 2 つあります ( 「大丈夫、先に進みましょう!」「この映画はあなたの年齢にはふさわしくありません!」 )
まず、コード内に条件が記述され、その後に疑問符が続きます。
man.getAge() >= 18 ?
「その人の年齢は18歳以上ですか?」 以下は最初の結果です。条件が を返すtrue、つまり true の場合に起動されます。
String securityAnswer = man.getAge() >= 18 ? "It's all right, come in!"
その人の年齢は 18 歳以上ですか? 「はい」の場合、変数に securityAnswer 「すべて問題ありません、入ってください!」を割り当てます。 この後に「 」演算子が続き:、その後 2 番目の結果が書き込まれます。条件が を返す場合false、つまり false の場合に起動されます。
String securityAnswer = man.getAge() >= 18 ? "It's all right, come in!" : "This movie is not suitable for your age!";
その人の年齢は 18 歳以上ですか? 「はい」の場合、変数に securityAnswer 「すべて問題ありません、入ってください!」を割り当てます。。そうでない場合は、変数に 「この映画はあなたの年齢には適していません!」というsecurityAnswer 値を代入します。 三項演算子の一般的なロジックは次のとおりです。状態 ?result 1 : result 2 三項演算子 - 2ちなみに、条件を括弧で囲む必要はありません。読みやすくするために括弧を付けています。それらがなくても動作します:
public static void main(String[] args) {

   Man man = new Man(22);

   String securityAnswer = man.getAge() >= 18 ? "It's all right, come in!" : "This movie is not suitable for your age!";

   System.out.println(securityAnswer);

}
if-else、または三項演算子は 何を使用する必要がありますか? 性能面では大きな違いはありません。より正確に言えば、存在する可能性はありますが、重要ではありません。ここでの質問は、むしろコードの読みやすさに関係しています。これはプログラミングにおいて非常に重要です。作成したコードは正しく動作するだけでなく、読みやすくなければなりません。結局のところ、他のプログラマーや同僚に「継承」できるのです。そして、それが理解するのが難しい場合、彼らの仕事とあなたの仕事の両方が複雑になります - 彼らは5分ごとに説明のためにあなたのところに走ってきます。一般的な推奨事項は次のように聞こえるかもしれません。条件が単純でチェックしやすい場合は、三項演算子を問題なく使用できます。if-elseこうすることで、すでにたくさんあるコードの量とチェックの数を減らすことができます。ただし、条件が複雑で多段階の場合は、 を使用することをお勧めしますif-else。たとえば、この場合、三項演算子を使用するのは悪い考えです。
String securityAnswer = (man.getAge() >= 18 && (man.hasTicket() || man.hasCoupon()) && !man.hasChild())  ? "Come in!" : "You can not pass!";
したがって、ここで何が起こっているのかすぐには理解できないでしょう。コードが非常に読みにくくなってしまいました。それもすべて、困難な状況のためです。
  • 18 歳以上で、チケットを持っている(または入場無料のクーポンを持っている)場合、+ 小さな子供を連れていない場合は、通行できます。
  • 条件の少なくとも 1 つの部分が false を返す場合、それは失敗します。
これは明らかに を使用した方が良い場合ですif-else。はい、コードのサイズは大きくなりますが、何倍も読みやすくなります。そして、あなたの同僚がそのようなコードを継承したとしても、頭を抱えている人は誰もいないでしょう :) 最後に、私はあなたにこの本をお勧めします。講義ではコードの可読性について触れました。ロバート・マーティンによる古典的な本「クリーン・コード」は彼女に捧げられています。 三項演算子 - 3これには、プログラマー向けのベスト プラクティスと推奨事項が含まれており、これにより、機能するだけでなく読みやすいコードを作成できるようになります。 JavaRush にこの本のレビューがあります。
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION