Hello, Android!

함수의 반환 본문

Kotlin

함수의 반환

lwndnjs93 2020. 3. 8. 20:26

함수 내의 흐름을 제어할때 조건문인 if문과 where문을 사용하지만 

가장 중요한 원하는 시점에 함수를 종료하고 결과를 반환하기 위해서 return을 사용한다

message함수를 호출하면 문자열을 반환하고 함수가 종료되어

그 밑의 println함수는 실행되지 않는다

만약 반환값이 없지만 필요한 타이밍에 함수를 종료해야 한다면 

반환값 없이 return을 실행하면 반환값 없이 함수가 종료된다

이렇게 return을 사용할 경우 return은 Unit을 반환하게 된다

그렇기때문에 위와 같이 반환 타입을 Unit을 명시하고 Unit을 반환하거나

그냥 return만 하거나 둘 다 생략해도 결과는 동일하다

 

- 람다식의 return

위와같이 람다식을 인자로 넘겨줄때 람다식 내에서 return으로 반환을 하게 되면

람다식만 종료되는것이 아닌, 람다를 넘겨준 함수(returnFunc())함수까지 종료되어 start만 출력하게 된다

이렇게 람다식의 return이 호출 함수까지 종료시키는 것을 비지역 반환이라고 한다

https://lwndnjs93.tistory.com/28?category=841592  비지역 반환 참고 링크

비지역반환을 막기 위해 return을 아예 막을수도 있지만, 라벨을 이용하여 람다식만 종료할수도 있다

우선 라벨을 이용하기 위해서는 람다식이 인라인 함수가 아니어야한다

매개변수로 사용하는 람다식의 시작부분에 @라벨 으로 시작부분을 명시하고

return으로 끝나는 부분에도 똑같이 @라벨 으로 끝을 명시해야한다

위의 코드를 실행하면 람다식의 return이후 returnFunc()함수의 뒷부분을 실행하여

start와 end가 출력되는 것을 확인할수 있다

 

- 익명함수를 이용한 반환

람다식 대신 익명함수를 매개변수로 사용하는것도 가능하다

익명함수를 사용할 경우 일반 함수처럼 움직이기 때문에 람다식에서 사용하던

라벨을 사용하지 않아도 되며, return이 여러개인 경우 알기쉬워 유용하다

'Kotlin' 카테고리의 다른 글

예외처리  (0) 2020.03.09
break와 continue  (0) 2020.03.08
반복 while, for  (0) 2020.03.04
중위함수  (0) 2020.03.02
인라인 함수  (0) 2020.03.01