如何将这段Kotlin代码改写为更简洁的惯用写法?
简化Kotlin中重复返回逻辑的方案
嘿,你这个合并重复返回逻辑的思路太对了!咱们可以用Kotlin的语法特性把这段代码变得更简洁优雅,完全消除冗余的centerX()调用。
方案一:链式调用+Elvis操作符(最简洁)
直接用安全调用、takeIf和Elvis操作符把逻辑压缩到一行:
private fun getTouchX(): Int { return arguments?.takeIf { it.containsKey(KEY_DOWN_X) }?.getInt(KEY_DOWN_X) ?: centerX() }
这段代码的逻辑是:
- 如果
arguments不为空,并且包含KEY_DOWN_X这个key,就取出对应的值 - 只要上面任一条件不满足,就直接返回
centerX(),完美覆盖了原代码的所有场景,还没有重复逻辑。
方案二:合并条件的if表达式(更直观)
如果你觉得链式调用不够直观,也可以把两个判断条件合并成一个if分支:
private fun getTouchX(): Int { return if (arguments == null || !arguments.containsKey(KEY_DOWN_X)) { centerX() } else { arguments.getInt(KEY_DOWN_X) } }
这个版本和你最初的改写思路一致,把原本分散的两个返回centerX()的场景合并到同一个条件里,逻辑清晰易懂。
小提醒:你原代码里最后一行的argument...应该是arguments.getInt(KEY_DOWN_X),注意别漏了复数的s哦~
内容的提问来源于stack exchange,提问作者Bansook Nam
相关产品推荐
相关产品推荐

