나누고 싶은 개발 이야기

Data Engineer로서 기록하고 공유하고 싶은 기술들. 책과 함께 이야기합니다.

Language/scala

Evaluation Rules

devidea 2017. 9. 12. 16:35
coursera의 Functional Programming Principles in Scala 강좌를 들으며 중요한 개념들만 블로그에 정리해 보고자 한다.

call by value : 함수를 실행하기 전에 인자들의 값을 구한다.
call by name : 함수를 먼저 실행하고 인자값이 필요할 때 값을 구한다.

다음과 같이 함수가 있다고 하자. 인자값을 달리해서 각 함수를 호출할 때 어떤 속도 차이가 있는지 보자.

def square1(x:Int, y:Int) = x*x
def square2(x: => Double, y:Int) = x*x

square1(2,3) : 2*2 -> 4
square2(2,3) : 2*2 -> 4
동일한 단계가 필요하다.

square1(3+4,8) : square1(7,8) -> 7*7 -> 49
square2(3+4,8) : (3+4)(3+4) -> 7(3+4) -> 7*7 -> 49
call by value가 더 빠르다.

square1(7,2*4) : square1(7,8) -> 7*7 -> 49
square2(7,2*4) : (3+4)(3+4) -> 7(3+4) -> 7*7 -> 49
call by name이 더 빠르다.

square1(3+4,2*4) : square1(7,2*4) -> square1(7,8) -> 7*7 -> 49
square2(3+4,2*4) : (3+4)(3+4) -> 7(3+4) -> 7*7 -> 49
동일한 단계가 필요하다. 


반응형

'Language > scala' 카테고리의 다른 글

Scala의 Enum  (0) 2023.12.17
[Scala] evaluation strategies in scala  (0) 2020.04.03
[Scala] with 키워드 정리  (0) 2019.04.26