краткий код функции для проверки на ноль в колтине - PullRequest
1 голос
/ 12 мая 2019

У меня есть тестовая функция и возвращаю Int.

  fun test ():Int {

        colors?.let { colorsArrayList ->

            color1 = colorsArrayList.getOrNull(0)?.let {
                return if (HexColorValidator().validate(it)) {
                    Color.parseColor(it)
                } else {
                    Color.parseColor("#8DE7C1")
                }
            } ?: kotlin.run {
                return Color.parseColor("#8DE7C1")
            }

        } ?: run {
            return Color.parseColor("#8DE7C1")
        }

        return Color.parseColor("#8DE7C1")
    }
}

Могу ли я написать краткое изложение тогда?

return Color.parseColor("#8DE7C1")

это очень повторяется. можете проинформировать эту строку кода?

1 Ответ

2 голосов
/ 12 мая 2019

Всякий раз, когда я вижу код с большим количеством условной логики, я стараюсь помнить, что я могу «подтолкнуть» нули вправо.Вместо того, чтобы обрабатывать if / else каждый раз, когда вам нужно проверить на ноль, представьте, что вы просто берете то, что хотите (счастливый путь) и пропускаете нули.В конце концов, в итоге вы получите либо нужный вам ответ, либо нулевой, и сможете вернуть желаемое значение.

Например (в основном не проверено):

fun test() =
    colors
        ?.getOrNull(0)
        ?.let { if(HexColorValidator().validate(it)) Color.parseColor(it) else null }
        ?: Color.parseColor("#8DE7C1")

Еще один способ сделать это проще для чтения - расширить String (что, я предполагаю, у вас в colors), чтобы скрыть вызов до HexColorValidator:

fun String.parseColor(): Int? =
    if (HexColorValidator().validate(this)) Color.parseColor(this)
    else null

А затем ваш test() функция становится немного проще:

fun test(): Int =
    colors
        ?.getOrNull(0)
        ?.parseColor()
        ?: Color.parseColor("#8DE7C1")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...