Я ищу идиоматический способ вернуть, если не нуль, переменную в Kotlin. Например, я хотел бы что-то вроде:

for (item in list) {
  getNullableValue(item).? let {
    return it
  }
}

Но невозможно вернуться внутрь let блока в Котлине.

Есть хороший способ сделать это без необходимости делать это:

for (item in list) {
  val nullableValue = getNullableValue(item)
  if (nullableValue != null) {
    return nullableValue
  }
}
5
pavlos163 4 Сен 2017 в 03:16

4 ответа

Лучший ответ

Можно вернуться из let, как вы можете прочитать в

s1m0nw1 22 Ноя 2018 в 21:52

«Правильный» идиоматический способ сделать это - использовать «первый» метод.

Примере:

val x = listOf<Int?>(null, null, 3, null, 8).first { it != null }

Его конкретный пример будет

return list.first {getNullableValue(it) != null}

1
Ryba 4 Сен 2017 в 15:06

Это может быть что-то вроде:

for (item in list) {
  getNullableValue(item)?.also {
    return it
  }
}

Я предполагаю, что внешний цикл необходим. Если это не так, Рыба предложил решение должно работать.

0
pabloa98 3 Дек 2018 в 00:13

Не уверен, что это будет называться идиоматическим, но вы могли бы сделать это:

val nullableValue = list.find { it != null }
if (nullableValue != null) {
    return nullableValue
}

Редактировать:

Основываясь на ответе s1m0nw1, вы, вероятно, можете сократить его до следующего:

list.find { it != null }?.let {
    return it
}
5
Tim Malseed 4 Сен 2017 в 01:54