KOTLIN

Control Flow

공부하는혜원 2021. 5. 24. 01:46

if else 문

 - if문이 식으로 사용되는 경우 값을 반환함 (코틀린에만 있음)

 - if 식의 경우 반드시 else를 동반해야 함

if else문이 식으로 사용되는 경우

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

 - if 식의 branches들이 블록을 가질 수 있음

 - 블록의 마지막 구문이 반환 값이 됨

 - 삼항연산자가 없음 (ex) int max = (a>b) ? a:b ; << 없음

 

when 문  //강력한 switch문

 - when 문은 C계열 언어의 switch문을 대체함

 - 각각의 branches의 조건문이 만족할 때 까지 위에서 부터 순차적으로 인자를 비교함

when (x) {
1 -> print ("x == 1")
2 -> print ("x == 2")
else -> {
  print(" x is neither 1 nor 2")
}}

 - break문도 필요 없음

 - when문이 식으로 사용되는 경우에는 조건을 만족하는 branch의 값이 전체 식의 결과 값이 됨

 - else문은 필수 <<컴파일러가 else문이 없어도 된다는 것을 입증할 수 있는 경우에는 else를 생략 가능

 - 여러 조건들이 같은 방식으로 처리될 수 있는 경우, branch의 조건물에 콤마를 사용하여 표기하면 됨

 - branch의 조건문에 함수나 식을 사용할 수 있음

when (x) {
 parseInt() -> print(" ss ")   // 함수를 넣을 수도 있고
 1 + 3 -> print("4")   // 연산식을 넣을 수도 있음
else -> print(" ddd ")

 - range나 collection에 in이나 !in으로 범위 등을 검사할 수 있음

val vaildNumbers = listOf(3,6,7)
when(x){
 in vaildNumbers -> print("a")   //collection에 입력한 숫자가 있는지
 !in 1..10 -> print("b")   //1부터 10사이 (range)
 !in 10..20 -> print("c")  
 else -> print("n")}

 - is나 !is를 이용하여 타입도 검사할 수 있음

fun hasPrefix(x: Any) = when(x){
 is String -> x.startsWith("prefix") // 이 값이 스트링 이면   //스마트 캐스트
 else -> false
}

 - when은 if-else if 체인을 대체할 수 있음

 - when에 인자를 입력하지 않으면 논리연산으로 처리됨

when {
 x.isOdd() -> print(" x is odd")
 x.isEven() -> print("x is even")
 else -> print(" x is funny")}

 

For Loops (for each문과 비슷)

 - for문은 iterator를 제공하는 모든 것을 반복할 수 있음

for (item in collection)
 print(item)

 - index를 이용하고 싶다면 indices를 이용하면 됨

 - withIndex()를 이용할 수 도 있음

 

 

while Loops

 - do-while 문에서 body의 지역변수를 조건문이 참조할 수 있음

do {
 val y = retrieveData()
}while(y != null)