在koltin中进行空检查的简短功能代码

时间:2019-05-12 13:46:56

标签: kotlin

我有一个测试函数并返回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 个答案:

答案 0 :(得分:2)

每当我看到带有很多条件逻辑的代码时,我都会记得我可以向右“推”空值。不用每次都需要测试null时处理if / else,而是想象您只是采用了想要的内容(快乐的路径)并传递null。最终,最后,您将得到所需的答案或为null,并可以返回所需的值。

例如(大部分未经测试):

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")