Котлин эквивалентен быстрому, если позволено?- для переменных класса? - PullRequest
1 голос
/ 03 апреля 2019

Мне известно о .let {}, но вычисленное выражение находится внутри лямбда-выражения, которое не очень хорошо работает, если вам нужно что-то вернуть внутри метода.

Пример проблемного кода

fun method(): Int {
  if (anyObject != null) {
    val calculatedValue = anObject!!.awesome()
    val magicTrick = calculatedValue + randomMethodName()

    return magicTrick
  } 
  return false
}

Есть ли лучший способ, чем этот

fun method(): Int {
  val tempObject = anObject
  if (tempObject != null {
    val calculatedValue = tempObject.awesome()
    val magicTrick = calculatedValue + randomMethodName()

    return magicTrick
  } else {
    return false
  }
}

Свифт эквивалент

fun method(): Int {
  if let tempObject = anObject {
    let calculatedValue = tempObject.awesome()
    let magicTrick = calculatedValue + randomMethodName()

    return magicTrick
  } else {
    return false
  }
}

1 Ответ

4 голосов
/ 03 апреля 2019

На самом деле ваш быстрый код может быть еще проще без if let

func method() -> Boolean { return anObject?.someBoolean ?? false }

Если это фактический метод, который вы хотите реализовать, эквивалент котлина:

fun method() : Boolean = anObject?.someBoolean ?: false

Если вам нужно вычислить логическое значение из необязательного свойства:

fun method() : Boolean = anObject?.someProperty?.let{functionThatReturnBoolean(it)} ?: false

.let{} возвращает последнюю строку в своем теле, что может быть полезно во многих случаях.

someThing?.let{} вернет null, если someThing равно null из-за необязательного сцепления.

?: - это оператор значения по умолчанию, эквивалентный ?? в swift, который возвращает значение по rhs, когда его lhs равно null.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...