コマンドプロンプトで試した結果です。
名前渡し
呼び出し先が引数にアクセスする毎にコードブロックが実行される。
処理時間がかかる。
def call_by_value(param: => Long)={
param
}
参照渡し
普段はこちらを参照渡しで実装していると思います。
def call_by_reference(param: Long)={
param
}
検証
CやJavaで参照する方が速いのは分かっていますが、処理時間を比較します。
ナノ時間の呼ば出しが変わるので、ログも変わります。
def getTimeNano()={
println("getTimeNano")
System.nanoTime
}
def callByValue(param: => Long)={
println("callByValue : time = " + param)
param
}
def callByReference(param: Long)={
println("callByReference : time = " + param)
param
}
-------------------------------------------
scala> callByValue(getTimeNano())
getTimeNano
callByValue : time = 5794272027535
getTimeNano
res__: Long = 5794274222248
scala> callByReference(getTimeNano())
getTimeNano
callByReference : time = 5807062118780
res__: Long = 5807062118780
-------------------------------------------