130725 scala ch.2 ppt
DESCRIPTION
scala study Ch.2TRANSCRIPT
FAST, EASY SCALACH.2
SW_MAESTRO 4TH노승학
IF 식은 값을 가진다 -> 모든 구문이 값을 가진다 .
블록은 값을가진다 -> 가장 마지막 값
스칼라의 for 루프는 강력하다
세미콜론 생략
JAVA 나 C 의 void 는 SCALA 의 Unit 타입
함수정의에 함수정의에 == 이 없다이 없다 . (**). (**)
예외는 자바나 C++ 처럼 동작한다 . 하지만 catch 에 패턴매칭을 사용한다 .
스칼라는 체크 예외가 없다스칼라는 체크 예외가 없다 .(**).(**)
이 챕터의 학습목표 ?
if
값을 가진다 .
스칼라 인터프리터는 한줄씩만 읽고 처리하기때문에 여러줄의 조건식이 있을때는 구문이 안끝남을 ‘ { ‘ 로 표시해주어야한다 .
상수 (val) 초기화에 유용하다 .
;
세미콜론 생략가능하다 .
단 한줄에 여러문을 넣고싶은경우 세미콜론으로 구분한다 .
또는 여러줄에 한문을 넣고싶다면 한줄의 끝을 문의 끝이 될수 없는 심볼 (+,-,*..) 로 끝내야한다 . -> -> REPLREPL 에서는 블록설정 안하면 안됨에서는 블록설정 안하면 안됨 ....
블록식과 할당
JAVA, C++ -> {} 은 일련의 문의 집합 , 여러 액션의 집합
SCALA -> 일련의 식의 집합에 따른 하나의 값-> 마지막 값이 리턴값이 됨
x = y = 1 (x)
입력과 출력
print, println, printf
readLine, readInt, readDouble, readByte, readShort, readLong, readFloat, readBoolean, readChar
readLine 은 한줄의 프롬프트 문자열을 받는다 .
LOOP
while,do 는 동일
for(i <- 0 to 9) => for(int i =0;i<10;i++)
to method -> 1 to n -> Range() return
break
기본적으로 존재하지 않는다 .
해결책 1. 이진제어변수(guard) 를 대신 사용한다
2. 2. 중첩 함수를 사용한다중첩 함수를 사용한다 .. 함수중간에서 함수중간에서 returnreturn 가능 가능 (**)(**)
3. Breaks object 의 break method 를 사용한다 .
진화한 for and Comprehension
generator
guard
definition
Function
def fac(n:Int) = { var r = 1 for(i <- 1 to n) r = r* i r}
return 써도되고 안써도된다 .
타입명시 X , 자동으로 추론한다 -> But -> But 재귀호출할땐 반드시 재귀호출할땐 반드시 명시해야함명시해야함 ..
기본인자와 이름인자
함수 parameter의 초기값을 설정할수있다 . -> -> 기본인자기본인자
parameter 대입의 순서가 바뀌어도 이름을 명시해주면 상관없다-> -> 이름인자이름인자
가변인자def sum(args:Int*) = {~~~}
Int*,Double* -> Seq Class 인자
sum(1,2,3,4,5,6) -> 1+2+3+4+5+6
가변길이의 인수를 임의적으로 받을수있다 .
to method 를 써서 리스트를 만들었다면 :_* 를 써서 캐스트 해줘야함 .
프로시져
함수선언에서 값리턴이 Unit(void) 인 함수
= 를 제외하고 선언한다 .
사이드 이펙트만을 위해서 사용한다 .
lazy
val 선언시 lazy val 로 선언할시 선언하자마자 상수값이 계산되지않고 최초에 사용될때에 계산된다 . 파일연산 등과 같은 비싼 초기화에 유리하다
lazy val words = scala.io.Source.fromFile(“/usr/share/dict/words”).mkString-> -> 해당경로에 파일이없더라도 초기화엔 문제가 없다해당경로에 파일이없더라도 초기화엔 문제가 없다 ..
val -> val -> 정의되자마자 계산정의되자마자 계산lazy val -> lazy val -> 처음 사용될때 계산처음 사용될때 계산def -> def -> 사용될때마다 계산사용될때마다 계산
예외 처리
기본적으로 java, c++ 과 동일하다
try/catch, try/finally
예제
빈블록식 {} 값은 무엇인가 ? 타입은 무엇인가 ?
값은 없고 타입은 Unit
예제
x = y = 1 이 유효한 상황은 무엇인가 ?
x 의 type 이 Unit 이거나 Any 인 상황 .