본문 바로가기
Programming/Scala

Conditionals and Value Definitions - Coursera 강의 ppt 번역

by 유주원 2015. 12. 25.

Conditional Expressions


두 가지의 대안 중 하나를 선택하기 위해서 scala에서는 if-else라는 conditional expression을 사용한다.

자바의 if-else와 유사하게 보이지만, statements가 아닌 expression의 용도로 사용한다.


statements와 expression의 차이

- statements는 컴퓨터에게 어떤 동작이나 지시를 내리기 위한 명령문 형태인 반면에 expression은 어떤 값을 산출해내기 위한 함수나 연산자의 조합을 말한다. statements에서는 side effect가 발생하는 반면 expression은 side effect를 발생시키지 않는다고 한다. 자세히 어떤 차이인지 잘 모르겠다.


ex)

def abs(x: Int) = if (x >= 0) x else -x


x >= 0 은 Boolean 타입의 술어이다.


Boolean Expressions


Boolean expressions b는 아래와 같이 구성된다.


- true, false      // 상수

- !b              // 부정

- b && b         // 논리 곱

- b || b        // 논리 합


그리고 아래의 비교 operation을 사용한다.


e <= e, e >= e, e < e, e > e, e == e, e != e


Rewrite rules for Booleans


아래와 같이 Boolean expressions를 축약해서 사용할 수 있다.


- !true == false

- !false == true

- true && e == e

- false && e == false

- true || e == true

- false || e == e


&&와 ||를 계산할 때 항상 자신의 오른쪽 피연산자를 필요로 하진 않는다. 이것을 "short-circuit evaluation"이라고 부른다.



Value Definitions


우리는 함수 파라미터가 값에 의해 또는 이름에 의해 전달될 수 있음을 배워왔다.

값을 정의함에 있어서도 동일한 원칙이 적용 된다.

def로 정의할 시에는 "by-name" 이 적용되며, 이는 실제 사용될 때 값이 적용이된다.


ex) def z = 3 + 4


val로 정의시에는 "by-value"가 적용되며 아래의 예제와 같다.


ex) val x = 2

    val y = square(x)


val의 오른쪽 값들은 정의된 시점에서 값들이 측정이 된다. 결국 y란 이름은 square(x) 를 참조하는게 아니라 4라는 값을 참조하게 된다.


Value Definitions and Termination


우변의 값이 종료되지 않을때 def와 val의 차이점을 살펴보자.


def loop: Boolean = loop

def x = loop

val x = loop


def x는 무사히 정의가 된다. 하지만 val x의 경우에는 무한 루프에 빠질것이다.