Notación de función infija de Kotlin

En este artículo, aprenderemos la notación infija utilizada en las funciones de Kotlin. En Kotlin, una función marcada con la palabra clave infijo también se puede llamar usando notación infija significa llamar sin usar paréntesis y punto. 
Hay dos tipos de notación de funciones infijas en Kotlin: 
 

  1. Notación de función de infijo de biblioteca estándar
  2. Notación de función infija definida por el usuario

Notación de función de infijo de biblioteca estándar:

Cuando llamamos a operadores como y, o, shr, shl, etc., el compilador busca la función y llama a la deseada. Hay una serie de funciones de notación de infijos de biblioteca estándar, pero discutiremos aquí algunas de ellas. 
Analicemos algunas de las notaciones infijas una por una.
1. Programa Kotlin usando bit a bit y operador – 
 

Kotlin

fun main(args: Array<String>) {
    var a = 15
    var b = 12
    var c = 11
    // call using dot and parenthesis
    var result1 =(a > b).and(a > c)          
    println("Boolean result1 = $result1")
    // call using infix notation
    var result2 =(a > b) and (a > c)         
    println("Boolean result1 = $result2")
}

Producción: 
 

Boolean result1 = true
Boolean result1 = true

Explicación: 
Aquí, hemos llamado a la función a.and(b) usando el infijo ( a y b ). 
Ambos producen el mismo resultado en la salida estándar.
2. Programa de Kotlin para usar el operador shift right(shr) con signo – 
 

Kotlin

fun main(args: Array<String>) {
    var a = 8
 
    // // call using infix notation
    var result1 = a shr 2
    println("Signed shift right by 2 bit: $result1")
    // call using dot and parenthesis
    var result2 = a.shr(1)
    println("Signed shift right by 1 bit: $result2")
}

Producción: 
 

Signed shift right by 2 bit: 2
Signed shift right by 1 bit: 4

Explicación: 
En el programa anterior, hemos utilizado el operador de turno con signo. Primero, realizó la operación usando la notación infija y luego realizó usando punto y paréntesis. 
Si firmamos cambiar el valor por 2 bits, entonces 2 3 =8 se convierte en 2 (3-2=1) =2
3. Programa Kotlin de uso de operadores de incremento y decremento – 
 

Kotlin

fun main(args: Array<String>) {
    var a = 8
    var b = 4
    
    println(++a)      // call using infix notation
    println(a.inc())  // call using dot and parenthesis
    println(--b)      // call using infix notation
    println(b.dec())  // call using dot and parenthesis
}

Producción: 
 

9
10
3
2

Explicación: 
Aquí, hemos usado operadores de incremento y decremento usando notaciones infijas. 
++a representa a(8) + 1, por lo que imprime 9 
a.inc() también representa a(9) + 1, por lo que imprime 10 
–b representa b(4) – 1 = 3 
b.dec() también representa b (3)- 1 = 2
 

Notación de función infija definida por el usuario:

Podemos crear una función propia con notación infija si la función cumple los siguientes requisitos: 
 

  • Debe ser función miembro o función de extensión.
  • Debe aceptar un solo parámetro.
  • El parámetro no debe aceptar un número variable de argumentos y no debe tener un valor predeterminado
  • Debe estar marcado con palabra clave infijo

Programa Kotlin para crear funciones cuadradas con notación infija – 
 

Kotlin

class math {
    // user defined infix member function
    infix fun square(n : Int): Int{
        val num = n * n
        return num
    }
}
fun main(args: Array<String>) {
   val m = math()
    // call using infix notation
    val result = m square 3
    print("The square of a number is: "+result)
}

Producción: 
 

The square of a number is: 9

Explicación: 
En el programa anterior, hemos creado nuestra propia función de notación infija ( m cuadrado 3 ). 
1. En primer lugar, definimos la función de notación de infijos dentro de una clase matemática porque debe ser una función miembro. 
2. Palabra clave infija utilizada para marcar la función. 
3. Contiene solo un parámetro y no tiene un valor predeterminado y el tipo de retorno de la función también es Integer. 
 

square(n : Int):Int

Luego, creamos un objeto para la clase math() 
y llamamos a la función usando notación infija: 
 

m square 3

Calcula el cuadrado del número y devuelve el valor 9
Programa Kotlin para verificar el tipo de datos de la variable con notación infija: 
 

Kotlin

class check{
    // user defined infix member function
    infix fun dataType(x: Any):Any{
    var i = when(x){
            is String -> "String"
            is Int -> "Integer"
            is Double -> "Double"
            else -> "invalid"
        }
        return i
    }
}
fun main(args: Array<String>){
    var chk = check()
    // call using infix notation
    var result = chk dataType 3.3
    println(result)
}

Producción: 
 

Double

Explicación: 
hemos creado una función de notación infija para encontrar el tipo de datos de la variable. 
El tipo de datos se ha pasado como argumento en infix call- 
 

chk dataType 3.3

when comprueba el tipo de datos para el parámetro de paso y devuelve el valor deseado. 
Aquí, devuelve Double a la salida estándar. 
 

Precedencia de función infija con operadores-

La precedencia importa en el momento de la ejecución de una instrucción. Las llamadas a funciones infijas tienen menor precedencia que los operadores aritméticos, las conversiones de tipo y el operador rangeTo.
Las siguientes expresiones son equivalentes: 
 

2 shr 1 + 2 and 2 shr (1 + 2)
1 until n * 2 and 0 until (n * 2)
xs union ys as Set<*> and xs union (ys as Set<*>)

Por otro lado, la llamada de función infija tiene mayor precedencia que los operadores booleanos && y ||, is- y in-checks, y algunos otros operadores. 
Las siguientes expresiones también son equivalentes: 
 

a xor b || c and a xor (b || c)
a in b xor c and a in (b xor c)

Publicación traducida automáticamente

Artículo escrito por Praveenruhil 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 *