Scala.1 기본 문법. Method / if - expression / for - expression

Programming/Scala 2014. 6. 14. 00:41

Scala.1 기본 문법


사족

지금 와서 스칼라 포스팅이라니.

Functional Programming Language 를 사용할 일이 있어서 어떤 언어로 쓸까 하다가 한번이라도 접해봤던 Scala 를 선택했다. 

작년에 공부했던거 같은데 별로 사용을 안하니 엄청난 속도로 pop 이 되서 .. ㅡㅡ;;;; 

정리해뒀으면 좋았겠지... 라고 같은 후회를 이번에도 하며, 

오랜만에 ... 프로그래밍 관련해서 제대로 글을 쓴게 몇년 만인지 회상하며 포스팅!


어쨌거나 기념비적인 새로운 언어와 첫번째 만남이 되는 글인 만큼 외쳐본다.





Method 의 선언

명색이 Functional Programming Language 다. Method 부터! 

- 다음에 다룰테지만, 스칼라는 Method 와 Function 의 (메서드,함수) 개념이 분리되어 있다.  본문에서는 두 개념을 메서드로 통칭한다.


다음과 같이 정의한다. 

def <functionName> (<argument>: <type> ... ) : <returnType> = { <body> }

단, <returnType> 의 경우 deduction 이 가능하므로 생략 가능하다. 


예컨데

def sum (a: Int, b: Int): Int = {

a + b

}


return keyword 는 사용하지 않는 것이 일반적.


인자 / 리턴 타입으로 사용할 수 있는 타입들

Unit(void), Int, Boolean, String, Method ( a : Int => Int , 인트를 받아 인트를 리턴하는 메서드 )


상수 / 변수 

상수는 그나마 나은데, 변수는 가능한한 어쨌거나 사용하지 않는 것이 스칼라의 기본 스타일이었던 것 같다. 

가장 기본이라고 생각할 수 있는 이 문법을 두번째로 소개하는 이유라 하겠다.

선언할 때, 타입명은 적을 수 없다.


val a = 3

var b = 3


if-expression 

우리의 마음속에 있는 그대로 친숙하다.


if (<predicate>) { <then-clauses> } else { <else-clauses> }


brace ( { , } ) 는 다른 언어와 마찬가지로 생략 가능하다. 



for-expressions

일반적인 for

for ( <indexing var> <- <initial value> until <escape condition> ) 

즉, 다음과 같이 사용할 수 있다.


for (i <- 0 until 10) {


}


for-each ( 여기서의 for - each 는 자바에서의 개념이다 )

컬렉션의 요소를 하나씩 방문하는 형태인 for-each 문 


for (<element> <- <collection>) { <body> }


즉 , 다음과 같이 사용할 수 있다.


val array = Array(1, 2, 3)

for ( element <- array )

{

println(element)

}


또, 스칼라에서 자체적으로 foreach 라는 컬렉션의 멤버 메서드가 built-in 으로 존재하는데, 다음과 같다

<collection>.foreach(<Method>)


컬렉션의 각 요소에 대해서 인자로 전달받은 메서드를 적용한다. 


val array = Array(1, 2, 3)

def increment(a: Int){

  a+1

}

array.foreach(increment)


요소는 하나씩 얻어지므로, foreach 의 Method 는 element => Unit 의 형태로 구성되어야 한다.