4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

return@の意味/returnの意味

Last updated at Posted at 2019-11-19

stackOverFlawを見ても英語じゃすぐに腑に落ちなかったので、一応。

###return@launchってなんじゃい
androidの公式tutorialをやっていたら、こんな関数にぶつかった。

SleepTrackerViewModel.kt
fun onStopTracking() {
        uiScope.launch {
            val oldNight = tonight.value ?: return@launch
            oldNight.endTimeMilli = System.currentTimeMillis()
            update(oldNight)
        }
    }

"return@launch"ってなんや。
もう少しわかりやすいコードを探すと、

fun foo(ints: List<Int>) {
    ints.forEach {
        if (it == 0) return@forEach
        print(it)
    }
}

####ググった結論
@labelで指定したラムダ処理({~})から脱出(return)できるということだ。
上のコードの場合、@labelをつけなければ、全てのラムダ処理から(最も外側へ)脱出=fun onStopTracking()から脱出する。

#####何が腑に落ちなかったか
返り値のない関数のくせにreturnってどゆこと。
#####ちょっと考えてみた個人的見解(多分合ってる)

  • returnってそもそも関数や{}から脱出するためのもので、返り値がある関数では、return の後ろについた値を持って帰れる。
  • (ご指摘を受けての修正)returnの機能は、戻り値を持って関数や{}から脱出する事。但し、返り値が無い関数や{}の末尾のreturn Unitは省略できる。

(*ちなみに、return Unitやreturnをわざわざ書いてもエラーにはならない。)

今までreturnは返り値専用の乗り物だと思ってたもんで、賢くなれたかも。個人的考察で正確じゃないけど。
もっと賢くなれて嬉しいです。@links_2_3_4さん、ご指摘ありがとうございました。

4
4
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?