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 |