関数について

関数定義

通常はメソッドとして宣言される。

def 関数名[型パラメータ](引数名:引数の型名,……):返り値 = 関数本体

たとえば、

def sum(x:Int, y:Int) = x + y

関数リテラル

変数に代入可能。メソッドの引数としても。

(変数名:型名,……) => 関数本体

たとえば、

val sum = (x:Int, y:Int) => x + y

高階関数

引数に関数をとる関数。
第一引数がIntで、第二引数は関数。第一引数の数字をなんらか加工して返す関数をとる。

def exe(x:Int, func:(Int)=>Int) = {
  println(x + " -> " + func(x))
}

exe(5, (x:Int) => x * 9) // 5 -> 45

引数なし、戻り値なしの関数を引数に取る場合は、

def exe(func:() => Unit) = {
  println("start")
  func()
  println("end")
}

exe(() => println("hello"))  // hello

上と似ているけど、コードブロックを引数にとる場合は、

def exe(func: => Unit) = {
  func
}

exe {
  val list = List(1,4,100,55,2)
  println(list.max)
}  // 100