한 걸음 두 걸음
Kotlin 코틀린 ] 05 Control Flow 본문
반응형
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 |