Inciso sobre Units e iguales

Una pequeña nota técnica sobre la palabra clave Unit, que nos deja crear funciones que no devuelven nada. A tener en cuenta si vamos a usarlas que depende mucho si usamos o no el símbolo = (igual) a la hora de declarar la función cuando es de tipo Unit. En este vídeo os cuento por qué.

Este curso ha sido marcado como anticuado y no está siendo revisado de forma activa. Es posible que la información pueda estar desactualizada o que los enlaces se hayan roto.

En Scala, al igual que en otros lenguajes de programación, existen diferentes tipos de datos que nos permiten manejar información de diversas formas. Entre ellos encontramos los enteros, los números de punto flotante, los booleanos, las cadenas de texto y muchos más. Sin embargo, hay un tipo especial que merece nuestra atención: el tipo Unit. Este tipo es el equivalente al void en lenguajes como Java o C++, y se utiliza para funciones que no devuelven ningún valor.

Las funciones que devuelven Unit simplemente ejecutan código sin retornar un resultado. Un caso muy común donde utilizamos este tipo es en la definición de la función main, que es el punto de entrada de cualquier programa en Scala. Esta función recibe un parámetro llamado args, que es un arreglo de cadenas (Array[String]), y su propósito es iniciar la ejecución del programa. Al igual que en Java, la función main en Scala no devuelve nada, por lo que su tipo de retorno es Unit.

Históricamente, en Scala existía una forma de definir funciones que devuelven Unit sin necesidad de poner un signo igual (=) después de los paréntesis de la definición. Por ejemplo, podríamos escribir una función main así:

def main(args: Array[String]) {
  println("Hola mundo")
}

En este caso, al no poner el igual, Scala asume que la función devuelve Unit. Sin embargo, esta práctica ya no está recomendada. El motivo principal es que omitir el igual puede llevar a errores sutiles y difíciles de detectar, especialmente cuando queremos que una función devuelva un valor distinto de Unit.

Por ejemplo, imaginemos que definimos una función para sumar dos números enteros, pero olvidamos poner el igual:

def suma(a: Int, b: Int): Int {
  a + b
}

Aunque la última línea es una expresión que devuelve la suma de a y b, al no poner el igual, Scala interpreta que la función devuelve Unit. Esto significa que, al llamar a suma(2, 3), no obtendremos el resultado esperado, sino que la función no devolverá nada útil. Este tipo de error puede pasar desapercibido si no prestamos atención, y es precisamente por eso que se recomienda siempre incluir el igual en la definición de funciones.

Si en cambio definimos correctamente la función con el igual, el compilador nos avisará si cometemos algún error:

def resta(a: Int, b: Int): Int = {
  a - b
}

Si olvidamos el igual aquí, el IDE o el compilador nos marcarán un error, lo que facilita detectar y corregir el problema.

Por lo tanto, la forma recomendada de definir funciones que devuelven Unit, como la función main, es siempre incluir el igual explícitamente:

def main(args: Array[String]): Unit = {
  println("Hola mundo")
}

De esta manera, evitamos confusiones y errores relacionados con el tipo de retorno de nuestras funciones.

En resumen, aunque en documentación antigua de Scala podamos encontrar funciones Unit definidas sin el igual, es mejor adoptar la práctica actual de incluirlo siempre. Esto nos ayuda a escribir código más claro y menos propenso a errores, especialmente cuando trabajamos con la inferencia de tipos que Scala ofrece. Así, garantizamos que nuestras funciones se comporten tal y como esperamos y mantenemos la calidad y legibilidad de nuestro código.

Lista de reproducción
  1. 1
    Introducción a Scala
    6 minutos
  2. 2
    Instalar Scala
    6 minutos
  3. 3
    Primeros pasos con el intérprete
    5 minutos
  4. 4
    Variables con val y var
    7 minutos
  5. 5
    Declarando funciones
    7 minutos
  6. 6
    Inciso sobre Units e iguales
    5 minutos
  7. 7
    Presentación de los objetos singleton
    6 minutos
  8. 8
    Editando y compilando archivos
    8 minutos
  9. 9
    Descargar e instalar Scala IDE
    6 minutos
  10. 10
    Proyectos y worksheets en Scala IDE
    7 minutos
  11. 11
    El condicional IF en Scala
    8 minutos
  12. 12
    Un caso sencillo de MATCH
    6 minutos
  13. 13
    Bucles WHILE y DO-WHILE (y String Interpolation)
    7 minutos
  14. 14
    El sistema de tipos
    7 minutos
  15. 15
    Colecciones
    9 minutos
  16. 16
    Funciones básicas de una colección
    8 minutos
  17. 17
    El map (es sensacional)
    8 minutos
  18. 18
    Flatten y flatMap
    9 minutos
  19. 19
    Sets, parte 1 de 3: Set
    8 minutos
  20. 20
    Sets, parte 2 de 3: Sets mutables
    4 minutos
  21. 21
    Sets, parte 3 de 3: SortedSet
    6 minutos
  22. 22
    Mapas (parte 1 de 2): Creando mapas
    9 minutos
  23. 23
    Mapas (parte 2 de 2): Operaciones
    8 minutos
  24. 24
    foreach y for
    8 minutos