Kotlin Control Flow




If Expression


Kotlin에서는 if 문이 값을 리턴하기 때문에 삼항연산자(condition? A:B) 를 사용할 필요가 없다. 


기존에는 아래와 같이 값을 직접 리턴할 수 없기 때문에 할당을 하는 블락이 필요했다.

val a =3 
val b =4
var max =0
if( a < b ){
max = b
}else{
max = a
}


 Kotlin 에서는 다음과 같이 if 문을 사용 할 수 있다. 생각보다 많은 양의 코드를 줄여 줄 수 있는 부분이다.

val a =3
val b =4
val max = if (a<b) b else a




When Expression


When 문은 자바나 C에 있는 Switch 문을 대체하는 용도로 사용되며, 실제로 코딩을 하다보면 단순히 switch 문의 대체문이 아니라 if else 의 늪을 어느 정도 커버 할 수 있는 제어문이라고 할 수 있다. 

기본적인 사용법은 아래와 같다. (Switch 문과는 다르게 별도의 break 는 필요 없다)


fun test(){
val x = 2
when (x) {
1 -> print("x == 1")
2 -> print("x == 2")
else -> {
print("x is neither 1 nor 2")
}
}// Result : print 'x==2'
}


여러개의 값을 같이 매칭 시키기 위해서는 콤마(',') 또는 범위표현(..)을 사용할 수 있다. (범위 표현식에서는 앞에 "in"을 붙여야 한다)

fun test(){
val x = 2
when (x) {
0,1 -> print("zero and one") // , 를 사용하여 다중값 셋팅
in 2 .. 10 -> print("1 over Under 10") // 범위연산자를 활용하여 범위 표현
else -> {
print("else")
}
}
}



또한, 특정 값이 아니라 statement가 TRUE  냐  FALSE 냐에 따라서 처리도 가능하며, 이를 활용할 경우에 IF-ELSE 문을 대체 할 수 있다. 

fun hasPrefix(x:Any) = when(x){
is String -> x.startsWith("prefix")
else -> false
}
val x = 2
when {
x.isOdd() -> print("x is odd")
x.isEven() -> print("x is even")
else -> print("x is funny")
}





For Loops


For 문은 기본 반복문과 같은 기능을 제공한다고 생각하면 되지만 기본적으로 foreach 문을 기본으로 활용한다고 생각하면 되고 기존의 인덱스 기반으로 인덱싱해서 반복 하는 기능은 다른 형태로 제공한다.


fun test(){

var collection = ArrayList<Int>()
var array = collection.toArray()

for (item in collection) print(item) // 일반적인 foreach 형태

for( i in array.indices){ // Array 순회
print(array[i])
}

for((index,value) in array.withIndex()){ // 인덱스를 가지고 Array 순회
println("the element at $index is $value")
}

}



위와 같이 for statement 를 사용할수도있지만 아래와 같이 foreach 문을 사용해서 표현도 가능합니다.

fun test(){
(1..10).forEach { i -> print(i) }
}




While Loops


while문과 do-while문은 기존의 언어에서 사용하던 문법과 달라진 점이 없습니다. (설명 생략)


fun test(){
while (x > 0) {
x--
}

do {
val y = retrieveData()
} while (y != null) // y is visible here!
}



'Programming' 카테고리의 다른 글

Kotlin Syntax (3) - Null Safe  (0) 2017.07.07
Kotlin Syntax (1) - Basic Type  (1) 2017.07.03
Java8 Lambda 최대값 갯수 표현식  (0) 2017.06.04
[JavaScript] Switch - Fall Through  (0) 2017.05.28
RecyclerView, Cardview Example  (0) 2017.05.28

+ Recent posts