Statistical Programming

関数とメソッド in Scala

関数とメソッド。一見同じように見えるが、メソッドはオブジェクトやクラスに結びついているもの。関数はそれらに結びついていない単独な第一級オブジェクト(少なくともScala利用者の立場的には)であり値として扱うことが出来る。僕みたいなめんどくさがりやには結構便利な機能で例えばあるメソッドの処理時間を調べたい場合。

 

  def examine(post:String):Unit={

    //何も返さない適当な処理

 }

 

 

  def time(f:String=>Unit,post:String)={

    val start=System.currentTimeMillis

    f(post)

    val end=System.currentTimeMillis

    println("it takes "+(end-start))

  } 

 

 今回上のexamineの処理時間を調べたいとする。timeメソッドはStringを受け取りUnitを返す(つまり何も返さない)関数とStringを引数にとるメソッド。そしてこれら2つのメソッドはオブジェクト、NF2に属しているとする。2つの定義は上でしたので後は実行するだけ。

  val t=NF2.time _

  valf=NF2.examine _ 

//オブジェクトのメソッドは関数ではないので関数化するには メソッド名+ _  

  t(f,"失敗成功") 

  t(f,"彼は私に気があるのでしょうか?"

 

 楽で良いー。