ポリモフィズムを利用すると
前述したように、if と別れる「始め一歩」がポリモフィズムの導入を検討してみることです。それが「末の千里」へと誘います。
expr = "3 4 +"
expr = "3 4 + 2 *"
parser = Parser()
cal = Polish()
for e in expr.split(" "):
e = parser.scan(e)
e.evaluate(cal)
print cal.evaluate()
ポリモフィズムを利用すると、switch 擬と比べて、簡潔で見通しの良いコードを記述できます。要求仕様の変更にも柔軟に対処できるだけでなく、動的スキーマの適用が可能になります。
# -------------------------- class Token: def __repr__(self): return "%s"%self.value def switch(self, dispatch): return dispatch[self.__class__](e) class Value(Token): def __init__(self, value): self.value = int(value) def evaluate(self, cal): cal.value(self) class Op(Token): def __init__(self, value): self.value = str(value) def evaluate(self, cal): cal.op(self) # --------------------------