2012年6月24日日曜日

Scalaは関数言語

Bloggerを使ってみるついでにいろいろとメモ代わりに書いていくことにする。
とりあえず話題のScalaを触ってみたメモをいろいろ。

関数型言語ということなのでまずはそのあたりから。

object FuncSample {
  def main(args: Array[String]) {
    val func1 = sum _;
    println(func1(1,2));
  }
  def sum(val1: Int, val2: Int) : Int = {
    val1 + val2;
  }
}

インスタンスを作れるクラスはJava同様 classで定義するのだが、
Javaでいうところのstaticな関数はobjectの中に定義する。
メソッドを定義する際には、「{」の前に=をつけるみたいだが、戻り値のないものは省略できる。

定義した関数を「関数として」参照する場合には関数名に「_」をつける。
でそれを変数に代入して呼び出すことができる。

もちろん実行結果は、
3
上の例で
var func1 = sum _;
の部分は、変数の型が省略されている。
省略しないでちゃんと書くなら、
var func1 : (Int,Int) => Int = sum _;
となる。
関数の型を記述する場合には、
「(変数の型のリスト) => 戻り値の型」
と書く。

インスタンスメソッドを関数として参照する場合にはこんな感じ。
object FuncSample {
  def main(args: Array[String]) {
    val fs: FuncSample = new FuncSample;
    val func1 : (Int,Int) => Int = fs.sum _;
    println(func1(1,2));
  }
}

class FuncSample {
  def sum(val1: Int, val2: Int) : Int = {
    val1 + val2;
  }
}

ふむ。

0 件のコメント:

コメントを投稿