Kotlin setOnclickListener

Назад в java Я использовал для записи только return для метода void … Но kotlin, похоже, не позволяет просто вернуться, вместо этого использует return@methodname ? Может кто-нибудь объяснить, что это такое и как он добавляет ценность?

  bAddLine.setOnClickListener { val selectedSeries = getSelectedSeries() if (selectedSeries.isEmpty()) { Toast.makeText(this, getString(R.string.toast_channel_mandatory), Toast.LENGTH_LONG).show() return@setOnClickListener } } 

С сайта kotlinlang :

Вернуться на этикетках

С функциональными литералами, локальными функциями и выражением объекта функции могут быть вложены в Kotlin. Квалифицированные возвращения позволяют нам вернуться из внешней функции. Наиболее важным вариантом использования является возврат из лямбда-выражения. Напомним, что когда мы пишем это:

 fun foo() { ints.forEach { if (it == 0) return // nonlocal return from inside lambda directly to the caller of foo() print(it) } } 

return выражение возвращается из ближайшей закрывающей функции, то есть foo. (Обратите внимание, что такие нелокальные возвращения поддерживаются только для лямбда-выражений, переданных встроенным функциям.) Если нам нужно вернуться из выражения лямбда, мы должны пометить его и присвоить ему return :

 fun foo() { ints.forEach lit@ { if (it == 0) return@lit print(it) } } 

Теперь он возвращается только из выражения лямбда. Часто удобнее использовать ярлыки implicits: такая метка имеет то же имя, что и функция, которой передается лямбда.

 fun foo() { ints.forEach { if (it == 0) return@forEach print(it) } } 

Когда внутри лямбда, вы должны указать область, из которой вы хотите return , потому что она может быть неоднозначной. См. Официальные документы о возврате на этикетках .

В этом конкретном случае, если вы вернетесь в конце функции, которая ничего не возвращает, вы можете вообще опустить оператор return .