Sections
|
<( オブジェクト生成 )>
これまででタグのカスタマイズとファイル出力の方法を学びました. これで古いDMLをマスターしたことになります. ここまでがDMLの持っていた機能です. これまでで学んだことで, HTMLファイル全体を手で書きかえなくても, ページを速く書いてデザインを簡単に変更できるようになります. しかしサイドバーをページの下にもっていくことができますか? エイプリルフールなどの場合に, サイトをASCIIテキストで出力できますか? これらはDMLではできないことです. しかしDML2ではこれらを実現できます. 出力形式を自由に選ぶことができるのです.
DML2オブジェクトはサイトやドキュメントの内容を格納するものです. これらのオブジェクトにコンテンツをすべて格納すると, サイト全体をテンプレートファイルを修正するだけで再構築することができます. (テンプレートファイルとは, 特定のフォーマットのためのレンダー/タグ定義をしたDML2ファイルのことを指します.)
オブジェクトは(valキーワードを使うことで)属性を保持することができます. この機能により, 他のオブジェクトやオブジェクト/属性の配列を保持することもできます. オブジェクトを定義するにはobjectに続けて空白, そしてオブジェクトの型の名前を入力します. 行末に開く括弧({)を置きます. 次の行からオブジェクトのメンバを定義し, 最後に閉じる括弧(})だけの行を置きます. メンバを定義するには, メンバの型に続けて識別子(名前)を宣言します. メンバはDML2オブジェクト内でデータを格納する場所です. よく分からない場合は次の例を見るとよいかもしれません:
object Date { val month val day val year Time timestamp }
|
オブジェクトはDML2で一番難しい部分ですから, この例を行ごとに説明しましょう. 1行目でDateオブジェクト型の宣言を開始します. 2行目でmonthという属性を宣言します. 属性はDML2で一番簡単な型です. テキストブロック(DML2タグも含みます)を格納する場所です. 3行目と4行目は名前が違いますが2行目と同じことをしています. 5行目ではTime型のメンバを宣言しています. この型(Time)はこの前のどこか, もしくはインクルードファイル(別のファイル)内で宣言されている型なのでしょう. 最終行は, もちろん, 宣言の終わりです.
! | Note:
私がオブジェクト内でのメンバ定義を字下げしていることに気がつきましたか? これはC形式の書法で, 従う必要はありません(ただし強く推奨します).
|
これでオブジェクト型を定義することができました. しかしこれだけでは何もできません. Dateはこの型のオブジェクトが何を保持するのかを一般的に定義したにすぎません. 実際にオブジェクトを手に入れるためには, Dateを生成(インスタンスを生成)しなくてはなりません. 以下に生成する方法をあげます:
これは実に簡単ですね ;). これでDate型のオブジェクトができましたので, さっそく値を代入してみましょう. オブジェクト内のメンバにアクセスするには, 親オブジェクト名, ピリオド(.), そしてメンバ名を指定します. これは再帰的なプロセスであり, object.aMember.aMembersMemberのようにして探しているオブジェクトが見付かるまでオブジェクト木を辿ることになります. 属性に値を代入するには, 属性名に続けて空白, 等号, そしてさらに空白, そして引用符で囲まれた値を列記します. (ここでも\"に関するルールは有効です)
someDate.month = "January" someDate.day = "6" someDate.year = "2002"
|
オブジェクト全体を同じ型の別のオブジェクトにいつでも代入することができます. 例をみてみましょう:
Date anotherDate anotherDate = someDate
|
この例では, anotherDateはsoneDateのもつすべてのメンバの値を保持しています.
! | Note:
あるオブジェクトを同じ型の別のオブジェクトに代入すると, メンバすべてが新しいオブジェクトにコピーされます. リンクされることはありません. つまり, コピーされた後でオブジェクトが変更された場合, オリジナルのオブジェクトは変更が反映されません.
|
念のため, あなたのコンテンツすべてはDML2属性の中で終わります. オブジェクトは属性に格納されるデータの集合体です. この点を強調するため, 属性の"type"はvalとなっています.
|
|