코틀린에서 while과 do-while 루프가 있다.
두 루프의 문법은 자바와 다르지 않다.
while(조건){ //조건이 참이 될때까지 본문을 반복 실행한다.
/*...*/
}
do{ //맨 처음에 본문을 한 번 실행한 다음. 조건이 참인 동안 본문을 반복 실행
}while(조건)
코틀린에는 자바의 for 루프(변수를 초기화 하고 루프를 실행 할때마다 갱신하고 루프 조건이 거짓이 될때 반복을 마치는 형태의 루프)에 해당하는 요소가 없다.
루프를 대신하기 위해 코틀린에서는 범위(range)를 사용한다.
val oneToTen= 1..10
when을 사용해 피즈버즈 게임 구현(주석 코드 설명)
fun fizzBuzz(i: Int) = when { //return값 문자열로 반환 생략
i % 15 == 0 -> "FizzBuzz" //정수값 i 가 15로 나눠지면 FizzBuzz로 반환
i % 3 == 0 -> "Fizz" // 정수값 i 가 3로 나눠지면 Fizz로 반환
i % 5 == 0 -> "Buzz" 정수값 i 가 5로 나눠지면 Buzz로 반환
else -> "$i" //그 외는 자신의 숫자로 반환
}
for (i in 1..100){ //1..100까지의 정수에 대해 이터레이션 한다.
println(fizzBuzz(i))
}
>>> 1 2 Fizz 4 Buzz Fizz 7 ...
증가 값을 갖고 범위 이터레이션 하기(주석 코드 설명)
for (i in 100 downTo 1 step 2){ //downTo : 100에서 1까지 역방향으로 내려온다.
step : 2 정수값을 건너뛴다.
println(fizzBuzz(i))
}
>>> Buzz 98 Fizz 94 92 FizzBuzz 88 ...
val binaryReps = TreeMap<Char,String>() //키에 대해 정렬하기 위해 TreeMap 이용
for (c in 'A'..'F'){ //A 부터 F까지 문자의 범위를 사용해 이터레이션 한다.
val binary = Integer.toBinaryString(c.code) //아스키 코드를 2진 표현으로 변경
binaryReps[c] = binary //c를 키로 c의 2진 표현을 맵에 넣는다.
(자바에서는 binaryReps.put(c,bianry)로 코딩
}
for ((letter,binary) in binaryReps){ //맵에 대해 이터레이션 한다. 맵의 키와 값을 두변수에 각각 대입한다.
println("$letter = $binary")
}
>>>
A = 1000001
B = 1000010
C = 1000011
D = 1000100
E = 1000101
F = 1000110
이터레이션에는 숫자 값이 아닌 문자 타입의 값에도 적용 할 수 있다.
fun isLetter(c:Char) = c in 'a'..'z' || c in 'A'..'Z' // 'a' <= c && c <= 'z'로 변환
fun isNotDigit(c:Char) = c !in '0'..'9'
println(isLetter('A'))
println(isNotDigit('0'))
true
false
- in 연산자를 사용해 어떤 값이 범위에 속하느지 검사 할 수 있다.
- !in 연산자를 통해 어떤 값이 범위에 속하지 않는지 검사 할 수 있다.
다른 예제
-when 에서 in 사용하기
fun reconzine(c:Char) = when(c){
in '0'..'9' -> "It's a digit"
in 'a'..'z', in 'A'..'Z' -> "It's a letter"
else -> "i don`t know.."
}
println(reconzine('A'))
>>>It's a letter
-setOf를 이용한 in 사용하기
println("Kotlin" in setOf("JAVA","Scala"))
>>>false