2010年03月22日 00:46

Scalaのメモ

JavaプログラマがScalaを始めたときのメモ。



再代入できない変数(定数?)の設定は、val を使い、再代入できる変数は var で宣言する。
val a = 3;
var b = 4;



ifは文じゃなくて式なので、以下のようにできる。
println(if(1 > 2) 3 else 4)



インクリメント演算子はないみたい。i++ってのでエラーになる。



for文は、構文がJavaと違い、
for(index <- 1 until 100){
}
という感じ。until を使うと99まで。to を使うと100まで。
for(index <- 1 to 100)[
}
で100まで実行される。



2重ループはfor文を入れ子にしなくても、以下のようにforの中にセミコロンで連続して書ける。
for(ii <- 1 to 3; ij <- 1 to 4){
	println( ii + ", " + ij);
}



関数の定義は以下のよう。関数本体の最後の式が関数の返値になる。関数本体のブロック { の前にイコールを忘れないように。イコールを忘れるとなぜか関数本体の中で意味不明なコンパイルエラーが出て、イコールを忘れていることにしばらく気づかなかった。
def summation(n: Int): Int = {
	var sum = 0;
	for(index <- 1 to n){
		sum += index;
	}
	sum;
}
println(summation(100));



関数本体に式が1つしかなければブロックにする必要がない。{ } が不要。以下の2つは同じ意味になる。
def gcd(x: Long, y: Long): Long = {
	if (y == 0)
		x;
	else
		gcd(y, x % y);
}
def gcd(x: Long, y: Long): Long =
	if (y == 0)
		x;
	else
		gcd(y, x % y);



クラスの定義は以下のように。メソッドをオーバーライドするときは、overridedef の前に付ける必要がある。toString はJavaのObjectクラスに定義されているのでオーバーライドになる。
class ComplexNumber {
	var real: Double = 0;
	var imaginary: Double = 0;
	override def toString(): String = {
		if(imaginary == 0)
			real.toString();
		else if(imaginary > 0)
			real + " + " + imaginary + " i";
		else
			real + " - " + (-imaginary) + " i";
	}
}
val c = new ComplexNumber();
c.real = 1;
c.imaginary = -1;
println(c.toString());



不変オブジェクトの例。コンストラクタの引数はクラス定義自体に書く。
class ComplexNumber(r: Double, i: Double){
	val real: Double      = r;
	val imaginary: Double = i;
	override def toString(): String = {
		if(imaginary == 0)
			real.toString();
		else if(imaginary > 0)
			real + " + " + imaginary + " i";
		else
			real + " - " + (-imaginary) + " i";
	}
}
println(new ComplexNumber(100, 120));



2010/03/23追記
その2に続く
タグ:scala
カテゴリ:テック
2010/03/22 Mon 00:46 | Comment(0) | TrackBack(0) | テック | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/144279666
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。