Control Flow
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) |