これは、値が配列内にあるかどうかを確認する最も一般的な方法です(私には思えます)。
for (int x : array)
{
if (x == value)
return true;
}
return false;
しかし、私が何年も前におそらくWirthやDijkstraによって読んだ本では、このスタイルのほうが優れていると言われました(中に出口があるwhileループと比較した場合)。
int i = 0;
while (i < array.length && array[i] != value)
i++;
return i < array.length;
このように、追加の終了条件はループ不変式の明示的な部分になり、ループ内に隠された条件と終了はありません。すべてがより明確で、構造化プログラミングの方法でより明確になります。私は一般的に、この後者のパターンできるだけ好ましいと使用for
からだけ反復する-loopをa
しますb
。
それでも、最初のバージョンはそれほど明確ではないとは言えません。少なくとも初心者にとっては、さらに明確で理解しやすいかもしれません。だから私はまだどちらが良いのか自分自身に質問していますか?
たぶん誰かが方法の1つを支持して良い根拠を与えることができますか?
更新:これは、複数の関数の戻り点、ラムダ、または配列自体の要素の検出の問題ではありません。それは、単一の不等式よりも複雑な不変式を持つループを書く方法についてです。
更新:OK、答えてコメントする人々のポイントがわかります:ここでforeachループをミックスインしました。これは、whileループよりもはるかに明確で読みやすいものです。私はそうするべきではありませんでした。しかし、これも興味深い質問なので、そのままにしておきます。foreach-loopと内部の追加条件、または明示的なループ不変条件とpost-conditionの後のwhileループです。条件と終了/ブレークのあるforeachループが勝っているようです。foreach-loopを使用せずに追加の質問を作成します(リンクリストの場合)。
collection.contains(foo)