【问题标题】:What is the standard for choosing "when" vs "if/else" in Kotlin?在 Kotlin 中选择“when”与“if/else”的标准是什么?
【发布时间】:2020-03-12 20:16:38
【问题描述】:

我正在从 Java 迁移到 Kotlin,并了解 Java switch 和 Kotlin when 语句之间的各种差异。

我的问题是,当您在一系列“if”和“else if”块中选择“when”时,这些差异是否会改变标准?

例如,在 Java 中,当有 5 种或更多情况时,“switch”通常比“else-ifs”更有效,否则大致相当。当语句为布尔值时,通常首选 if-else。这在 Kotlin 中是否类似?在编写代码时,是否还有其他与 Java 不同的原因需要考虑 - 即可读性标准等。

我希望获得有关该主题的更深入阅读的答案或链接 - 我一直在努力寻找可以进行良好成本效益分析的任何来源。

【问题讨论】:

    标签: java if-statement kotlin switch-statement


    【解决方案1】:

    来自Kotlin Coding Conventions:
    更喜欢将 if 用于二进制条件而不是 when。如果有三个或更多选项,最好使用 when。

    【讨论】:

      【解决方案2】:

      Kotlin 优于 java 的好处是 concise 语法

      什么时候有更好的设计。比传统开关更简洁、更强大

      还有更多与 if else 相关的readable

      什么时候可以在没有参数的情况下使用它。在这种情况下,它充当更好的 if-else 链:条件是布尔表达式。与往常一样,选择匹配的第一个分支。鉴于这些是布尔表达式,这意味着选择结果为 True 的第一个条件。

      when {
          number > 5 -> print("number is higher than five")
          text == "hello" -> print("number is low, but you can say hello")
      }
      

      优点是 when 表达式比 if-else 语句链更简洁、更容易理解

      【讨论】:

      • 是的,我确实喜欢它更具可读性。我想知道我什么时候想应用 if-else 链?只有当每条语句的内容比较复杂,需要缩进的时候?或者是否存在 if-else 也适用于单行情况的情况..
      • @Roonil 它可能更多基于意见/用户偏好
      • @Roonil 你可以在一个when 分支中有多行,没问题。
      • @AlexeyRomanov 哦,是的,当然,我只是觉得 when 分支看起来很乱。也许这只是个人喜好。干杯。
      【解决方案3】:

      我搜索了这个比较,但答案并没有让我很信服,直到我阅读了来自 kotlin 的 control flow doc

      使用When就像告别ifswitch 陈述;

      除此之外,您还可以在以下情况下返回:

         fun whatPosition(number: Int) : String{
              return when(number){
                  1 -> "First"
                  2 -> "Second"
                  3 -> "Third"
                  else -> "Loser"
              }
          }
      

      仍在学习 Kt,我惊讶于我们需要编写的代码比 Java 能做的少得多。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-01-20
        • 2018-09-19
        • 1970-01-01
        • 2019-06-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-25
        相关资源
        最近更新 更多