1

例としてPythonを使用しています。

class ThingArguments:
    def render(self, text, color):
        return magiclibrary.generateText(text, color)


class ThingStates:
    def __init__(self):
        self.color = (0, 0, 0)

    def render(self, text):
        return magiclibrary.generateText(text, self.color)

    def setColor(self, color):
        self.color = color

Pythonにとってどちらがより受け入れられますか?どの言語にもどちらが好ましいですか?それぞれに勝る利点は何ですか..?

4

1 に答える 1

1

まず、Sven Marnachが述べたように、最初の例は単純な関数である必要があります。

def render(self, text, color):
    return magiclibrary.generateText(text, color)

では、この単純な関数とクラスソリューションの違いは何ですか?

プレーン関数

  • 文書化と理解が容易
  • テストは簡単です(連続して多くの呼び出しを行い、出力を期待値と比較するだけです)
  • よりシンプルなメンタルモデルで、驚きやバグが少なくなります
  • テキストと色を同じ場所に保持するため、どの色が使用されるかを常に把握できます

クラス

  • 拡張可能で、透過的に追加の動作につながります
  • 引数として渡すことができ、他の場所はrender色を指定せずに呼び出すことができます(これが最も一般的な動作である場合は重要です)

Pythonでは、通常、最初の方法が推奨されます。単純な関数は、心配する状態が少ないことを意味し、これは、大規模またはトリッキーなプログラムにとって大きな問題になる可能性があります。また、明示的は暗黙的よりも優れています。

正確に利用できない場合でも、私は常に最初の方法を好みます。Javaが思い浮かびますが、関数は常にクラス内に含まれている必要があるため、抽象クラスには多くの静的関数が含まれることになります。

言語よりも文脈の問題だと思います。このクラスは、ログをレンダリングする場合など、クラスを呼び出す関数が色をあまり気にしない場合に適しています。一方、ほとんどの発信者が色を知っていて、それを選択したい場合、クラスはノーノーになります。

そしていつものように、疑わしいときはもっと簡単なルートをとってください。単純化するよりもコードを複雑にする方が簡単です。

于 2012-12-19T01:11:11.767 に答える