我想知道是否有更簡單或更短的方法來撰寫重復條件,例如 x == 1 && y == 1 && z == 1?
uj5u.com熱心網友回復:
當它(確切地)重復代碼時,您應該考慮將陳述句提取到一個方法中并給出一個有意義的名稱,您可以從使用它的背景關系中知道它。這使得需求(閱讀代碼)在使用時更容易理解。而且它也更容易發現它總是相同的條件。
if (conditionName(x, y, z)) {
}
fun boolean conditionName(int x, int y, int z) {
return x == 1 && y == 1 && z == 1;
}
我想不出一個更短的條件陳述句,但是方法提取將提高您的代碼可讀性,這應該是您的總體目標。
uj5u.com熱心網友回復:
您可以為這種重復的代碼創建一個方便的函式(或者如果您只是需要它更具可讀性,或者更安全地編輯):
fun <T> T.allEqual(vararg items: T) = items.all { it == this }
// or you could make the receiver the first parameter instead, this is just
// more explicit about which item is the value being compared against
1.allEqual(x, y, z)
但是不,據我所知,該語言中沒有任何其他簡寫形式 - 像x == 1用布爾運算子鏈接這樣的條件幾乎是盡可能簡單!如果您想在不重復自己的情況下檢查多項內容,any并all使其變得簡單,同時靈活應對各種情況,并允許用戶將他們需要的功能與更通用的功能組合在一起。
如果您特別想要一個all與單個值進行簡單比較的版本,并且不需要創建可迭代的 like listOf,則必須使用這些工具撰寫自己的版本(這基本上是我所做的)。你覺得值不值就看你自己了!
uj5u.com熱心網友回復:
您可以考慮使用謂詞使用all. 例如:
listOf(x, y, z).all {it == 1}
這將true在x==1、y==1和時回傳z==1。
如果目標是縮短您想要的內容,那么您的布爾運算式已經非常簡潔,因此沒有太多的腿部空間。但是,其他一些答案已經說明了如何使您想要的內容更具可讀性。
uj5u.com熱心網友回復:
如果有意義,您可以將這些變數保存在一個類中
data class XYZ(
val x: Int,
val y: Int,
val z: Int)
并將您的實體與XYZ(1, 1, 1);
或者如果只是這三個變數,你可以寫
if (Triple(x, y, z) == Triple(1, 1, 1))
uj5u.com熱心網友回復:
val x = 1
val y = 1
var z = 1
println("$x$y$z" == "111") // prints 'true'
z = 2
println("$x$y$z" == "111") // prints 'false'
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/411473.html
標籤:
