Pythonistaで自分専用RPN電卓を作る(03)
重複した処理について
四則演算の機能は実現できましたが、それぞれの関数で同じコードが繰り返されています。 四則演算だけならまだマシですが、今後計算機能を拡充していくと、どんどんコードが汚くなってしまいそうです。
今のうちになんとかします。
class RPN(): _stack = [] def push(val): RPN._stack.append(val) def pop(): return RPN._stack.pop() def add(val): x = RPN._stack.pop() y = x+val RPN._stack.append(y) return y def sub(val): x = RPN._stack.pop() y = x-val RPN._stack.append(y) return y def mul(val): x = RPN._stack.pop() y = x*val RPN._stack.append(y) return y def div(val): x = RPN._stack.pop() y = x/val RPN._stack.append(y) return y
演算機能を実現する関数は、
順番 | 処理 |
---|---|
(1) | スタックから数値を取り出す |
(2) | 計算する |
(3) | 計算結果をスタックに格納 |
(4) | 返値を返す |
という構造になっていて、(2)の計算処理だけが異なります。 これを関数外部から切り替えることができれば、重複する処理を1つの関数にまとめることができます。
調べてみると、lambda関数でこれが実現できそうなことが分かりました。