2006 年 4 月

2006 年 4 月に書いた日記。30 項目あります。

日記の概要

メソッドの存在確認
最後に、新しくモジュールを起こす場合に便利と思われる機能を考えてみよう。現行の property モジュールの仕様であれば、setter …… (30日 23:15)
ここまでの整理
ここまで幾つかの考察をしてきた。property モジュール全体を書き直してみよう。プロパティ名、転送先 getter/setter メソッド …… (29日 22:56)
UNIVERSAL クラス
Java や C# では、Object というルートクラスがある。あらゆるクラスは暗黙的に Object から派生している。Perl にも同様、暗黙 …… (28日 23:58)
読み取り・書き込み専用
さて、今までは読み書き両用でみてきたが、現実には、読み取り専用のプロパティや、書き込み専用のプロパティもある。property ・ …… (27日 19:43)
継承に対応させる
property.pm を動的呼び出しに対応させるには、インタフェースを変更しなければならない。従来はコードリファレンスを受け取って …… (26日 19:57)
メソッドの動的呼び出し
昨日の考察により、コードリファレンスを使って、オブジェクトのメソッドを呼ぶことは、継承上の問題を生ずるため使えないことが …… (25日 19:27)
継承とコードリファレンス
property モジュールはコードリファレンスを使って、該当パッケージのメソッドを関数のように呼び出す。これは、継承の問題と関 …… (24日 21:28)
関数とメソッド
そこそこ洗練されてきた property モジュールだが、まだまだ課題点はある。問題の一つは、登録時に setter/getter のコードリフΜ …… (23日 23:50)
Carp 対策
プロパティによる Carp への影響を考えてみよう。まずは、croak のメッセージの仕組みを調べるために、コールスタックをトレース …… (22日 23:57)
property.pm を使ってみる
さて、property を使って、Employee.pm を作ってみよう。基本的には他のモジュールを取り込むのと同じ要領だ。========== Emplo …… (21日 20:02)
モジュールの実装
では、property モジュールに実装を作っていこう。まずは、use の呼び出しの規約を考える。プロパティの作成に必要なのは、名前 …… (20日 23:57)
シンボリックリファレンス
昨日の考察により、通常の手段によって、文字列で受け取ったパッケージのシンボルテーブルに新しくシンボルを追加することは難し …… (19日 22:13)
シンボルテーブルへの項目追加
文字列として与えられたパッケージに対して、動的にメソッドを登録には、もう一つ壁がある汎用化するため、プロパティを登録する …… (18日 18:23)
モジュール化
昨日は、型グロブ構文により、自らのパッケージの内容を修正したが、通常、そのようなことを行なう必要はあまりない。それらは、 …… (17日 23:56)
メソッドの動的登録
シンボルテーブルは、パッケージ内部を参照するだけでなく、それを編集することで、パッケージに動的にサブルーチンや変数などを …… (16日 22:48)
型グロブ
シンボルテーブルの中身をダンプしてみると、そこにはメソッドや変数名が登録されていた。しかし、全てのシンボルに * 文字が含 …… (15日 23:58)
シンボルテーブル
C# や Java には、リフレクションと呼ばれる機能がある。プログラムからクラスのメンバの情報を得ることができ、文字列で名前を …… (14日 23:59)
複数のプロパティ
昨日書いた lvalue ルーチンを見てみよう。sub salary : lvalue {     my $this = $_[0];     tie(my $refl …… (13日 23:56)
値の検証と汎用化
スカラに tie されたオブジェクトを隠蔽することで、プロパティの代入・取得ハンドラを書くことができた。今日は、値の検証コー …… (12日 22:26)
スカラの tie
スカラ変数は、値を一つ格納するだけしかできないので、スカラ用の tie オブジェクトは非常にシンプルである。これらが実装する …… (11日 23:56)
代入値の検証はどうするか
lvalue を使えば、プロパティ構文が使えるが、代入はサブルーチンの中では行われない。となると、どうやって値を検証するか。さ …… (10日 23:29)
lvalue の限界
プロパティには、他にも重要な機能がある。それは、setter/getter による値の検証や、読み取り専用、書き込み専用などの制限だ。 …… (9日 22:22)
代入可能なメソッド
lvalue が任意のサブルーチンに使えるということは、クラスインスタンスのメソッドとしても使えるということだ。理由は、Perl …… (8日 21:45)
lvalue 属性
lvalue 属性は、組み込み関数だけでなく、自作サブルーチンでも使うことができる。サブルーチンの属性による拡張は、Perl 5.6 …… (7日 22:42)
左辺値になるサブルーチン
では、左辺値になるサブルーチンとはなんだろうか。Perl には、substr という関数(サブルーチン)がある。文字列の操作をするに …… (6日 23:11)
setter/getter の設計思想
Perl によるアクセサの実装は以下のようだった。$value = $jack->salary; $jack->salary($new_value); Perl では、利便性や実測 …… (5日 19:28)
Perl のアクセサ
Perl のオブジェクトは、ただのリファレンスであり、上級言語風に言うと、連想配列から継承したクラスなのだ。(例外もあるが、 …… (4日 23:48)
題材
さて、これからプロパティについて考えていくので、その題材となるクラスを考えよう。今回は、Employee オブジェクトを作る。Emp …… (3日 23:59)
プロパティと言う概念
一部の高級言語には、プロパティと言う概念がある。プロパティは、setter と getter を特別な構文でカプセル化したものだ。&nbs …… (2日 22:46)
Java と C#
最近、Java を触る機会が増えたC# は非常に Java に似ている言語であり、Java に影響をうけて洗練された言語だ。また、Java も …… (1日 23:56)


Copyright (c) 1994-2007 Project Loafer. All rights reserved.