代码之家  ›  专栏  ›  技术社区  ›  thesilverbail

选项链接而不是if/else

  •  3
  • thesilverbail  · 技术社区  · 8 年前

    有没有更简洁的方法来使用选项链和/或elvis运算符编写以下代码?

    email.addSubject(if (creator != null)  String.format( inviteDescription, creator) else String.format(inviteDescriptionNoCreator, group))
    

    感觉应该有。

    2 回复  |  直到 8 年前
        1
  •  2
  •   Henry    8 年前

    使用法线 如果 表示

    val subject = if (creator != null) {
        inviteDescription.format(creator)
    } else {
        inviteDescriptionNoCreator.format(group)
    }
    email.addSubject(subject)
    

    Elvis操作员

    val subject = creator?.let {
        inviteDescription.format(it)
    } ?: inviteDescriptionNoCreator.format(group)
    email.addSubject(subject)
    

    如果目标是编写尽可能短的代码,那么可以使用单行Elvis运算符。但如果目标是可读代码,我会选择简单的 如果 表达式或多行Elvis运算符。我甚至会提前一步,把它转移到一个单独的方法。但无论你选择什么,请不要把所有的东西都写在一行长线里,而是分开写。

        2
  •  0
  •   andrej88    8 年前

    只是利用 ?. ?: 给了我们以下信息:

    email.addSubject(creator?.let { String.format(inviteDescription, it) } ?: String.format(inviteDescriptionNoCreator, group))
    

    不幸的是,这仍然很长,可以说不容易阅读。你可以使用 String.format 扩展功能:

    email.addSubject(creator?.let { inviteDescription.format(it) } ?: inviteDescriptionNoCreator.format(group))