当前位置: 首页 > 知识库问答 >
问题:

如何使用静态编程语言将嵌套的if-ther更改为当语句?

穆俊杰
2023-03-14

我有下面的代码块,希望使用Kotlin减少它。我该怎么做?

if (name == nameArray[0]) {
    // The statement
} else if(name == nameArray[1]) {
    // The statement
} else if(name == nameArray[2]) {
    // The statement
} else if(name == nameArray[3]) {
    // The statement
} else {
    // The statement
}

共有3个答案

霍建章
2023-03-14

您可以使用更好、更强大的Kotlin构造,when

它的工作原理类似于开关大小写结构,但您也可以使用表达式,请查看此处了解更多信息。

针对您的示例,您可以编写:

when (name) {
    nameArray[0] -> {
    //The statement
    }
    nameArray[1] -> {
    //The statement
    }
    nameArray[2] -> {
    //The statement
    }
    nameArray[3] -> {
    //The statement
    }
    else -> { 
    //Executes when conditions are not met
    }
}
骆利
2023-03-14

您可以使用简化如下

when(name) {
    nameArray[0] -> //statement
    nameArray[1] -> //statement
    nameArray[2] -> //statement
    nameArray[3] -> //statement
    else -> //statement
}

或者,如果您可以使用枚举代替nameArray,如下所示

enum class Names {
    NAME_1, NAME_2, NAME_3
}

并且具有Names枚举类型的name,然后可以使用下面的子句,这是一种更干净的方式,并且更可读

when(name) {
    Names.NAME_1 -> //statement
    Names.NAME_2 -> //statement
    Names.NAME_3 -> //statement
}
陆伟
2023-03-14

如果数组很小,并且要将操作映射到每个索引:

您可以使用indexOfFirst来确定满足您条件的最小索引。然后,您可以使用time语句来决定要做什么。

when(nameArray.indexOfFirst{ it == name }) {
    0 -> // do something
    1 -> // do something else
    //...
    else -> // do something different
}

如果您可能希望对多个索引执行相同的操作,可以使用逗号分隔的值。如果索引是连续的,则可以使用范围:

when(nameArray.indexOfFirst{ it == name }) {
    0 -> // do something
    1, 2 -> // do the same thing for 1 and 2
    in 3..6 -> // do the same thing for 3, 4, 5 and 6
    //...
    else -> // do something different
}

为了使用这种语法,最好先进行索引检索(如图所示)。

如果阵列很大,并且您确实只想检查特定元素:

when(name) {
    nameArray[0] -> // do something
    nameArray[1] -> // do something
    nameArray[2] -> // do something
    nameArray[3] -> // do something
    else -> // other action
}
 类似资料:
  • Go 语言条件语句 你可以在 if 或 else if 语句中嵌入一个或多个 if 或 else if 语句。 语法 Go 编程语言中 if...else 语句的语法如下: if 布尔表达式 1 { /* 在布尔表达式 1 为 true 时执行 */ if 布尔表达式 2 { /* 在布尔表达式 2 为 true 时执行 */ } } 你可以以同样的方式在 if

  • 我想在spring boot中使用嵌套的ConfigurationProperties,它在java中工作,但在kotlin中不工作。我的应用程序属性中有以下行: 我创建了这个结构来处理这些属性: 我添加了 插件和依赖项到我的 当我运行这段代码时,我得到了一个异常:

  • 我试图用OkHttp和Cucumber在静态编程语言中设置一个Spring启动项目,并且在运行Cucumber任务时遇到以下错误。如何修复? 还有build gradle kts片段 我看到了这个错误https://github.com/square/okio/issues/647看起来可能是它,并修复了这个build.gradle,我如何将其翻译为kotlinbuild.gradle.kts?

  • 我想在google api中更改我的标记。所以我在Picasso中使用了“getBitmap”功能,但此功能返回“位图?” .icon(位图描述符从位图(获取位图(user_URL[i])) - 所以,问题是: 类型不匹配错误(需要:位图,找到:位图?) java.lang.NullPointerException:图像在同一行中不能为空 我如何在科特林解决这个问题? 法典: 私人乐趣得到位图(网

  • 问题内容: 我有java.util.logging可以将输出打印到文件中。它工作正常。但是,消息包含中文字符,它们对应于 日志级别 和消息记录的时间。 如何使它打印英文而不是中文字符? 这是当前消息的样子 问题答案: 通过在命令行中传递语言以覆盖操作系统的当前默认语言来启动应用程序。

  • 如图所示,https://stackoverflow.com/a/16639438/8949356,在Java中,当声明的类是公共类时,可以重写其函数 但是我想知道如何用静态编程语言编写完全相同的代码,我已经尝试了很多,但没有找到任何关于这个主题的东西。我可以在Java中去做这件事,但我的其余代码是用静态编程语言编写的,而且我不能一直带着这种怀疑;静态编程语言对我来说是一个很好的工具,我想学习它。