- [Kotlin] 반복문 탈출하기2023년 10월 17일 21시 07분 04초에 업로드 된 글입니다.작성자: 핀수728x90반응형
for (i in prevLinkIndex until linkList.size - 1) { val link = linkList[i] link.forEach { segment -> if (isLocationOnPath(candidate.latLng, listOf(segment.start, segment.end), 5.0)) { // 후보 값이 존재하는 선분을 찾으면 distance += segment.start.distanceTo(candidate.latLng) break } else { distance += segment.start.distanceTo(segment.end) } } }
중첩된 반복문에서 특정 조건을 만족할 경우 반복문 전체를 탈출하려고 할 때,
다음과 같이 코드를 작성하면 break 부분에 에러가 발생한다.
The label does not denote a loop in forEach.
코틀린에서 for문과 forEach는 다른 문법이다.
forEach는 반복문이 아닌 함수 리터럴이다.
*리터럴 (Literal)
상수와 리터럴 모두 변하지 않는 값(데이터)이라는 점에서는 동일하지만
상수 (Constant) 리터럴 (Literal) 변하지 않는 변수 변수에 넣는 변하지 않는 데이터 이러한 차이를 가지고 있다.
따라서 함수 리터럴이란, 함수를 나타내는 리터럴을 의미한다.
그래서 forEach를 종료하고 싶다면 return을 사용해야한다.
나는 반복문 자체를 종료하는 것이 목적이었으므로 forEach 대신 for문으로 변경했다.
outer@ for (i in prevLinkIndex until linkList.size - 1) { val link = linkList[i] for (segment in link) { if (isLocationOnPath(candidate.latLng, listOf(segment.start, segment.end), 5.0)) { // 후보 값이 존재하는 선분을 찾으면 distance += segment.start.distanceTo(candidate.latLng) break@outer } else { distance += segment.start.distanceTo(segment.end) } } }
코드에서 알 수 있듯 반복문에 라벨을 지정해 실행지점을 라벨이 표시된 반복문 직후로 이동할 수 있다.
나의 경우는 반복문 자체를 종료하는 것이 되겠다.공부하며 작성된 글이라 잘못된 정보가 있을 수 있습니다.
말씀해주시면 수정하겠습니다. 감사합니다.References
아래 글을 참고하여 작성 되었습니다.
The label does not denote a loop in forEach
I am continuing from a loop in Kotlin but I get the warning from the studio that the label does not denote a loop. Could someone tell me what's wrong in the syntax? Here is the code segment ne...
stackoverflow.com
Support non-local break and continue : KT-1436
Description In Kotlin, it is possible to write [non-local returns](https://kotlinlang.org/docs/inline-functions.html#non-local-returns). Non-local return "jumps" over an inlined lambda. But the very same feature but for "continue" and "break" statements is
youtrack.jetbrains.com
상수와 리터럴의 차이와 Kotlin의 함수 리터럴
코틀린을 다루며 자주 등장하는 함수 리터럴에 대한 개념을 제대로 잡기 위해서, 상수와 리터럴을 비교하며 리터럴이란 무엇인지, 코틀린에서의 함수 리터럴이란 무엇인지에 대해서 포스팅하
doing7.tistory.com
728x90반응형'pinslog > Log.daily()' 카테고리의 다른 글
튼튼한 집 짓기 (0) 2023.10.19 [Android] compileSdk 32 to 33 issue (0) 2023.10.18 [Android] 디버그 가능 APK 또는 Android App Bundle을 업로드했습니다. 보안상의 이유로 Google Play에 게시하기 전에 디버그를 사용 중지해야 합니다. (0) 2023.10.16 [Android] bringToFront() in xml (0) 2023.10.15 [Android] ProgressBar 색상 변경하기 (0) 2023.10.14 다음글이 없습니다.이전글이 없습니다.댓글