본문 바로가기

스칼라

스칼라 기본(2)

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문과 비슷한거 같다.

'스칼라' 카테고리의 다른 글

스칼라 기본(5)  (0) 2021.12.26
스칼라 기본(4)  (0) 2021.12.12
스칼라 기본(3)  (0) 2021.12.06
스칼라 기본(1)  (0) 2021.12.05
스칼라 시작하기  (0) 2021.12.05