Múltiples valores de retorno en Kotlin

Kotlin es un lenguaje de programación de propósito general tipificado estáticamente desarrollado por JetBrains, que ha creado IDE de clase mundial como IntelliJ IDEA, PhpStorm, código de aplicación, etc. Fue presentado por primera vez por JetBrains en 2011 y es un nuevo lenguaje para JVM. Kotlin es un lenguaje orientado a objetos y un «lenguaje mejor» que Java, pero aún así es totalmente interoperable con el código Java. En este artículo, vamos a discutir cómo devolver múltiples valores, pero antes de continuar, debe saber algunas cosas básicas, como cuando declaramos una función, realiza una tarea específica y, finalmente, puede devolver un valor que es el significado de devolver valores. pero, por lo general, la función no devuelve más de un valor, así que esperamos que sepas este tipo de cosas básicas, pero en caso de que no las sepas, consulta este artículo Funciones de Kotlin .

Ejemplo

Digamos que queremos calcular las raíces cuadradas positivas y negativas de un número entero. Podríamos abordar este problema escribiendo dos funciones diferentes: 

Kotlin

fun positiveRoot(k: Int): Double {
  require(k >= 0)
  return Math.sqrt(k.toDouble())
}
  
fun negativeRoot(k: Int): Double {
  require(k >= 0)
  return -Math.sqrt(k.toDouble())
}

Otro enfoque podría ser devolver una array para que solo tengamos que invocar una función:

Kotlin

fun roots(k: Int): Array<Double> {
  require(k >= 0)
  val root = Math.sqrt(k.toDouble())
  return arrayOf(root, -root)
 }

Sin embargo, no sabemos por el tipo de devolución si la raíz positiva o la raíz negativa están en la posición 0. Tendremos que esperar que la documentación sea correcta; si no, inspeccione el código fuente. Podríamos mejorar esto aún más usando una clase con dos propiedades que envuelvan los valores devueltos:

Kotlin

class Roots(pos: Double, neg: Double)
fun roots2(k: Int): Roots {
  require(k >= 0)
  val root = Math.sqrt(k.toDouble())
  return Roots(root, -root)
}

Esto tiene la ventaja de tener campos con nombre para que podamos estar seguros de cuál es la raíz positiva y cuál es la raíz negativa. Una alternativa a una clase personalizada es usar el tipo Pair de la biblioteca estándar de Kotlin. Este tipo simplemente envuelve dos valores, a los que se accede a través del primer y segundo campo:

Kotlin

fun roots3(k: Int): Pair<Double, Double> {
  require(k >= 0)
  val root = Math.sqrt(k.toDouble())
  return Pair(root, -root)
}

Esto se usa con mayor frecuencia cuando está claro lo que significa cada valor. Por ejemplo, una función que devolviera un código de moneda y una cantidad no necesariamente tendría que tener una clase personalizada, ya que sería obvio cuál era cuál. Además, si la función fuera una función local, podría sentir que crear una clase personalizada sería un modelo innecesario para algo que no será visible fuera de la función miembro. Como siempre, la elección más adecuada dependerá de la situación.

Nota: existe una versión de tres valores del par, que se llama apropiadamente triple.

Podemos mejorar esto aún más mediante el uso de declaraciones de desestructuración en el sitio de la persona que llama. Las declaraciones de desestructuración permiten que los valores se extraigan automáticamente en variables separadas:

val (pos, neg) = roots3 (16)

Observe que las variables están contenidas en un bloque de paréntesis; El primer valor se asignará a la raíz positiva y el segundo valor se asignará a la raíz negativa. Este azúcar sintáctico funciona con cualquier objeto que implemente una interfaz de componente especial. El tipo de par integrado y todas las clases de datos implementan automáticamente esta interfaz.

Publicación traducida automáticamente

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