我有一个测试函数并返回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")
这很重复。可以简述此行代码吗?
答案 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")