educative - kotlin - 4

Range and Iteration

코틀린에서 1부터 5사이의 숫자와 같은 범위를 표현할때는 Range 클래스를 사용해준다. 기본적으로 마지막 범위를 포함시키며 증가 또는 감소값은 기본 1이다.

<첫번째 값> .. <마지막 값>

숫자 범위 뿐만 아니라 문자 범위, 문자열 범위도 표현할 수 있다.

val oneToFive: IntRange = 1..5 //1 ~ 5까지의 정수
val aToE: CharRange = 'a'..'e' // 'a' ~ 'e' 까지의 소문자 알파벳
val seekHelp: ClosedRange<String> = "hell".."help" // //"help" ~ "hell" 까지의 문자열

println(seekHelp.contains("helm") //true
println(seekHelp.contains"helq") //false

범위를 정해주었다면 for (x in ..)문을 사용해 반복문을 만들수 있다. for문 안에있는 x또한 암묵적으로 val이다.

for (i in 1..5) {print("$i, ")} // 1, 2, 3, 4, 5
for (ch in 'a'..'e') { print(ch) } //abcde

downTo() 메소드를 사용해 reverse iteration 또한 가능하다.

for (i in 5.downTo(1)) {print"$i, ")} // 5, 4, 3, 2, 1
for (i in 5 downTo 1) { print("$i, ") } //5, 4, 3, 2, 1,

또한 맨 끝의 요소를 포함시키지 않는 범위로 동작시키고 시다면 until()을 이용한다.

for (i in 1 until 5) {print("$i ,")} // 1, 2, 3, 4

1이 아닌 일정 간격으로 동작시키고 싶다면 step()을 이용한다

for (i in 1 until 10 step 3) { print("$i, ") } //1, 4, 7,
or (i in 10 downTo 0 step 3) { print("$i, ") } //10, 7, 4, 1,

filter()를 사용해 조건을 걸어줄 수 있다.

for (i in (1..9).filter { it % 3 == 0 || it % 5 == 0 }) { 
    print("$i, ") //3, 5, 6, 9,
}

Iterating over Arrays and Lists

코틀린에서 배열을 생성하기 위해서는 코틀린 패키지에 있는 kotlin.arrayOf()를 사용해준다. 참고로 코틀린 패키지안에 내장된 함수들은 kotlin. prefix를 사용하지 않고 호출이 가능하다.

val array = arrayOf(1, 2, 3)

for (e in array) { print("$e, ")} //1, 2, 3

좀더 구체적으로 정수형 배열 선언을 명시하고 싶다면 intArrayOf() 함수를 호출해주면 된다.

혹은 리스트 인스턴스 List<T>로 만들어줄 수 있다.

배열의 인덱스를 활용하고 싶다면 indices 프로퍼트를 사용해준다.

val names = listOf("Tom", "Jerry", "Spike")

for (index in names.indices) {
  println("Position of ${names.get(index)} is $index")
}
"""
Position of Tom is 0
Position of Jerry is 1
Position of Spike is 2
"""

value와 index를 둘 다 활용하고 싶다면 withIndex() 함수를 사용해준다. 파이썬의 enumerate() 와 비슷하다.

for ((index, name) in names.withIndex()) { 
   println("Position of $name is $index")
}
"""
Position of Tom is 0
Position of Jerry is 1
Position of Spike is 2
"""

When It's Time to Use when

코틀린에서 when문은 다른 언어의 switch문과 동일하다. 자바의 case 대신 -> 을 사용해준다. 맨 밑에 else문으로 조건에 맞지 않을때 행동을 정의할 수 있다.

fun whatToDo(dayOfWeek: Any) =  when (dayOfWeek) {
  "Saturday", "Sunday" -> "Relax"
  in listOf("Monday", "Tuesday", "Wednesday", "Thursday") -> "Work hard"
  in 2..4 -> "Work hard"
  "Friday" -> "Party"
  is String -> "What?"
  else -> "No clue"
}

println(whatToDo("Sunday")) //Relax
println(whatToDo("Wednesday")) //Work hard
println(whatToDo(3)) //Work hard
println(whatToDo("Friday")) //Party
println(whatToDo("Munday")) //What?
println(whatToDo(8)) //No clue

좋은 웹페이지 즐겨찾기