私はネイティブスピーカーではありません。私の母国語では、再帰を停止するためにチェックされる条件、および極端な、ありそうにない、または非常に単純なケースについてチェックされる条件を指すために使用されるいくつかの用語を知っています。英語では、「エッジケース」、「コーナーケース」、「境界ケース」、「ベースケース」という用語に出くわしましたが、違いを理解することはできません。それらの違いの概要を知りたいと思います。
特に、次のコードサンプルの行に注釈を付けていただければ幸いです。
int transmogrify(int n) {
1. assert(n <= 1000000);
2. if (n < 0) return -1;
3. if (n == 1000000) return PRE_CALC;
4. if (n == 0) return n+1; // For stopping the recursion
5. if (n == 1251) return 3077;
return transmogrify(n-1);
}
私考えるそれは:
私もネイティブスピーカーではありません。しかしウィキペディアによると:
したがって、コーナーケースがエッジと境界ケースとは少し異なる(値の組み合わせ)ことを意味しているように見えても、用語は完全に混乱しているように見えます。エッジ、コーナー、境界のケースは一般的なスピーチで同じものであると言ってもおそらく安全です。誰かがそれぞれ違うことを言うことを意味するかもしれませんが、共通の合意はほとんどありません。
1)と2)はあなたが書いたもの、3)はエッジ/境界のケース、4)はベースケース、5)は特別なケースです。
単語の違いに関係なく、テストの記述に使用するものは、正確なコードではなく、テストのsemantics(意味)に依存します-提供されている例では、それぞれの内容が明確ではありませんテストは意味します。それはさておき、ここに私がそれらを理解する方法があります:
sqrt(-1)
および log(-1)
は未定義です。[ $# -gt 0 ]
_は、少なくとも1つの入力パラメーターを取得したことを確認します。これは、find
やmail
などのコマンドの健全性チェックでもあります。log(1 + the smallest floating point number)
。