調べ方がわからなかったので、もし回答があれば教えてください。
ベスト プラクティスがよくわからない、かなり一般的な状況に再び遭遇しました。関数が 3 つの可能な値のいずれかを持つ状況を考えてみましょう。それらは「a」、「b」、および「c」であると言います。
「a」または「b」を受け取った場合、いくつかのケース固有のものの後に、かなりの量のオーバーラップ処理を行う必要があります。ただし、「c」を受け取った場合は、まったく別のことを行う必要があります。これは例としては些細なことですが、かなり重いインスタンスがいくつかあります。
例 (Python):
def doStuff(self, val):
if val == 'a':
self.counter += 1
print val, "is very good"
self.passing = True
self.doMoreStuff()
elif val == 'b':
self.counter += 2
print val, "is not too bad"
self.passing = True
self.doMoreStuff()
elif val == 'c':
self.counter -= 1
self.passing = False
print val, "is unacceptable"
self.weAreDoneHere()
したがって、「a」または「b」のいずれかについては、ケース固有の指示と繰り返されるものがいくつかありますが、「c」の場合はすべて異なります。場合によっては、3 つの別々のケースをそのままにしておくのも悪くありませんが、それを見ると私のドライアイがピクピクします。また、コードの繰り返しが多い場合は、より大きな問題になる可能性があります。
1 つの解決策は、次のようなものです。
def doStuff(self, val):
if val == 'a' or val == 'b':
if val == 'a':
self.counter += 1
print val, "is very good"
elif val == 'b':
self.counter += 2
print val, "is not too bad"
self.passing = True
self.doMoreStuff()
elif val == 'c':
self.counter -= 1
self.passing = False
print val, "is unacceptable"
self.weAreDoneHere()
この値をダブルチェックする方法は大丈夫ですか? また、ドライアイが少しひきつりますが、コードの巨大なブロックを繰り返すほどではありません。
私の本当の質問は、これはどこかで議論されているのでしょうか、それともこれを行うための標準的な「ベストプラクティス」の方法はありますか?