命令的にプログラミングするとき、次のようなグループ アイテムにコードを書いていることがよくあります。
function group(items):
groups <- new Groups
curGroup <- new Group
for item in items:
if item doesn't belong in curGroup:
if curGroup is good:
add curGroup to groups
curGroup <- new Group
add item to curGroup
if curGroup is good:
add curGroup to groups
return groups
残念ながら、このコードにはいくつかの欠陥があります。
if curGroup is good: add curGroup to groups
コードが重複しています。条件内の条件は関数に分割できますが、その関数を呼び出してグループに curGroups を追加するロジックは 2 回表示され、2 回目の出現を忘れがちです。新しいグループを作成するロジックが 2 回表示されます。このロジックは自明かもしれません。そうでない場合は、別の関数に分割できますが、最初の箇条書きと同様に、フローが正しくないことを示しています。
最初のアイテムが所属チェックに失敗する可能性があります。その場合、新しいグループを作成した直後に新しいグループを作成します。この問題は些細なことのように思えるかもしれませんが、最初の空のグループが に追加されるのを明示的に防止する必要がある場合があり
groups
ます。とにかく、それは望ましいロジックの誤った表現を示唆しています。
このロジックを表現するためのよりクリーンな方法があるかどうか疑問に思っています。この質問の抽象的な性質をお詫びしますが、この問題は複数のコンテキストで発生します。特定のプログラミング言語のコンテキストでこの問題に対処する必要がある場合は、Java.