« プログラミングを始めるには(19) | Main | プログラミングを始めるには(21) »

August 18, 2014

プログラミングを始めるには(20)

プログラミングを始めるときに、プログラミング言語がオブジェクト指向プログラミング言語である方が良いか否か、ということについて前3囘くらいであれこれ試してみた。そうやってOOP前後の違いを味見するには、前の方をある程度實踐していないとむずかしいのかもしれない。今囘の試行錯誤でOOPをやるとストレスが溜まるだけのような結果になったが、それはあくまで私が基本的に無知なだけだと思われる。ただ、上っ面だけ嘗めて分かったようなフリをしたくないので、盲信するのでなくちゃんと自分なりに納得したいと思う。

そして何となくわかった!(笑)

(require 'cl)
(require 'eieio)

(defclass test-class ()
  ((data :initarg data
	 :initform '(((man woman) . love) ((oldman sea) . anekdoten)))))

(defmethod test-add ((obj test-class) key1 key2 &optional sym)
  (setf (slot-value obj data)
	(append (slot-value obj data)
		(list (cons (list key1 key2)
			    (or sym (intern (read-string "STRING: "))))))))

(defmethod test-run ((obj test-class) key1 key2 &optional sym)
  (let* ((value (slot-value obj data))
	 (answer (assoc (list key1 key2) value)))
    (if answer (cdr answer)
      (test-add obj key1 key2 sym))))

(setq test-obj (make-instance 'test-class))

(test-run test-obj 'man 'woman)
love

(test-run test-obj 'oldman 'sea)
anekdoten

(test-run test-obj 'mom 'son 'sexy)
(((man woman) . love) ((oldman sea) . anekdoten) ((mom son) . sexy))

(test-run test-obj 'mom 'son)
sexy

test-obj
[object test-class "test-class"
	(((man woman) . love)
	 ((oldman sea) . anekdoten)
	 ((mom son) . sexy))]

最大の勘違いとしては、インスタンスを作る前にどうしてスロットにアクセス出來るんだろう?という點だった。つまりdefmethodについて「Only the _first_ argument may have a type specifier.」とInfoに書かれているのを讀んでいなかったことになる。ちなみに、defmethoddefunと同樣にedebug-defunするとedebugで追いかけることが可能になるようだ。素晴らしい。これで胸の痞えが半分くらい取れた氣がする。

|

« プログラミングを始めるには(19) | Main | プログラミングを始めるには(21) »

Comments

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/74224/60172125

Listed below are links to weblogs that reference プログラミングを始めるには(20):

« プログラミングを始めるには(19) | Main | プログラミングを始めるには(21) »