今まで紹介してきたサンプルはすべて,
そこで,
クラスの定義
とりあえず,
リスト1
class Name {
var firstName: String;
var lastName: String;
function fullname(): String {
return "{firstName} {lastName}";
}
}
クラスの定義はclassで行います。波括弧の中では,
実をいうとこの変更に伴って,
関数も波括弧の中で定義します。インタープリタ版では関数の実体は波括弧の外で行っていましたが,
上のNameクラスの場合,
では,
リスト2
var name = Name {
firstName: "Yuichi"
lastName: "Sakuraba"
}
println("Full Name: {name.fullname()}");
実行結果を以下に示します。
図1
Full Name: Yuichi Sakuraba
アトリビュートにデフォルト値を持たせるには,
表1 アトリビュートのデフォルト値
型 | デフォルト値 |
---|---|
String | "" (null) |
Integer | 0 |
Number | 0. |
Duration | 0ms |
Boolean | false |
オブジェクト | null |
関数 | null |
シーケンス | [ ] (null) |
Stringとシーケンスにnullと記載しているのは,
リスト3
class Photograph {
var title: String;
var width: Integer;
var height: Integer;
var resizable: Boolean;
var image: Image;
// デフォルト値の代入
var kind: String = "JPEG";
}
var photo = Photograph {};
println("Title: {photo.title}");
println("Width: {photo.width}");
println("Resizable: {photo.resizable}");
println("Image: {photo.image}");
println("Kind: {photo.kind}");
kindアトリビュートだけデフォルト値を設定しました。titleアトリビュートやwidthアトリビュートはデフォルト値はなく,
図2
Title: Width: 0 Resizable: false Image: null Kind: JPEG
この結果からもStringが空文字,
次に関数型のアトリビュートを定義してみましょう。関数型のアトリビュートを定義するには,
リスト4
class Printer {
// 引数,戻り値なし
var reset: function(): Void;
// 引数,戻り値あり
var print: function(String): Boolean;
// こちらでも OK
// var print: function(:String): Boolean;
}
var printer = Printer {
reset: function(): Void {
println("reset");
}
print: function(text: String): Boolean {
println("Print: {text}");
return true;
}
}
printer.print("Hello, World!");
resetアトリビュートは引数がなく,
図3
Print: Hello, World!
varだけでなく,
リスト5
class MathConst {
def pi: Number = 3.1415;
}