본문

170619(월) - Kotlin docs (Control Flow)

Kotlin docs


Control Flow


If Expression

- kotlin의 if는 value를 리턴한다.

- ternary operator는 없다.


// Traditional

var max = a

if (a < b) max = b


// With else

var max: Int

if (a > b) {

max = a

} else {

max b

}


// As 

val max = if (a > b) a else b



- block을 씌우면 마지막 expression이 block의 value가 된다.


val max = if (a > b) {

print("choose a")

a

} else {

print("choose b")

b

}



- statement이 아닌 expression(ex : return value, assigning to variable) 이면 반드시 else문이 있어야 한다.



When Expression

- when은 C와 비슷한 operator인 switch를 대체


when (x) {

1 -> print("x == 1")

2 -> print("x == 2")

else -> {

print("x is neither 1 nor 2)

}

}



- expression으로 사용되면 value는 satisfied된 branch가 전체 expression의 value가 된다.

- statement로 사용되면 개별적인 branch의 값은 무시

- if 문과 마찬가지로 block을 가질 수 있고, 각 block의 마지막 값이 return 값이다.

- expression으로 사용되면 else가 필수이다.


when (x) {

0, 1 -> print("x == 0 or x == 1")

else -> print("otherwise")

}



- arbitrary expression 사용가능


when (x) {

parseInt(s) -> print("s encodes x")

else -> print("s does not encode x")

}



- use range or collection


when (x) {

in 1..10 -> print("x is in the range")

in validNumers -> print("x is valid")

!in 10..20 -> print("x is outside the range")

else -> print("none of the above")

}



- check the type (use smartcast)


fun hasPrefix (x: Any) {

in String -> x.startsWith("prefix")

else  -> false

}



- if-else chain replacement


when {

x.isOdd() -> print("x is odd")

x.isEven() -> print("x is even")

else -> print("x is funny")

}



For Loops

- Anything provides an Iterator

for (item in collection) print(item)


- can be block

for (item: Int in ints) {

//...

}


- use index

for (i in array.indices) {

print(array[i])

}


for ((index, value) in array.withIndex()) {

println("the element at $index is $value")

}



While Loops

while (x > 0) {

x--

}


do {

val y = retrieveData() 

} while (y != null)



Break and continue in loops

kotlin supports traditional break and continue operators in loops




공유

댓글