1. 스칼라 스크립트
맥os의 홈폴더에 Hello.scala 파일을 만들고,
println("Hello Scala, from a script!")
라는 내용을 추가했다.
그리고 scala Hello.scala를 실행하면..
스칼라 스크립트가 잘 작동하였다.
스칼라 스크립트는 args라는 스칼라 배열(array)에 명령행 인자를 받는다.
배열주제에 args(0) 로 표현한다.
+ 로 문자열을 이어붙인(concatenate) 게 자바의 그것과 비슷하다.
2. Loop with while, decide with if
다음과 같이 배열 인덱스를 사용해 이터레이션하는 while문을 돌릴 수 있다.
var i = 0
while(i < args.length) {
println(args(i))
i += 1
}
책에서는, 대놓고 예자가 바람직한 스칼라가 아니라고 한다. 더나은 방법이 뒤에 나온다고 하니 기대된다.
다시,
i의 타입추론 결과는 초깃값이 0인 scala.Int이다.
스칼라에서는 자바처럼 i++이나 ++i를 쓸 수 없다. 그래서 i += 1이라 작성했다.
결과는..
다음과 같은 변형도 있다.
var i = 0
while(i <args.length) {
if(i != 0)
print(" ")
print(args(i))
i += 1
}
println()
command line arguments를 표시하기 위함이다.
결과는..
3. Iterate with foreach and for
위 while 문이 바람직하지 못하단 이유는, 그것이 명령형(imperative) 스타일이었기 때문이다.
작동을 지시하는 명령을 한 번에 하나씩 사용하고, 루프로 이터레이션하면서, 다른 여러 함수 사이에 공유하는 상태를 변경한다.
스칼라에서는 명령형 스타일도 사용 가능하지만, 여러분이 스칼라를 잘 알게 될수록 점점 더 함수형(functional) 스타일로 프로그래밍하고 있는 자신을 발견하게 될 것이다.
실제로 이 책의 주목적 중 하나는 여러분이 지금 현재 명령형 스타일에 익숙한 것만큼 함수형 스타일에도 익숙해지도록 만드는 것이다.
함수형 언어의 주요 특징 중 하나는 함수가 1급 계층 요소라는 것이다.
위 예제보다 더 나은 방법은 다음과 같다.
args.foreach(arg => println(arg))
args에 있는 foreach 메소드 호출, 인자로 함수를..
arg라는 파라미터를 받는 함수 리터럴(function literal)을 사용했다.
결과는..
Concise : 간결한, 축약된
여기서는 스칼라가 arg의 타입이 String임을 추론했지만 개발자가 명시할 수 있다.
args.foreach((arg: String) => println(arg))
더 줄일 수 있다. 함수 리터럴이 인자를 하나만 받는 문장인 경우, arg같은 이름이 필요없다.
args.foreach(println)
자바의 메소드레퍼런스 같다.
다음은 스칼라의 for문이다.
for(arg <- args)
println(arg)
arg <- args : <- 기호는 'in'이라고 말하자. for(arg <- args)는 'for arg in args'
여기서 arg는 val이며, 앞서 얘기했듯 불변이다. args 배열의 원소마다 arg라는 이름의 val을 새로 만들어서 원소의 값으로 초기화한 다음에 for 표현식의 본문을 실행한다.
결과는..
자바스크립트의 for-in문과 비슷한거 같다.