如何用Kotlin更輕鬆地做到這一點?如何在if條件下簡化多個等號檢查?
if (translation.equals(TRANSLATION_X) ||
translation.equals(TRANSLATION_Y) ||
translation.equals(TRANSLATION_Z)
) {
return
} else {
translation = TRANSLATION_X
}
如何用Kotlin更輕鬆地做到這一點?如何在if條件下簡化多個等號檢查?
if (translation.equals(TRANSLATION_X) ||
translation.equals(TRANSLATION_Y) ||
translation.equals(TRANSLATION_Z)
) {
return
} else {
translation = TRANSLATION_X
}
首先,你可以使用structural equality operator ==
,它被傳遞給自動調用.equals(...)
:translation == TRANSLATION_X
,而不是translation.equals(TRANSLATION_X)
。
然後,您可以使用when
statement:
when (translation) {
TRANSLATION_X, TRANSLATION_Y, TRANSLATION_Z -> return
else -> translation = TRANSLATION_X
}
一個時,聲明在這種情況似乎分配:
val translation = when(translation) {
TRANSLATION_X -> translation
TRANSLATION_Y -> translation
TRANSLATION_Z -> translation
else TRANSLATION_X
}
我想你也可以組三個類似的案件在這樣一個句子:
val translation = when(translation) {
TRANSLATION_X, TRANSLATION_Y, TRANSLATION_Z -> translation
else TRANSLATION_X
}
另一種替代方案可能更多效率比when
表達式是使用Set
:
val options = setOf(TRANSLATION_X, TRANSLATION_Y, TRANSLATION_Z)
if (translation in options) return
else translation = TRANSLATION_X
注:此代碼不保留的問題原片的代碼的語義:'VAL翻譯= ...'只會遮蔽'翻譯'從外部範圍(或者如果這是一個局部變量將不會被編譯),並且'translation'不會被重新分配。 – hotkey