式と簡単な関数について
beginner's guideは一通り読んだので、Scala By Example(日本語訳)に入ります。Cahpter4から体系的な構文の説明らしいので、1-3をすっ飛ばして「Chapter4 Expressions and Simple Functions」から。
式と簡単な関数
「def <名前> = <式>」で「式」に名前を付け、関数とすることができます。
- 名前を付けた式は、その名前で呼び出す(関数を実行する)ことができるようになります。
- 同様の定義の機能として「val」がありますが、定義時に式が評価され、利用時に評価されない点でdefと異なります。
- def : 定義時には式は評価されず、利用時に毎回評価される。
- val : 定義時に式が1回だけ評価され、利用時には評価されない(定義時の評価結果が返される。)
object DefSample { def main(args: Array[String]) { var i = 1 // 「def」で式に名前を付ける(定義) def a = 3*i val b = 3*i // valでもにたようなことができるが・・・ // 定義後は名前で式の評価結果を取得できる。 println( "a :" + a ) println( "b :" + b ) // 「def」で定義された式は利用時に毎回評価されるが // 「val」で定義された式は定義時に1回だけ評価される。 // ↓の場合、「def」で定義したaは利用時に評価されるため、変数iの影響を受ける。 i = 2 println( "a :" + a ) println( "b :" + b ) // ↓こうするとわかりやすい。 println("--- define") def x = { println("eval x.") 4*i } val y = { println("eval y.") 4*i } println("--- use") println( "x :" + x ) println( "y :" + y ) } }
実行結果です。
a :3 b :3 a :6 b :3 --- define eval y. --- use eval x. x :8 y :8
まぁ、「def」で関数定義、「val」で定数定義です、といっちゃえばそれまでなのかも。