JavaRush /Java Blog /Random-JA /ヨーダ条件
MAX
レベル 16
Киров

ヨーダ条件

Random-JA グループに公開済み
スター・サーガのエピソード V のリリース 40 周年を記念して、スター・ウォーズと Java / JavaRush のすべてのファンに短い投稿を捧げます。 ヨーダの条件 - 1インターネット上で興味深いものがたくさん見つかることがあります。先日、ヨーダ条件と呼ばれる、一見するとかなり面白いプログラミング手法を見つけました。つまり、ヨーダ条件 (ヨーダ表記とも呼ばれます) は、条件ステートメント内のよく知られた比較式の 2 つの部分を逆にしたプログラミング スタイルです。
if (5 == a) {
    // do something
}
このスタイルは、C に似た構文を持つ言語で使用でき、ほとんどの場合、 と を使用した式で使用できifますwhile
if (0 == variable) {
    // do something
}

while (false == endingCondition) {
    // do something
}
なぜ定数式を比較演算子の左側にシフトするのでしょうか? 仮説的な状況を想定してみましょう。サガの 9 つの6 つの部分すべてをマラソンで見た後、眠れずに座って、自分の得意なプロジェクト用のコードを書き、次のように書きました。
void checkNumber(int a)
{
    if (a = 13) // Здесь-то и появляется так называемый unexpected behavior!
    {
        printf("Number is 13");
    }
}
この場合、プログラムを実行するたびに、メソッドにNumber is 13"渡された引数に関係なく、 文字列を受け取ります。これは私たちが期待していたものではありません! 論理エラーは初心者プログラマーの間で非常に頻繁に発生する可能性があります (信じてください、私は知っています)。しかし、コンパイル段階では、13 = a のようなコードはエラーを生成しますが、整数値は定数であり、したがって変更できない (「a」に変わる) ため、これは絶対に見逃せません。 аcheckNumber(int a)ヨーダの条件 - 1

ヨーダの条件を使用することには賛否両論があります。

ライトサイド:

  1. 目的が比較である場合、変数への代入を防止します。

  2. 安全でない「Null 動作」の問題の解決 ( NullPointerException) // ウィキペディアからの例

  3. ヨーダなし:

    String myString = null;
    if (myString.equals("foobar")) { /* ... */ }
    // This causes a NullPointerException in Java

    ヨーダさんと:

    String myString = null;
    if ( "foobar".equals(myString) ) { // Результат - Ложь
       /* не выполняется */
    }

暗黒面:

  1. コードを見る人にとってコードは読みやすくなり、コードの認識に対する負荷が増大します。
  2. 範囲が狭く、等しいかどうかの比較または定数との比較のみが使用され、null がチェックされます。
  3. 多くのコンパイラーはすでにこの種のエラーを「認識」しており、潜在的なエラーの存在について事前に警告します。
Yoda 記法の代わりに単体テストを使用することもできます。旧共和国の時代には、適切なテストを実行すると、コードにエラーがなく、書かれたことだけを実行できることが保証されると言われていました。どのような有益な実践方法を知っていますか? コメントであなたの知識を共有してください! あなたの好きなエピソードも書いてください! そしてフォースがあなたとともにありますように!
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION