val mynum = 10; println(mynum)
val a : Int = 1 // immediate assignment
val b = 2 // Int type is inferred
// if there is no initializer, Type required
val c: Int
c = 3 // deferred assignment
var x = 5 // Int type is inferred
x += 1 // because x = "var"
Kotlin Docs - Control flow
1. if expression
// 기본형 statement
if (a > b) {
return a
} else {
return b
}
// if can also be used as an expression.
// 값을 return할 수 있다. 아래 둘 다 가능
val maxValue = if (a > b) a else b
val minValue = if (a < b) {
a
} else {
b
}
// 대신 삼항연산자(ternary operator)를 지원하지 않는다.
when (x) {
1 -> print("x == 1")
2 -> print("x == 2")
else -> { // switch에서의 default
print("nothing")
}
}
// 역시 값 return 가능
val check: Boolean? = null
val value = when(check) {
true -> 1
false -> 0
// 반드시 모든 경우의 조건을 정의해야 한다. 아니면 컴파일 에러.
null -> null // 1) 남은 값 추가
else -> null // 2) else 추가
}
// 표현식을 조건식으로 가질 수도 있다.
val p = Person("Alice", 10)
when (p) { // 객체 p의 type이 Person이면 is Person
is Person -> println("yes")
else -> println("no")
}
// range
val cnt = 100
val grade = when (cnt) {
in 90 .. 100 -> "A" // 90 ~ 100
in 80 until 90 -> "B" // 80 ~ 89
else -> "F" // ~ 79
}
enum class Color(val rgb: Int) {
RED(0xFF0000),
GREEN(0x00FF00),
BLUE(0x0000FF)
}
when (getColor()) {
Color.RED -> println("red")
Color.GREEN -> println("green")
Color.BLUE -> println("blue")
// 이때에는 all cases가 covered되었기 때문에 'else' 불필요.
}
when (getColor()) {
Color.RED -> println("red")
else -> println("not red") // no branches for GRENN and BLUE. so else is required
}
for (item in collection) print(item)
for (idx in collection.indices) { // index-based loop
println("item is ${items[idx]}")
}
// range
for (i in 1..3) println(i) // 1 2 3
for (i in 6 downTo 0 step 2) println(i) // 6 4 2 0
while (x > 0) {
x--
}
do {
println(y)
y--
} while (y >= 0)