読者です 読者をやめる 読者になる 読者になる
無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

式と簡単な関数について

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」で定数定義です、といっちゃえばそれまでなのかも。