やあ!今日のレッスンはそれほど長くはありませんが、間違いなく役に立つでしょう :) いわゆる三項演算子について話します。 ターナリーとは「3 つの部分から構成される」という意味です。
if-else
これは、すでに説明した制御フロー ステートメントに代わるものです。例を挙げてみましょう。誰かが R 指定の映画を見に行くことにしたとします (17 歳未満には親または成人の保護者の同伴が必要です)。案内係は入り口で年齢チェックをします。年齢チェックに合格した場合は入場が許可されます。そうでない場合、彼は家に送られます。クラスを宣言しPerson
、if-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 ちなみに、条件を囲む括弧は必須ではありません。読みやすくするために括弧を追加しました。それらがなくても機能します。
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
。はい、コードは大きくなりますが、はるかに読みやすくなります。そして、あなたの同僚がこのコードを継承すれば、パームに直面することはありません:) 最後に、私はあなたに良いものをお勧めします。レッスンではコードの可読性について触れました。ロバート・マーティンの著書『クリーン・コード』は古典となっており、このトピックに特化しています。 プログラマー向けのベスト プラクティスと推奨事項がまとめられており、機能するだけでなく読みやすいコードを作成するのに役立ちます。
さらに読む: |
---|
GO TO FULL VERSION