Dado que Kotlin proporciona al programador, para definir nuevos tipos en términos de clases, debe haber una forma de comparar las instancias de estas clases. Como en Java, la interfaz Comparable proporciona una función compareTo() para comparar dos objetos. Kotlin proporciona esto a través de la interfaz Comparable . Sin embargo, también proporciona ciertas funciones de extensión , lo que proporciona mucha más funcionalidad. Kotlin también ofrece la ventaja adicional de que la instancia que implementa la interfaz Comparable se puede comparar mediante operadores relacionales .
Funciones –
compareTo():
esta función compara el objeto que llama con el objeto pasado. Devuelve cero , si ambos son iguales, un número negativo si el objeto pasado es mayor, de lo contrario, devuelve un número positivo .
abstract operator fun compareTo(other: T): Int
Funciones de extensión –
coerceAtLeast():
esta función comprueba si el objeto que llama es mayor que cierto objeto mínimo. Devuelve el objeto actual si es mayor, de lo contrario devuelve el objeto mínimo
fun <T : Comparable> T.coerceAtLeast(minimumValue: T): T
coerceAtMost():
esta función comprueba si el objeto que llama es más pequeño que el objeto máximo dado. Devuelve el objeto actual si es más pequeño, de lo contrario devuelve el objeto máximo.
fun <T : Comparable> T.coerceAtMost(maximumValue: T): T
coerceIn():
esta función verifica si el objeto que llama está dentro de un cierto valor mínimo y máximo . Devuelve el objeto si está en el rango; de lo contrario, devuelve el mínimo si el objeto es menor que el mínimo; de lo contrario, devuelve el máximo.
fun <T : Comparable> T.coerceIn( minimumValue: T?, maximumValue: T? ): T
Ejemplo para demostrar la interfaz Comparable –
class Rectangle(val length: Int, val breadth: Int): Comparable<Rectangle>{ override fun compareTo(other: Rectangle): Int { val area1 = length * breadth val area2 = other.length * other.breadth // Comparing two rectangles on the basis of area if(area1 == area2){ return 0; }else if(area1 < area2){ return -1; } return 1; } } fun main(){ var obj1 = Rectangle(5,5) var obj2 = Rectangle(4,4) var min = Rectangle(2,2) var max = Rectangle(9,9) // Using relational operator compare two rectangles println("Is rectangle one greater than equal"+ " to rectangle two? ${obj1>obj2}") println("Is rectangle one greater than the " + "minimum sized rectangle? ${obj1.coerceAtLeast(min) == obj1} ") obj2 = Rectangle(10,10) println("Is rectangle two smaller than " + "the maximum sized rectangle? ${obj2.coerceAtMost(max) == obj2}") println("Is rectangle one within " + "the bounds? ${obj1.coerceIn(min,max) == obj1}") }
Producción:
Is rectangle one greater than equal to rectangle two? true Is rectangle one greater than the minimum sized rectangle? true Is rectangle two smaller than the maximum sized rectangle? false Is rectangle one within the bounds? true
rangeTo():
esta función comprueba si el valor se encuentra dentro del rango o no. Si el valor no se encuentra en el rango, devuelve falso, de lo contrario, devuelve verdadero. Aquí los números se comparan según el estándar IEEE-754.
operator fun> T.rangeTo( that: T ): ClosedRange
Programa Kotlin para usar la función rangeTo() –
fun main(args : Array<String>) { val range = 1..1000 println(range) println("Is 55 within the range? ${55 in range}") // true println("Is 100000 within the range? ${100000 in range}") // false }
Producción:
1..1000 Is 55 within the range? true Is 100000 within the range? false
Publicación traducida automáticamente
Artículo escrito por CharchitKapoor y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA