En Kotlin, ¿hay alguna forma idiomática de probar si un flotador está en un rango donde (o ambos) el inicio o el final del rango es exclusivo?
por ejemplo algo como
val inRange = 10.f in (0.0f until 20f)Parece que no puedo encontrar nada sobre esto en los documentos.
Actualización: ¿Cómo se trataría también con los rangos semiabiertos?
La función until crea el rango de enteros semicerrados (no flotantes), donde se incluye la parte izquierda y se excluye la parte derecha. https://kotlinlang.org/docs/reference/ranges.html
Hay soporte de rangos flotantes cerrados en Koltin https://kotlinlang.org/docs/reference/ranges.html#utility-functions
Puede implementar eso usted mismo
data class OpenFloatRange(val from: Float, val to: Float) infix fun Float.open(to: Float) = OpenFloatRange(this, to) operator fun OpenFloatRange.contains(f: Float) = from < f && f < to val inRange = 10f in (0.0f open 20f)Aquí utilizo varios trucos de Kotlin: https://kotlinlang.org/docs/reference/functions.html#infix-notation https://kotlinlang.org/docs/reference/operator-overloading.html#in
Inspirado por lo que seleccioné como respuesta, se me ocurrió esta solución, y la publico aquí si alguien quiere reutilizarla.
class Range(private val fromInclusive: Boolean, val from: Float, val to: Float, private val toInclusive: Boolean) { infix fun contains(value: Float): Boolean { return when { fromInclusive && toInclusive -> value in from..to !fromInclusive && !toInclusive -> value > from && value < to !fromInclusive && toInclusive -> value > from && value <= to fromInclusive && !toInclusive -> value >= from && value < to else -> false } } } Uso: val inRange = Range(true, 0f, 10f, false) contains 5f