読者です 読者をやめる 読者になる 読者になる
無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

クラスを作ってみる。

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

使い方はいいとして、定義の仕方がJavaRubyと違いすぎてよくわかりません。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でこう書くとインスタンスごとに関数が作成されてしまってもったいないんだけど。