Me preguntaba si hay una forma más simple o más corta de escribir condiciones repetitivas como x == 1 && y == 1 && z == 1.
Podría considerar usar predicados usando all . Por ejemplo:
listOf(x, y, z).all {it == 1} Esto devolverá true cuando x==1 , y==1 y z==1 .
Si el objetivo es acortar lo que desea, no hay mucho espacio para las piernas ya que su expresión booleana ya es muy concisa. Sin embargo, algunas de las otras respuestas han ilustrado cómo hacer que lo que desea sea más legible .
Cuando se trata de código (exactamente) repetido, debe considerar extraer la declaración en un método y darle un nombre significativo, que sepa por el contexto en el que se usa. Esto hace que el requisito (leer el código) sea más fácil de entender, en el punto donde se usa. Y también hace que sea más fácil detectar que siempre es la misma condición.
if (conditionName(x, y, z)) { } fun boolean conditionName(int x, int y, int z) { return x == 1 && y == 1 && z == 1; }No puedo pensar en una declaración más corta para la condición, pero la extracción de un método mejorará la legibilidad de su código, que debería ser su objetivo general.
Puede crear una función de conveniencia para este tipo de código repetido (o si solo necesita que sea más legible o más seguro de editar):
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) Pero no, no hay ninguna otra abreviatura integrada en el lenguaje, que yo sepa: ¡condiciones como x == 1 encadenadas con operadores booleanos son tan simples como pueden ser! Si desea verificar varias cosas sin repetirse, any y all una lo hacen fácil, al mismo tiempo que son flexibles para todo tipo de situaciones y permiten que el usuario combine la funcionalidad que necesita con esas funciones más generales.
Si desea específicamente una versión de all lo que hace una comparación simple con un solo valor, y no requiere crear una listOf iterable, debe escribir la suya propia con esas herramientas (que es básicamente lo que he hecho). ¡Tú decides si crees que vale la pena!