Interfaz comparable en Kotlin

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *