私は1Z0-851OraclaJava SE 1.6認定を取得するために勉強していますが、次の質問がありました。
私は最初の選択肢を正しいものとしてマークし、失敗しました!「すべてのassertステートメントが適切に使用されている」と答えは、最初のステートメントがassert(x > 0);
正しくないことを示しています。質問はなぜですか?
私は1Z0-851OraclaJava SE 1.6認定を取得するために勉強していますが、次の質問がありました。
私は最初の選択肢を正しいものとしてマークし、失敗しました!「すべてのassertステートメントが適切に使用されている」と答えは、最初のステートメントがassert(x > 0);
正しくないことを示しています。質問はなぜですか?
正解はこれです
アサーションの適切および不適切な使用
通常は到達しないと予想される任意の場所にアサーションを配置できます。アサーションは、プライベートメソッドに渡されたパラメーターを検証するために使用できます。ただし、パブリックメソッドは、アサーションが有効かどうかに関係なく引数をチェックする必要があるため、パブリックメソッドに渡されるパラメーターの検証にアサーションを使用しないでください。ただし、パブリックメソッドと非パブリックメソッドの両方でアサーションを使用して事後条件をテストできます。また、アサーションはプログラムの状態を変更してはなりません。
Src: http: //www.freejavaguide.com/java-scjp-part1.pdf
12行目は冗長です。
これを削除すると、15行目のアサーションは次の場合をカバーします。x <= 0
正直なところ、奇妙な言葉の質問ですが、私が見ることができるのはそれだけです。適切な意味がわかりません
最初のassertステートメント(その位置のために「前提条件」として解釈される必要があります)だけを読んだ場合、関数が正のint値で正しく機能する必要があることを意味しますが、これは正しくありません。したがって、その主張は誤解を招く可能性があります。
から始めてgo2
、アサーションを理解するのは簡単です。
このメソッドは何もしません、それはあなたの期待を主張するだけです、それx < 0
。
go
一方、このメソッドには。がありswitch
ます。プログラムがこの句に該当することを絶対に期待しない場合、
つまり通常の状況では、sの1つが正しくなければならない場合はassert false
、この句を適用することをおdefault
勧めします。case
の唯一のケースは正確switch
にであると期待x
しています。 2
したがって、要約すると、最初のアサーションが言うように、あなたはx
より大きくなることを期待していません。したがって、アサーションは適切に使用されません。0
x
2
ただし、Jeffが指摘したように、にはcase
がありませんbreak
。これは、default
が常に実行され、すべてのシナリオでにつながることを意味しassert false
ます。
結論:このgo
方法は常にエラーになり、assert false
適切に使用されますassert x > 0
が、まったく正しくありません。