한 걸음 두 걸음

Kotlin 코틀린 ] 05 Control Flow 본문

Language/Kotlin

Kotlin 코틀린 ] 05 Control Flow

언제나 변함없이 2019. 5. 20. 07:58
반응형

if문

if문이 식으로 사용될 수 있다.

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

이 때 else를 반드시 명시해주어야하며, true일경우 a false일경우 b를 반환합니다.

val max = if(a>b) {
    printf("a")
    a
}else {
    print("b")
    b
}

이럴 땐 a > b가 참일 경우 a가 max에 들어가고, false일경우 b가 들어갑니다.

대신 JAVA에는 있는 코틀린이 삼항연산자가 없습니다.

When

switch문과 같은 것으로, 어떤 조건이 만족할 때까지 조건을 확인합니다. 때문에 break문이 필요없습니다.

when (x){
    1 -> print("x = 1")
    2 -> print("x = 2")
    else -> {
        print("x는 1도 2도 아닙니다.")
    }
}

이 때 when문이 식(반환하는)으로 사용될 수 있는 것이 특징입니다.

var res = when(x){
    100 -> "A" // x값이 100일경우, "A"값을 반환합니다.
    90 -> "B"
    80 -> "C"
    else -> "D" //else를 꼭 명시하지 않아도 되는 경우 쓰지 않아도 됩니다.(x값이 true / false 둘 중 하나일경우 등)
}

when문을 사용해서 여러 조건을 같이 걸고싶은 경우에는

when (x){
    0, 1 -> print("x는 0이거나 1입니다.")
    else -> print("otherwise")
}

위와같이 콤마(,)로 구분해서 써주면 0이거나 1인 경우가 걸립니다.
그리고 조건을 표시하는 곳에 parseInt(x)나 1 + 3 등의 식으로 표현할 수도 있습니다.
++ collection에 in인지 확인하는 등의 방법으로 사용해볼 수도 있습니다.

val b = listOf(3,6,9)

when (x){
    in b -> print("있습니다.") //x값이 b리스트 내부에 있는 값일 경우
    in 1..10 -> print("x값이 1~10사이에 있습니다.")
    else -> print("위의 어떤 조건도 만족하지 못했습니다.");
}

스마트캐스트

fun has(x:Any) = when(x){
        is String -> x.startWith("prefix") //x가 String타입이면 -> String으로 스마트캐스트됨.
        //String 내부 함수인 startWith를 사용함
        else -> false //그게 아닐경우 false를 반환.
}

for-in

for문은 iterator을 제공하는 모든 것을 반복할 수 있습니다.

for( item in collection ){ 
//collection 은 iterator를 가진 객체여야 사용할 수 있습니다.
    print(item)
 } 

iterator()를 반환함수와 next()와 hanNext() 함수가 있어야 쓸 수 있습니다.-> 커스텀 클래스도 얼마든지 가능하게됩니다.

fun main(arge:Array<String>{
    val = myData = MyDate();
    myData.iterator();

}
class MyData{
    operator fun iterator() : MyIterator{
        return MyIterator();
    }

 class MyIterator {
     val data = listOf(1, 2, 3, 4, 5)
    var idx = 0
    operator func hasNext() : Boolean {
        return data.size > idx
    }
    operator fun next() : Int{
        return data[idx++]
    }
 }
}

indices

배열이나 리스트를 반복할 때 index를 사용할 수 있게 해줍니다.

var array = arrayOf("가"."나","다")
for ( i in array.indices){
    println(" $i : ${array[i]} ") 
}

인덱스 뿐만 아니라 value값도 같이 사용하고싶은 경우에는 withIndex()를 이용하면 됩니다.

while loop

java와 유사
다른 점이 있다면 do while문에서 do에서 정의한 지역변수를 while 조건문으로 사용할 수 있다는 점 정도...

반응형

'Language > Kotlin' 카테고리의 다른 글

Kotlin 07 ] 클래스와 상속  (0) 2019.05.20
Kotlin ] 06 Package, Return and Jumps  (0) 2019.05.20
03. kotlin basic types  (0) 2019.04.28
02 코틀린 기본 문법  (0) 2019.04.28
01. 코틀린을 배워야하는 이유  (0) 2019.04.27