LoginSignup
0
1

More than 5 years have passed since last update.

kotlinの'@'ラベルを使っていつでもreturnする

Posted at
val callback = {
  // なにか
  ...
}

...

callback?.invoke()

kotlinは{ }で囲まれたコードは、ラムダ式になるのでこんなこともできます。
しかし、、、

val callback = {
  if (someValue == 100) return // <- エラー
  ...
}

...

callback?.invoke()

ラムダ式の中でreturnするとエラーになってしまいます。
メソッドにラムダ式を使うときは@メソッド名をつけると問題なくreturnできるのですが、
上のコードの場合は@のあとに付ける名前が無いのでできません。

list.forEach {
  if (it == 10) return@forEach
}

こういうときはラベルを付ければいいよという話。

val callback = mark@{
  if (someValue == 100) return@mark
  ...
}

...

callback?.invoke()

markっていうのは適当に付けたもので実際は何でもいい。
@の位置がラベル付けとreturnで違うのがモヤモヤするけど、
便利です。

0
1
0

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
0
1