Могу ли я изменить, когда с проверкой на ноль, на другой подход? - PullRequest
3 голосов
/ 11 октября 2019

В Kotlin есть более "Kotlin" способ сделать следующее?

fun parse(inputSample: Sample): List<String> = 
   when {
     inputSample.foo != null -> parse(inputSample.foo)
     inputSample.bar != null -> parse(inputSample.bar)
     else -> emptyList()
  }

Я подозреваю, что проверка для null с when может быть написана по-другому в Kotlin

Ответы [ 2 ]

7 голосов
/ 11 октября 2019

Вы можете использовать функцию определения объема, чтобы уменьшить «избыточный» код:

fun parse(inputSample: Sample): List<String> = inputSample.run {
    when {
        foo != null -> parse(foo)
        bar != null -> parse(bar)
        else -> emptyList()
    }
}

Или объединить с оператором elvis (обратите внимание, что предполагается, что foo и bar относятся к одному и тому же типу):

fun parse(inputSample : Sample) : List<String> = inputSample.run {
    (foo ?: bar)?.let { parse(it) } ?: emptyList()
}
2 голосов
/ 11 октября 2019

Я не уверен, что это более котлинский способ, но вы также можете сделать следующее

fun parse(inputSample: Sample): List<String> = 
      inputSample.foo?.let { parse(it) } ?: inputSample.bar?.let {parse(it) } ?: emptyList()
...