Kotlin - LoopJump(break, continue, label)

이동수·2024년 9월 3일

Kotlin

목록 보기
13/33
post-thumbnail

break

현재 루프구성 중 가장 가까운 루프를 종료

for (i in 1..10) {
        if (i == 3) break
        println(i)
    }  
//1 2 출력

continue

가장 가까운 루프의 다음으로 넘어감

for (i in 1..10) {
        if (i == 3) continue
        println(i)
    }
// 1 2 4 5 6 7 8 9 10 출력

Label

식별자 + @ 형태로 사용

가장 가까운 루프말고 원하는 루프의 흐름을 제어

loop@ for (i in 1..100) {
    for (j in 1..100) {
        if (...) break@loop //안쪽 for가 아닌 바깥쪽 for을 빠져나오게됨
    }
}
  1. Label로 break & continue

    • 식별자 + @ 형태로 사용
    • 가장 가까운 루프말고 원하는 루프의 흐름을 제어
    loop@ for (i in 1..100) {
        for (j in 1..100) {
            if (...) break@loop //안쪽 for가 아닌 바깥쪽 for을 빠져나오게됨
        }
    }
  2. Label로 return

  • 코틀린에서 중첩 될 수 있는 요소들 - 함수리터럴, 지역함수, 객체 표현식, 함수
    1. return - 가장 가까운 함수나 익명함수에서 반환

      fun main(){
      	a()
      }
      
      fun a() {
      var ints = listOf(0,1,2,3)
          ints.forEach(
              fun(value: Int) { //이 함수에서 반환
                  if(value == 1) return
                  print(value)
              }
          )
          println("END")
      }
      //023END

      b. 람다에서 return - 가장 가까운 함수가 a라 a에서 return시켜버림

      fun main(){
      	a()
      }
      
      fun a() {
      var ints = listOf(0,1,2,3)
          ints.forEach(
              { 
                  if(it == 1) return
                  print(it)
              }
          )
          println("END")
      }
      //0
      /* 번외 - ()생략가능
        ints.forEach{
                  if(it == 1) return
                  print(it)
              }
       */

      c. 람다식에 대해서만 return하려면 label 사용해야함

    • return@~~~. return에 붙여서 사용 (띄어쓰기x)

      fun main(){
      	a()
      }
      
      fun a() {
      var ints = listOf(0,1,2,3)
          ints.forEach label@{ 
                  if(it == 1) return@label
                  print(it)
              }
          println("END")
      }
      //023END

      d. 암시적 레이블 - 람다식에서만 return을 사용하기

    • 직접 label을 사용하는 것보다 암싲거 레이블이 편리함

    • 암시적 레이블은 람다가 사용된 함수의 이름과 동일

    • return@함수이름만 표기하면됨. ex) return@forEach

      fun main(){
      	a()
      }
      
      fun a() {
      var ints = listOf(0,1,2,3)
          ints.forEach { 
                  if(it == 1) return@forEach
                  print(it)
              }
          println("END")
      }
      //023END

      e. label return시 값을 반환할 경우

    • return@label 반환값 ← 형태로 사용

    • return + @label + 값

0개의 댓글