文法
def 関数名(引数: 型): 戻り値の型 = {
// 処理
return 値
}
return
は省略できる
def greet(name: String): String = {
"Hello, " + name
}
println(greet("ユーザー"))
def double(n: Int): Int = n * 2
参照:サンプルコード
(x: Int) => x + 1
=>
の左側:引数=>
の右側:処理(戻り値の式)変数に代入して使う場合
val addOne = (x: Int) => x + 1
println(addOne(5)) // 6
高階関数の引数に渡す場合
val nums = List(1, 2, 3)
val doubled = nums.map(x => x * 2) // List(2, 4, 6)
引数の型は省略可能
x => x + 1
引数が一つの場合、_
で簡略化
nums.map(_ * 2)
複数引数の場合
(x: Int, y: Int) => x + y
case
を使って特定の入力にだけ反応する関数外側の変数を参照・利用する無名関数
val factor = 2
val multiply = (x: Int) => x * factor
val square = (x: Int) => x * x
println(square(5)) // 25
square
:整数をつけ取って平方を返す関数(x: Int) => x * x
:無名関数def applyTo10(f: Int => Int): Int = f(10)
val result = applyTo10(square)
println(result) // 100
applyTo10
:関数を引数に撮り、それを10に適用する関数参照:サンプルコード
複数引数の関数を、引数1つずつで呼び出せるように分割する技法
def add(a: Int)(b: Int): Int = a + b
val result = add(2)(3) // 5
add
は実際には「Int => (Int => Int)
」という型a
を与えることで、「b
を待つ関数」になるカリー化された関数に一部の引数だけを先に与えて、残りを後で与えるテクニック
val add2 = add(2) // b: Int => Int
println(add2(5)) // 7
add2
は「2を加える関数」になった以下のように、_
を使うこともできる
val double = multiply(2) _
_
が必要な場合もある参照:サンプルコード