CLOSエクササイズ第01回
Lispのオブジェクト指向は、Common Lisp Object System(略してCLOS)という。まずは、簡単にクラスを定義して、フィールドに値をセットしてその値を標準出力に出力、という単純なことをやってみる。
クラスの定義は以下のとおり。defclassを使用する。
(defclass user () ((name :accessor user-name) (pass :accessor user-password) (age :accessor user-age)))
このクラスの意味としては、
- userという名前のクラス
- name、pass、ageというフィールドを持っている
- name、pass、ageはそれぞれsetter/getterを持つ(:accessorがそれを意味する)
- 各フィールドへのアクセサは、user-name、user-password、user-ageという名前で自動生成される
このuserクラスに名前をセットして、表示させる記述は以下のようになる。
(defparameter user-0 (make-instance 'user)) (setf (user-name user-0) "CharyBrown") (format t "User-0 Name is ~A.~%" (user-name user-0))
make-instance + $ClassName で、$ClassNameに相当するクラスのインスタンスが生成される。
フィールドに値をセットするには、setf とクラス定義の際に同時に定義したアクセサを使用する。
フィールドの値にアクセスする場合も同じアクセサを使用できる。
上記のように実行すれば、
User-0 Name is CharyBrown.
という感じで出力される。だいぶJavaとは書き方が違う。早くこの書き方に慣れないと・・・