CodeGym /Java Blog /ランダム /三項演算子
John Squirrels
レベル 41
San Francisco

三項演算子

ランダム グループに公開済み
やあ!今日のレッスンはそれほど長くはありませんが、間違いなく役に立つでしょう :) いわゆる三項演算子について話します。 三項演算子 - 1ターナリーとは「3 つの部分から構成される」という意味です。if-elseこれは、すでに説明した制御フロー ステートメントに代わるものです。例を挙げてみましょう。誰かが R 指定の映画を見に行くことにしたとします (17 歳未満には親または成人の保護者の同伴が必要です)。案内係は入り口で年齢チェックをします。年齢チェックに合格した場合は入場が許可されます。そうでない場合、彼は家に送られます。クラスを宣言しPersonif-elseステートメントを使用してこれを確認してみましょう。

public class Person {

   private int age;

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

   public int getAge() {
       return age;
   }

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

   public static void main(String[] args) {

       Person person = new Person(22);

       String usherResponse;

       if (person.getAge() >= 18) {
           usherResponse = "Everything is in order. Come in!";
       } else {
           usherResponse = "This film is not suitable for your age!";
       }

       System.out.println(usherResponse);

   }
}
コンソール出力:

"Everything is in order. Come in!"
コンソール出力を削除すると、チェックは次のようになります。

if (person.getAge() >= 18) {
           usherResponse = "Everything is in order. Come in!";
       } else {
           usherResponse = "This film is not suitable for your age!";
       }
ここでのロジックは非常に単純です。1 つの条件がチェックされます (年齢 >= 18)。その結果に基づいて、変数にはusherResponse案内係の応答を含む 2 つの文字列のいずれかが割り当てられます。このような状況 (「1 つの条件 - 2 つの可能な結果」) は、プログラミングでは非常に一般的です。それが三項演算子が作成された理由です。これを使用すると、チェックを 1 行のコードに簡略化できます。

public static void main(String[] args) {

   Person person = new Person(22);

   String usherResponse = (person.getAge() > 18) ? "Everything is in order. Come in!" : "This film is not suitable for your age!";

   System.out.println(usherResponse);

}
この演算子がどのように機能するかは次のとおりです。これは 3 つのコンポーネントが含まれるため、三項演算子と呼ばれます。
  • 条件は 1 つ ( person.getAge() > 18)
  • 考えられる結果は 2 つ ( 「すべて順調です。入ってください!」「この映画はあなたの年齢にはふさわしくありません!」 )
まず条件を書き、その後に疑問符を続けます。

person.getAge() > 18 ?
「この人の年齢は18歳以上ですか?」次に、最初の値 を書き込みます。この値は、条件が次のように評価される場合にtrue使用されます。

String usherResponse = person.getAge() > 18 ? "Everything is in order. Come in!"
この人の年齢は18歳以上ですか?「はい」の場合、変数を 「すべて順調です。入ってください!」usherResponse に設定します。 次に、「:」記号と2 番目の値が続きます。この値は、条件が次のように評価される場合にfalse使用されます。

String usherResponse = person.getAge() > 18 ? "Everything is in order. Come in!" : "This film is not suitable for your age!";
この人の年齢は18歳以上ですか?「はい」の場合、変数を 「すべて順調です。入ってください!」usherResponse に設定します。。そうでない場合は、変数を 「この映画はあなたの年齢に適していません!」usherResponse に設定します。 一般に、三項演算子のロジックは次のようになります。状態 ?結果 1 : 結果 2 三項演算子 - 2ちなみに、条件を囲む括弧は必須ではありません。読みやすくするために括弧を追加しました。それらがなくても機能します。

public static void main(String[] args) {

   Person person = new Person(22);

   String usherResponse = person.getAge() > 18 ? "Everything is in order. Come in!" : "This film is not suitable for your age!";

   System.out.println(usherResponse);

}
それで、何を使えばいいのでしょうか?ステートメントif-elseですか、それとも三項演算子ですか? 性能に関しては、違いはありません。より正確に言えば、あるかもしれないが、それは重要ではない。ここで最大の考慮事項は、コードの読みやすさです。作成するコードは正しく動作するだけでなく、読みやすくなければなりません。結局のところ、他のプログラマーや同僚によって「継承」される可能性があります。理解するのが難しい場合は、彼らの仕事とあなたの仕事が複雑になります(彼らは5分ごとに説明のために走ってきます)。 一般的な推奨事項は次のとおりです。条件が単純で簡単に検証できる場合は、三項演算子を問題なく使用できます。これにより、コードの量と数を減らすことができます。if-elseステートメントが存在します (すでに多数のステートメントがある可能性があります)。ただし、条件が複雑で複数のステップが含まれる場合は、ステートメントを使用することをお勧めしますif-else。たとえば、この場合、三項演算子を使用するのは悪い考えです。

String usherResponse = (person.getAge() > 18 && (person.hasTicket() || person.hasCoupon()) && !person.hasChild()) ? "Come in!" : "You can't come in!";
ここで何が起こっているのかはすぐにはわかりません。コードが非常に読みにくくなってしまいました。すべては複雑な条件によるものです。
  • 18 歳以上で、チケット (またはフリーパス) を持っていて、小さな子供がいない場合は、入場できます。
  • 条件の一部でも偽であれば、それはできません。
ここでは明らかに を使用する方が良いでしょうif-else。はい、コードは大きくなりますが、はるかに読みやすくなります。そして、あなたの同僚がこのコードを継承すれば、パームに直面することはありません:) 最後に、私はあなたに良いものをお勧めします。レッスンではコードの可読性について触れました。ロバート・マーティンの著書『クリーン・コード』は古典となっており、このトピックに特化しています。 三項演算子 - 4プログラマー向けのベスト プラクティスと推奨事項がまとめられており、機能するだけでなく読みやすいコードを作成するのに役立ちます。
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION