while 루프
- while
- do-while
- 자바와 다르지 않음
while(조건){
/*...*/
}
do{
/*...*/
}while(조건)
for 루프
- 범위와 수열
- 범위
- 폐구간의 범위를 지정 가능b. 수열
fun main() { val a = 1..10 println(a is IntRange) }
- 범위에 속한 값을 일정한 순서로 이터레이션하는 경우
- 범위
- 예시
fun fizzBuzz(i: Int) = when{
i % 15 == 0 -> "FizzBuzz"
i % 5 == 0 -> "Buzz"
i % 3 == 0 -> "Fizz"
else -> "$i"
}
fun main(){
for(i in 1..100){
println(fizzBuzz(i))
}
}
- 역방향 수열을 원한다면
정수 downTo 정수
사용 - 증가하는 수를 변경 하고 싶다면
step
키워드 사용 - 범위를 폐구간이 아닌 임의의 수 전까지 이터레이션을 원할 경우
..
대신until
사용
맵에 대한 이터레이션
fun main(){
val binaryReps = mutableMapOf<Char, String>()
for(c in 'A' .. 'F'){
val binary = Integer.toBinaryString(c.toInt())
binaryReps.put(c, binary)
}
for((letter, binary) in binaryReps){
println("${letter} = ${binary}")
}
}
..
연산자를 숫자 타입의 값뿐 아니라 문자 타입의 값에도 적용 가능- 이터레이션하는 컬렉션의 원소를 풀어서
letter
와binary
라는 두 변수에 저장- letter : key 값
- binary : value 값
fun main(){
val list = arrayListOf("10","11","1001")
for ((index, element) in list.withIndex()){
println("${index}: ${element}")
}
}
- 컬렉션에 인덱스를 함께 사용 가능
in
을 사용한 원소 검사
in
연산자를 사용해 어떤 값이 범위에 속하는지 검사 가능!in
을 사용하면 어떤 값이 범위에 속하지 않는지 검사 가능
fun isLetter(c: Char) = c in 'a'..'z' || c in 'A'..'Z'
fun isNotDigit(c: Char) = c !in '0'..'9'
fun main(){
println(isLetter('q'))
println(isNotDigit('x'))
}
- when 식에서도 사용 가능!
fun recognize(c: Char) =
when (c){
in '0'..'9' -> "It is a Digit"
in 'a'..'z', in 'A'..'Z' -> "It is a letter"
else -> "I don't know..."
}
fun main(){
println(recognize('8'))
}
- 범위는 비교가 가능한 클래스라면 그 클래스의 인스턴스 객체를 사용해 범위를 만들 수 있음
문자열 비교
fun main(){
println("kotlin" in "java".."scala") // true
println("kotlin" in setOf("java", "scala")) // false
}
- 위의 출력문은 문자열이 해당 범위 사이에 위치하는지 검사(사전을 생각하면 된다.)
- 아래 출력문은 문자열이 해당 집합에 속하는지 검사
참조
KOTLIN IN ACTION
'코틀린' 카테고리의 다른 글
[코루틴] runBlocking (0) | 2023.07.05 |
---|---|
예외 처리 (0) | 2023.01.26 |
선택 표현과 처리 (0) | 2023.01.25 |
클래스와 프로퍼티 (0) | 2023.01.25 |
함수와 변수 (0) | 2023.01.25 |