Python に冗長なコードを出力してもらう
問題点
オブジェクト指向でコードを書いていて退屈してくるのが ValueObject の記述。フィールドがあって、そのフィールドに対するアクセサを書く。2 つとか 3 つくらいならいいけれども、フィールドが 10 とかあるとうんざりしてくる。しかも同じようなコードばかり。ここでいくつかの解決策が思い浮かぶ。
最初のやつは原始的で直感的だが、数が多いと漏れとかも発生しやすいという欠点も。
IDEは対応していればいいけれどもそもそもIDEを使用しない主義の人とかもいるので万能とは言えない(もちろん、使えるなら一番楽で確実)。
そこで 3 つ目のスクリプトで書いてもらうやり方。これは文字列を同じような順番で組み合わせるのでシェルだと面倒だった(というか、一度変数に格納するやり方しか出てこなかった)。何もシェルでなくても python をインタプリタとして使えばできるので、シェルでのやり方を探すより早いと判断。
Pythonのコード例
以下のような感じ。
>>> for i in ['a','b','c','d','e','f','g','h','i','j']: ... print ';;;;;' ... print ';;;;; accessor for ' + i ... print ';;;;;' ... print '(defmethod get-' + i + '((obj class))' ... print ' (slot-value obj \'' + i + '))' ... print '(defmethod set-' + i + '(value (obj class))' ... print ' (setf (slot-value obj \'' + i + ') value))' ... ;;;;; ;;;;; accessor for a ;;;;; (defmethod get-a((obj class)) (slot-value obj 'a)) (defmethod set-a(value (obj class)) (setf (slot-value obj 'a) value)) ;;;;; ;;;;; accessor for b ;;;;; (defmethod get-b((obj class)) (slot-value obj 'b)) (defmethod set-b(value (obj class)) (setf (slot-value obj 'b) value)) ;;;;; ;;;;; accessor for c ;;;;; (defmethod get-c((obj class)) (slot-value obj 'c)) (defmethod set-c(value (obj class)) (setf (slot-value obj 'c) value)) ;;;;; ;;;;; accessor for d ;;;;; (defmethod get-d((obj class)) (slot-value obj 'd)) (defmethod set-d(value (obj class)) (setf (slot-value obj 'd) value)) ;;;;; ;;;;; accessor for e ;;;;; (defmethod get-e((obj class)) (slot-value obj 'e)) (defmethod set-e(value (obj class)) (setf (slot-value obj 'e) value)) ;;;;; ;;;;; accessor for f ;;;;; (defmethod get-f((obj class)) (slot-value obj 'f)) (defmethod set-f(value (obj class)) (setf (slot-value obj 'f) value)) ;;;;; ;;;;; accessor for g ;;;;; (defmethod get-g((obj class)) (slot-value obj 'g)) (defmethod set-g(value (obj class)) (setf (slot-value obj 'g) value)) ;;;;; ;;;;; accessor for h ;;;;; (defmethod get-h((obj class)) (slot-value obj 'h)) (defmethod set-h(value (obj class)) (setf (slot-value obj 'h) value)) ;;;;; ;;;;; accessor for i ;;;;; (defmethod get-i((obj class)) (slot-value obj 'i)) (defmethod set-i(value (obj class)) (setf (slot-value obj 'i) value)) ;;;;; ;;;;; accessor for j ;;;;; (defmethod get-j((obj class)) (slot-value obj 'j)) (defmethod set-j(value (obj class)) (setf (slot-value obj 'j) value)) >>>