Sections
|
<( コンストラクタ )>
難しいことを忘れてしまっても気にしないでください. コンストラクタは簡単にいえばオブジェクトの生成/初期化と同時に値を代入するものです.
コンストラクタには3種類あります: 属性コンストラクタ, オブジェクトコンストラクタ, そして配列コンストラクタです. 属性コンストラクタはすでに知らないうちに使っているものです. 代入したいテキストを引用符で囲んだものが属性コンストラクタです.
コンストラクタは(便利なように)変数定義と同じ行に置かれます. 空白, 等号, そして空白に続けてコンストラクタを置きます. コンストラクタの利用はとても分かりやすいのですが, とりあえず属性コンストラクタの使用例を例示しましょう:
val someProperty = "定義と代入を一度に済ませます!" val anotherProperty = someProperty
|
! | Note:
属性コンストラクタ内で引用符を使うときには\"を忘れないようにしましょう.
|
2行目はコンストラクタではありませんが, 宣言と同じ行に通常の代入を置くことを示しています. 実際, コンストラクタを使うときはいつでも代入することができます.
次に紹介するコンストラクタは配列コンストラクタです. 格好は悪いですが配列を1度に定義するのにとても便利です. コンストラクタのリストをコンマで区切り, 一組の括弧({})で挟むだけです. 例をみれば分かるでしょう:
val[] arrayOfProps = {"第1要素", "第2要素", someProperty} val[] moreProps = arrayOfProps
|
最後に紹介するのはオブジェクトコンストラクタです. オブジェクト型を定義するとき, メンバーを一行一行タイプしたのを覚えているでしょうか. この順番が問題なのです. オブジェクトコンストラクタを作るには, キーワードnewに続けて空白, そして生成するオブジェクトの型(たとえばDate)をタイプします. これに続けてコンマで区切られたコンストラクタを括弧(())に入れて置きます. 次にこれら3種類のコンストラクタをすべて使った例を示します.
object TextContent { val[] lines }
object Page { val title TextContent content }
Page hello = new Page("Hello World", new TextContent({"これが分かれば, コンストラクタの達人です!", "おや, 忘れましたか...", "Hello World!"}))
|
この例をパートごとに説明しましょう. たとえば, new Pageコンストラクタの中身に着目すると, 2種類のコンストラクタがみてとれます. まずは属性コンストラクタ, 次に配列コンストラクタです. 次に, new TextContentコンストラクタを見てみると, さらにもう1つのコンストラクタである配列コンストラクタがあります. (Page.TextContent.linesに相当する)配列コンストラクタの中には, 各行で定義される属性コンストラクタがあります.
最後に, オブジェクトのデフォルト値を設定するためにコンストラクタを使うこともできます. たとえば, この文書のページの多くはdoc#(ここで#はページ番号です)という名前がついています. 章を追加するごとに番号を追加するかわりに, 次のようなデフォルトコンストラクタを用意しています:
object Section { val title = "新章" val file = "doc<(&index)>.html" val[] content = {"コンテンツがここに入ります"} }
|
デフォルトコンストラクタを使うと, fileを設定せずに済みます. doc<(&index)>.htmlが自動的に設定されるのです. もちろん文書の最初のページはファイル名はindex.htmlとします. デフォルトコンストラクタを上書きするには, 単に値を代入するだけでよいのです.
! | Note:
<(&index)>は配列内のオブジェクトの位置を返す自動タグです(ただし1から始まります). 自動タグについては別の章で紹介します.
|
|
|