Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- property
- function
- javaservlet
- Java
- 연산자
- 오라클
- springframework
- 코틀린#클래스#상속
- array
- jQuery
- Method
- 자바
- 윈도우 #단축키
- spring
- 데이터베이스
- 상속
- 설치
- File 클래스
- jsp
- css
- JavaScript
- 연락처 프로그램
- list
- 다형성
- Event
- GUI
- html
- String
- 파일 입출력
- kotlin #return #jump
Archives
- Today
- Total
Binary World
리턴과 점프(Returns and Jumps) 본문
코틀린은 세 개의 구조적 점프 표현식이 있다:
- return. 기본적으로, 가장 인접한 둘러싸인 함수 또는 익명 함수로부터 반환된다.
- break. 가장 인접한 둘러싸인 반복을 종료한다.
- continue. 가장 인접한 둘러싸인 반복의 다음 단계를 진행한다.
모든 표현식은 더 큰 표현식의 일부로 사용 가능하다.
val s = person.name ?: return
Break와 Continue 라벨(Labels)
코틀린에서 label로 표시되는 표현들이 있다. 레이블은 식별자로 @를 사용한다. 예시: abc@, fooBar@. 표현식에 라벨을 추가하려면, 표현식의 앞에 사용한다.
loop@ for (i in 1..100) {
// ...
}
break 또는 continue에 라벨을 붙일 수 있다.
loop@ for (i in 1..100) {
for (j in 1..100) {
if (...) break@loop
}
}
라벨이 붙여진 break는 loop@가 표시된 곳으로 이동한 후에 실행된다. continue는 해당 루프의 다음 반복으로 진행된다.
라벨에서 리턴(Return at Labels)
코틀린에서, 함수 리터럴, 지역 함수, 객체 표현식, 함수는 중복될 수 있다. return은 외부 함수에서 반환할 수 있도록 허용한다. 가장 중요한 사용하는 경우는 람다 표현식에서 리턴하는 것이다.
fun foo() {
listOf(1, 2, 3, 4, 5).forEach {
if (it == 3) return // foo()의 호출자에 직접적으로 리턴
print(it)
}
println("this point is unreachable")
}
fun main() {
foo()
}
/* 출력 결과 */
12
람다 표현식에서 리턴을 하고 싶다면, 아래와 같이 라벨을 붙인다.
fun foo() {
listOf(1, 2, 3, 4, 5).forEach lit@{
if (it == 3) return@lit // local return to the caller of the lambda, i.e. the forEach loop
print(it)
}
print(" done with explicit label")
}
/* 출력 결과 */
1245 done with explicit label
람다 표현식 내에 함수를 라벨 이름으로 사용할 수 있다.
fun foo() {
listOf(1, 2, 3, 4, 5).forEach {
if (it == 3) return@forEach // local return to the caller of the lambda, i.e. the forEach loop
print(it)
}
print(" done with implicit label")
}
fun main() {
foo()
}
/* 출력 결과 */
1245 done with implicit label
다음과 같은 방법도 가능하다.
fun foo() {
run loop@{
listOf(1, 2, 3, 4, 5).forEach {
if (it == 3) return@loop // 람다 표현식을 지나서 run 위치에서 리턴
print(it)
}
}
print(" done with nested loop")
}
fun main() {
foo()
}
/* 출력 결과 */
12 done with nested loop
값을 리턴할 때, 파서(parser)는 자격이 있는 리턴에 우선권을 부여한다.
return@a 1
"라벨 @a에 1을 리턴"한다는 의미
'개발자의 길 > Kotlin' 카테고리의 다른 글
클래스와 상속(Classes and Inheritance) (0) | 2019.05.31 |
---|---|
함수(Functions) (0) | 2019.05.30 |
제어 흐름(Control Flow) (0) | 2019.05.28 |
패키지와 임포트(Packages and Imports) (0) | 2019.05.28 |
기본 타입(Basic Type) (0) | 2019.05.28 |
Comments