Всякий раз, когда я вижу код с большим количеством условной логики, я стараюсь помнить, что я могу «подтолкнуть» нули вправо.Вместо того, чтобы обрабатывать 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")