选项链接而不是if / else

时间:2017-12-14 23:41:59

标签: kotlin

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

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

感觉应该有。

2 个答案:

答案 0 :(得分:1)

使用正常的 IF 表达式

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

猫王运营商

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

如果目标是尽可能写出最短的代码,那么你可以使用单行Elvis运算符。但如果目标是可读代码,我会选择简单的 if 表达式或多行Elvis运算符。我甚至会向前迈出一步,将其转移到另一种方法。但无论你选择什么,请不要在一条长线上写下所有内容,而是将它放在不同的行中。

答案 1 :(得分:0)

利用?.?:可以获得以下信息:

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

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

来减少更多
email.addSubject(creator?.let { inviteDescription.format(it) } ?: inviteDescriptionNoCreator.format(group))