2014년 3월 27일 목요일

[일기] Scala 03 조사 보고

그때 '심심한' 때가 찾아왔다. 그후 찾아본 내용을 정리하여야 했다. 쉽지 않았다. 문제는 내 글쓰기 실력이었다. 그러나 드디어 막바지에 도달했다. 이 글이 당시 찾아본 내용의 거의 마지막이다.

제어문.

 IF/ELSE
  약방의 감초와 같이 바늘의 실과 같이 군대의 이등병같이 항시 존재하는 구문이다.

  if ( x > 0 ) 1 else -1

 눈을 크게 뜨고 보지 않아도 이는 명백히 조건 분기문으로 보여진다만, 특이한 것은 분기 내용이다. 덩그러니 1하고 -1만 쓰여 있지 않은가.


[그림 1]

 무슨 일이 일어났는가. 저 IF/ELSE 구문이 값을 반환했다는 것이다. 보통 눈치가 없는 사람이라도 이것이 삼항 연산자(?:)와 유사하다는 사실을 간파할 수 있다. 그렇다. 스칼라에는 삼항 연산자가 별도로 존재하지 않는다.

 또한 반환 타입이 확정돼 있는 것이 아니므로 무엇을 리턴하든 상관이 없다.

  if ( x > 0 ) "hello I'm string" else 1021

 으로 문자열이나 숫자를 리턴할 수도 있다. 딱히 세미콜론도 없다.

  else는 당연히 생략 가능하다. 단, 이 때는 'else ()'가 자동으로 생성된다고 보면 된다. ()는 Unit 타입니다.

 이런, '스위치'가 없다.

---------------------------------------------------------

 문장 종결.

 세미콜론을 이용한다. 한 줄에서 여러 문장을 작성할 때는 반드시 구분한다. 맨 뒷 문장은 세미콜론이 필요가 없다.
 그룹화된 복문은 '중괄호'로 묶는다.

 스칼라에서 명령을 입력할 때 주의하여야 한다. 가령,

 val test = x0 + (y1 - y0) * x1 + 4.4 * ( z0 + z1 ) * ( z1 - z0 )

 의 수식을 작성할 때, 너무 길어서 두 줄로 나누어 쓰고 싶다고 한다면 개행 직전에 입력된 문자열은 일반적으로 절대 문장의 끝에 올 수 없는 것들로 이루어져야 한다. 이를 보통 행말 금칙어라 호칭한다. 즉, 이 행말 금칙어와 허용 가능한 문자를 제외한 모든 문자를 개행 전에 입력해야 한다.

val test = x0 + (y1 - y0) * x1
 + 4.4 * ( z0 + z1 ) * ( z1 - z0 )    안 좋은 예(X)
val test = x0 + (y1 - y0) * x1 +
 4.4 * ( z0 + z1 ) * ( z1 - z0 )      좋은 예 (O)

이상.
-------------------------------------------------------------------------------

블록 할당.


[그림 2]

 In this case, I'll leave only this picture 2 just here. Just check what functions the block assignment has.

오류는 필요한 패키지를 임포트 안해서 발생했다. 

 '블럭의 값은 블럭 내의 마지막 문장의 값이다'

이것을 알면 된다.

 참고로 스칼라에서의 할당문(대입문)은 리턴값이 Unit이라는 사실에 유의하여야 한다. 이 말인 즉슨,

 { "hello", x = 32 }

이 블럭의 값은 결국 마지막 문장의 값, Unit이라는 것이다. 절대 32가 아니다. 다음 두 개 그림을 잘 비교하면 이해가 된다.


[그림 3]

 할당에러가 Unit를 Int에 못 대입한다는 내용으로 이루어져 있다.

[그림 4]

 블럭의 값이 첫째(윗부분)에선 마지막 문장이었던 y의 값으로 리턴되었으나, 둘째(아랫부분)에선 리턴값이 없음을 확인할 수 있다.

--------------------------------------------------------------------------------------------------------

댓글 없음:

댓글 쓰기