Expresiones en Scala: Conceptos y Ejemplos Prácticos
Resumen
¿Qué es una expresión en Scala?
Las expresiones conforman el bloque básico de la programación en Scala. Este lenguaje es intrínsecamente orientado a expresiones, lo que significa que casi todo lo que se escribe, se ejecuta como una expresión. Una característica especial en Scala es que no necesitas utilizar la palabra clave return para devolver un valor. En cambio, el último valor dentro de un bloque de código es el que se devuelve automáticamente.
¿Qué sucede cuando una expresión no devuelve ningún valor?
En otros lenguajes, devolver "nada" se conoce como void. En Scala, se utiliza un tipo de dato especial llamado Unit. Esto indica que, aunque parezca que una expresión no devuelve nada, realmente está devolviendo Unit.
Ejemplo de expresiones con diferentes tipos de escritura
En Scala, las expresiones pueden definirse de varias maneras, como utilizando paréntesis o llaves. Ambas formas pueden parecer iguales, pero tienen diferencias importantes:
Paréntesis: Solo permiten una expresión única dentro de ellos.
Llaves: Permiten múltiples expresiones, separadas por punto y coma.
def ejemploLlaves ={1;1+2}// Retorna 3
def ejemploParentesis =(1+2)// Retorna 3
Las comas entre expresiones dentro de las llaves son opcionales, pero ayudan a separar diferentes operaciones.
¿Cómo funcionan las expresiones if en Scala?
En Scala, a diferencia de otros lenguajes imperativos, un if siempre deberá retornar un valor. Esto es un ejemplo de cómo el lenguaje potencia la expresión de condiciones y resultados.
Ejemplo de uso del if:
val x =3val resultado =if(x !=3)"No es tres"else"Es tres"
En este caso, como x es igual a 3, resultado será "Es tres". Aquí vemos cómo el uso de if se alinea con el enfoque de expresiones de Scala.
¿Qué sucede si no se define el else?
Si un bloque if es ejecutado sin un else, Scala intenta retornar un valor. Este valor será Unit si no hay ninguna otra expresión coincidente.
val resultadoSinElse =if(x !=3)"No es tres"// resultadoSinElse será de tipo `Any`, donde `Unit` es uno de los posibles tipos devueltos.
Este comportamiento subraya cómo en Scala cada parte del código pretende calcular y devolver un valor, incluso en estructuras de control.
Algunas recomendaciones para trabajar con expresiones en Scala
Al trabajar con Scala, ten en cuenta las siguientes recomendaciones:
Familiarízate con el concepto de Unit y cómo este se utiliza para indicar que nada relevante se está devolviendo.
Usa llaves para definir bloques complejos con múltiples expresiones.
Asegúrate de que tus bloques if incluyan ambas partes (then y else) para explícitamente manejar todos los casos posibles y tipos de retorno.
Scala es un lenguaje poderoso que puede parecer intimidante al principio, pero su enfoque basado en expresiones abre un amplio rango de posibilidades en la programación. ¡Sigue explorando y te sorprenderás por su potencial!
Básicamente def son funciones x) es implicito pero siempre retornan algo:
def hello(name:String)="Hello : "+ name
hello("FP")// "Hello : FP"
Fuente
y las funciones son expresiones
Cuando una expresión no devuelve nada, devuelve un tipo de expresión llamada Unit
es el void de java
Hay que recordar que Any es el tipo de dato que aglomera a todos los tipos de dato.
pero normalmente no vas a interactuar con el, o no deberías
En PowerShell no muestra los mismos dialogos. Por cualquier cosa, puede que buscar una terminal alternativa sea buena idea :).
bash!!!
yo instale el wsl y me funciono con ubuntu en el windows para no tener que montar VM o bash que limita en algunas cosas
Expresiones
El bloque básico de construcción
Todo lo que definamos en nuestro código es una expresión. Nada está fuera de una expresión
Valor de retorno
El dato al final de una expresión siempre es su valor de retorno
Por esta razón, no es necesario colocar nunca un return al final de una expresión
¿Cómo devolver nada?
Una expresión que no devuelve “nada”, en realidad devuelve un tipo llamado Unit
// Significan lo mismodef x =(3)def x =3def x ={3}// El paréntesis indica una sola expresión, dentro de las llaves puede colocarse más de unadef z ={1;1+2}// warningdef z =(1;1+2)// errorif(x !=3)"no es tres"else"es tres"// res1: String = es tresif(x !=3)"no es tres"// res2: Any = ()val u =()u:Unit=()
//todo esto lo trabaje en la consola de scala
scala> def b(x:Int, y: Int) = x>y //defino la funcion principal
scala> def c(b: (Int,Int) => Boolean)(x:Int) = b(4,x) //defino la funcion contenedora y asignándole un numero a comparar
scala> c(b)(5) //aqui se le pasa un numero para comparar
val res17: Boolean = false // este es el resultado
Gracias.