코틀린에서 if는 표현식이다. 즉 값을 반환한다. 따라서 삼중 연산자(condition? thne: else)를 사용 할 필요가 없다.
// 일반적인 사용
var max = a
if (a < b) max = b
// else와 함께 사용
var max: Int
if (a > b) {
max = a
} else {
max = b
}
// 한 줄로 끝
val max = if (a > b) a else b
if 블럭의 마지막 변수가 리턴 된다.
val a = 5
val b = 9
val max = if (a > b) {
println("Choose a")
a
} else {
println("Choose b")
b
}
println(max)
when
when은 C 계열 언어의 switch를 대신해서 사용 할 수 있다.
when (x) {
1 -> print("x == 1")
2 -> print("x == 2")
else -> { // Note the block
print("x is neither 1 nor 2")
}
}
when은 조건이 일치되는 브랜치를 찾을 때까지, 순차적으로 매개변수를 검사한다. 일치하는 브랜치가 없을 경우에는 else문을 실행한다. C 언어의 default와 같은 일을 한다. 모든 조건에 대한 검사가 불가능 할 경우 else 문을 반드시 써야 한다.
조건이 두 개 이상의 매개변수를 일치하는 경우가 있는데, 이때는 일치하는 조건을 함께 사용 할 수 있다.
when (x) {
0, 1 -> print("x == 0 or x == 1")
else -> print("otherwise")
}
브랜치 실행 조건으로 (상수뿐만이 아니라)임의의 표현식을 사용 할 수도 있다.
when (x) {
Integer.parseInt(s) -> print("s encodes x")
else -> print("s does not encode x")
}
in, ! 등을 이용해서 범위를 조건으로 설정할 수 있다.
when (x) {
in 1..10 -> print("x is in the range")
in validNumbers -> print("x is valid")
!in 10..20 -> print("x is outside the range")
else -> print("none of the above")
}
is를 이용해서 값의 타입을 체크 할 수도 있다.
fun hasPrefix(x: Any) = when(x) {
is String -> x.startWidth("prefix")
else -> false
}
when은 if 문을 대체하기 위해서 사용 할 수도 있다. when에 매개변수가 없으면, 단순히 분기 조건의 참/거짓을 가지고 브랜치를 실행한다.
when {
x.isOdd() -> print("x is odd")
x.isEven() -> print("x is even")
else -> print("x is funny")
}
for
for 문은 조건을 만족 할 때까지 코드를 실행하기 위해서 사용한다.
for (item in collection) print (item)
블럭문을 가질 수도 있다.
for (item: Int in ints) {
// ...
}
for 문은 iterates를 제공하는 요소들 즉, iterator(), next(), hasNext()를 가지는 함수들에 대해서 사용 할 수 있다. 인덱스를 가지는 배열은 아래와 같이 사용 할 수 있다.
for (i in array.indices) {
print(array[i])
}
withIndex()를 사용 할 수도 있다.
val numbers: IntArray = intArrayOf(10, 20, 30, 40, 50)
for((k, v) in numbers.withIndex()) {
println("the element at $k is $v")
}
while
while과 do..while은 동일하게 사용 할 수 있다.
while ( x > 0 ) {
x--
}
do {
val y = retrieveData()
} while (y != null)
Contents
if
when
for
while
Recent Posts
Archive Posts
Tags