0

調べ方がわからなかったので、もし回答があれば教えてください。

ベスト プラクティスがよくわからない、かなり一般的な状況に再び遭遇しました。関数が 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()

この値をダブルチェックする方法は大丈夫ですか? また、ドライアイが少しひきつりますが、コードの巨大なブロックを繰り返すほどではありません。

私の本当の質問は、これはどこかで議論されているのでしょうか、それともこれを行うための標準的な「ベストプラクティス」の方法はありますか?

4

1 に答える 1