If 표현식
코틀린에서,
if
는 expression임 즉, 값을 리턴함그래서 3항 연산자 없음
var max = a if (a < b) max = b // With else var max: Int if (a > b) { max = a } else { max = b } // As expression val max = if (a > b) a else b
if
표현식에 코드 블럭이 적용된 경우 반환 값은 블럭의 마지막 줄임val max = if (a > b) { print("Choose a") a } else { print("Choose b") b }
if
표현식의 반환 값을 얻고 싶다면 else
브랜치가 필수임.
'if' must have both main and 'else' branches if used as an expression
When 표현식
when
은 전통적인 switch 문과 비슷함when (x) { 1 -> print("x == 1") 2 -> print("x == 2") else -> { print("x is neither 1 nor 2") } }
when
은 브랜치의 조건이 충족 될 때까지 argument를 매치함when
은 expression 혹은 statement 로 활용될 수 있음표현식으로 활용될때는 처음 매칭하는 브랜치의 값이 선택됨
statement로 활용되면 각 브랜치의 개별 값은 무시된다.
if
처럼 브랜치는 blocked 될 수 있고 마지막 표현식의 값이 선택된다.else
브랜치는 다른 모든 브랜치의 조건이 만족되지 않을때 선택된다.when
절이 표현식으로 사용될때 컴파일러가 모든 케이스가 커버 됨을 보장 할 수 없다면 else 브랜치는 필수이다. 예를 들어 enum
혹은 sealed
클래스에서는 보장 할 수 있다.enum class Color { RED, GREEN, BLUE } when (getColor()) { Color.RED -> println("red") Color.GREEN -> println("green") Color.BLUE -> println("blue") // 'else' is not required because all cases are covered } when (getColor()) { Color.RED -> println("red") // no branches for GREEN and BLUE else -> println("not red") // 'else' is required }
when절 의 조건문 에서는 임의의 표현식,
in
절, is
를 활용한 타입 채킹 등 다양한 표현식을 지원한다. fun hasPrefix(x: Any) = when(x) { is String -> x.startsWith("prefix") else -> false }
For loops
for 루프를 통해 iterator 를 제공하는 모든 것을 순회할 수 있습니다.
that is:
- has a member or an extension function
iterator()
that returnsIterator<>
:
- has a member or an extension function
next()
- has a member or an extension function
hasNext()
that returnsBoolean
.
All of these three functions need to be marked as
operator
.for (item: Int in ints) { // ... }
숫자를 순회하기 위해서 range expression을 사용할 수 있다.
for (i in 1..3) { print(i) } //123 for (i in 6 downTo 0 step 2) { print(i) } //6420
range 혹은 array를 사용하는
for
loop는 indexed for loop로 컴파일 되기 때문에 iterator 객체를 생성하지 않습니다.fun main() { val array = arrayOf("a", "b", "c") for (i in array.indices) { println(array[i]) } //abc for (a in array) { println(a) } //abc }
배열을 루프하는 다른 방법으로
withIndex
라이브러리 함수를 활용하는 것이 있습니다.for ((index, value) in array.withIndex()) { println("the element at $index is $value") }
While loops, Break and continue in loops
while
, do-while
루프 지원전통적인
break
, continue
도 지원