kotlin - 简化此代码示例以减少行数
问题描述
Kotlin 中是否有更简洁的方法来减少此示例中的代码行数:
// A qualifier will always be provided and one of the
// when selections will be chosen.
when (qualifier) {
QualifierConfiguration.MCCAndMNC -> {
if (composableResource.mcc == null) {
resources.removeAt(index)
return true
}
}
QualifierConfiguration.LanguageAndRegion -> {
if (composableResource.languageAndRegion == null) {
resources.removeAt(index)
return true
}
}
QualifierConfiguration.LayoutDirection -> {
if (composableResource.layoutDirection == null) {
resources.removeAt(index)
return true
}
}
}
return false
我只展示了 3 个项目。在实际代码中还有很多,我想避免重复类似的代码行。删除换行符不是我考虑减少行数的方法。寻找更多的模式。
解决方案
您可以使用范围函数。
在你的时候,只需返回可组合资源。使用守卫 let (?let) 可以确保您有一个非空的可组合资源,因此您可以进行任何您想要的处理
在运行中,您处于您的 composableResource 为空的范围内。所以在这里,您可以删除您的资源并返回 true。
它略微减少了行数,并且您摆脱了代码重复(removeAt + return true)。
when (qualifier) {
QualifierConfiguration.MCCAndMNC ->
composableResource.mcc
QualifierConfiguration.LanguageAndRegion ->
composableResource.languageAndRegion
QualifierConfiguration.LayoutDirection ->
composableResource.layoutDirection
}
?.let {
false
}
?: run {
resources.removeAt(index)
true
}
推荐阅读
- apache-flink - 原因:java.io.IOException:无法序列化 Tuple2 类型的默认值
- sql - 如何查询创建了最新子代的最后 N 个父行?在红宝石中
- vim - 如何在 VimScript 中检测 REAL 操作系统?
- c++ - term 不计算为带 0 个参数的函数
- macos - 如何在mac上安装powerlevel9k
- android - android studio ListView 没有填充现有的 listView 项目,这些项目保存在 SQlite
- c# - Unity StopCoroutine 在有多层(或嵌套)“yield return”时不会停止协程
- java - 如何做谷歌REST驱动API批处理请求
- php - 使用 rateYo 和 willvincent/laravel-rateable
- c# - 在datagridview中启用和禁用复选框列