변명은 만개 결과는 한개

[Kotlin] Control Flow 본문

공부/Kotlin

[Kotlin] Control Flow

노마십가 2020. 11. 13. 01:07
728x90
반응형

Control Flow

if, else

java 와 비슷하다

// 활용1
fun test() {
    val a = 10
    val b = 20
    val max = if (a > b) a else b
}

// 활용2
fun test() {
    val a = 10
    val b = 20
    val max: Int
    val min: Int
    if (a > b) {
        max = a
        min = b
    } else {
        max = b
        min = a
    }
}

when

코틀린에는 switch 문이 존재하지 않기에 아래와 같이 when 사용

val a = 10
when (a) {
    1, 10 -> // ...
    else -> // ...
}

맨 마지막 else 는 반드시 붙어야 함

in, !in

또한, in 및!in 키워드로 포함, 포함되지 않은 경우 또한 분기 가능

val validNumbers = 9..10
val a : Any = 30
when (a) {
    in 1..10 -> println("1~10")
    in validNumbers -> println("validNumbers")
    !in 10..20 -> println("a is outside the range")
    else -> println("else")
}
// output: a is outside the range

is

is 키워드로 instaceof 또한 분기 가능

val a = "message"
when (a) {
    1, 10 -> println("1~10")
    is String -> println(a)
    else -> println("else")
}
//output: message

when의 return

아래와 같이 return 가능

fun isString(a: Any) = when (a) {
    is String -> true
    else -> false
}
println(isString("message"))
//output: true

아래와 같이 data class 처리에 활용 또한 가능

class ExampleUnitTest {

    @Test
    @Throws(Exception::class)
    fun test() {
        printSample(SampleOne("test"))
        printSample(SampleTwo(20))
    }

}

fun printSample(sample: Sample) {
    when (sample) {
        is SampleOne -> println("One ( String )")
        is SampleTwo -> println("Two ( Int )")
    }
}

sealed class Sample
data class SampleOne(val name: String) : Sample()
data class SampleTwo(val age: Int) : Sample()

For

// for i 문
val name = "name"
for (i in name) {
    println("i $i")
}

// list 형태
val list = mutableListOf(1, 2, 3, 4, 5)
for (i in list) {
    println("i $i")
}

list 에서 index 필요시

indices 키워드 사용 시 가져올 수 있음

val list = mutableListOf(1, 2, 3, 4, 5)
for (i in list.indices) {
    println("i ${list[i]}")
}

list 에서 index 와 value 모두 필요할 시

withIndex() 사용

val list = mutableListOf(1, 2, 3, 4, 5)
for ((index, value) in list.withIndex()) {
    println("$index $value")
}

break

자바와 동일하게 break 키워드 사용

val list = mutableListOf(1, 2, 3, 4, 5)
for ((index, value) in list.withIndex()) {
    println("$index $value")
    if (index == 1) {
        break
    }
}

step

step 키워드 사용하여 점프할 수 있음

for (value in 1..10 step 2) {
    println("value: $value")
}

map

아래와 같이 map 데이터형을 for 문으로 사용 시 k-v 형태로 가져올 수 있음

val map = mutableMapOf(1 to "ABC", 2 to "BBB", 3 to "CCC")
for ((key, value) in map) {
    println("key:$key value:$value")
}
728x90
반응형

'공부 > Kotlin' 카테고리의 다른 글

[Kotlin] Return, Jumps, This Expression  (0) 2020.11.15
[Kotlin] Lambdas  (0) 2020.11.14
[Kotlin] Function  (0) 2020.11.12
[Kotlin] class  (0) 2020.11.10
[Kotlin] Types, Properties, Fields  (0) 2020.11.07