クラスを作ってみる。
beginner's guideの「5 Classes」を読んでクラスを作ってみます。
クラスを作る。
scalaでは↓こんな感じでクラスを定義するらしい。
// クラス定義 // パラメータを受け取る。コンストラクタ引数みたいなモノか? class Kitten(age: int, name: String) { // ↓これでgetterが定義できる。 // -戻り値は省略(引数の型からscalaが推測) // -引数はなし。()をつけて呼び出すとエラーになる。 def na = name def ag = age // 引数と関数名を同じにすると戻り値が不明といった感じのエラーになる。 // 戻り値の型を指定してやればOK def name():String = name def age():int = age }
定義したクラスはnewでインスタンス化して使えます。
// クラスを使うサンプル object ClassSample { def main(args: Array[String]) { // クラスのインスタンスを生成。 var kitten = new Kitten( 1, "mii" ) println( kitten.age() + " : " + kitten.name() ) println( kitten.ag + " : " + kitten.na ) // 引数なしで呼び出すことができる。 //println( kitten.ag() + " : " + kitten.na() ) // 逆にこうするとエラー。 } }
実行結果です。
1 : mii 1 : mii
使い方はいいとして、定義の仕方がJavaやRubyと違いすぎてよくわかりません。orz。うーん、クラス定義が関数みたいな扱いなのであればJavaScriptに近いのかも。
function Kitten( age, name ) { this.age = function() { return age; } this.name = function() { return name; } } var kitten = new Kitten( age, name );
これで、関数age,nameを持つオブジェクトが生成できる、という点では一緒かな?ただ、JavaScriptでこう書くとインスタンスごとに関数が作成されてしまってもったいないんだけど。