Tutorial de Scala
Scala combina programación orientada a objetos y programación funcional. Su diseño permite trabajar con funciones como valores, colecciones expresivas, inferencia de tipos y ejecución sobre la máquina virtual de Java.
Presentaciones
Diapositivas históricas del tutorial.
TTalleres
Actividades para repasar los conceptos principales de Scala.
EEjemplos
Acceso a ejemplos de código y comparación práctica con Java.
NNotebooks
Material interactivo para revisar y ejecutar ejemplos guiados.
Presentaciones
Material de exposición asociado al tutorial de Scala en distintos periodos académicos.
Presentación Scala
Material histórico del tutorial de Scala.
2020-2Presentación Scala
Presentación alojada en Google Slides.
2022-1Tutorial Scala
Material de apoyo para el tutorial de Scala.
2024-1Parte práctica
Presentación práctica del tutorial.
2026-IProgramación funcional con Scala
Presentación nueva con conceptos, ejemplos y enfoque funcional.
Talleres
Actividades para practicar lo visto en el tutorial con preguntas de repaso sobre Scala, funciones, colecciones, comparación con Java y ejemplo práctico.
Ejemplos
Recursos para revisar código y comparar el estilo de Scala con otros lenguajes de la JVM.
Notebooks
Esta sección reúne los notebooks interactivos del tutorial. Estos recursos permiten revisar explicaciones, ejecutar ejemplos y seguir ejercicios guiados.
Teoría: ¿por qué Scala para programación funcional?
Scala permite escribir programas expresivos combinando objetos, funciones e inmutabilidad. Su valor principal en este tutorial es mostrar cómo pasar de instrucciones que modifican estado a transformaciones de datos más claras y composables.
Todo puede ser una expresión
En Scala, bloques, condicionales y coincidencias de patrones pueden producir valores. Esto favorece código más compacto y fácil de encadenar.
Inmutabilidad por defecto
El uso de val y colecciones inmutables ayuda a evitar cambios
inesperados de estado, lo que facilita pruebas, mantenimiento y concurrencia.
Funciones como valores
Las funciones pueden guardarse en variables, pasarse como argumentos y devolverse
como resultado. Esta idea permite usar operaciones como map,
filter y reduce.
Funciones puras
Una función pura produce siempre el mismo resultado para la misma entrada y no modifica variables externas. Esto hace que el código sea más predecible y fácil de probar.
Transformación de colecciones
Operaciones como map, filter y reduce
permiten procesar listas sin alterar la colección original, favoreciendo un
estilo declarativo.
Pattern matching
match permite clasificar datos de forma clara. Es útil para reemplazar
cadenas largas de condicionales y expresar casos de manera legible.
Ejemplo visual: del estilo imperativo al funcional
Una de las ideas centrales del tutorial es dejar de modificar variables paso a paso y empezar a describir transformaciones sobre datos.
Enfoque imperativo
var aprobados = List[String]()
for (estudiante <- estudiantes) {
if (estudiante.nota >= 3.0) {
aprobados = aprobados :+ estudiante.nombre
}
}
Enfoque funcional
val aprobados = estudiantes
.filter(_.nota >= 3.0)
.map(_.nombre)
Ejemplo corto con map, filter y reduce
Este ejemplo muestra cómo Scala permite transformar, filtrar y resumir datos sin modificar directamente la lista original.
val notas = List(3.2, 4.5, 2.8, 5.0)
val aprobadas = notas.filter(_ >= 3.0)
val notasEscaladas = notas.map(_ + 0.2)
val promedio = notas.reduce(_ + _) / notas.length
filter selecciona los datos que cumplen una condición,
map transforma cada elemento y reduce combina los
valores de la colección para obtener un único resultado.
Introducción
- Scala es un lenguaje multiparadigma: orientado a objetos y funcional.
- Fue diseñado por Martin Odersky en el año 2003.
- El nombre de Scala surge de la unión de dos palabras: scalable y language.
- Su implementación actual corre en la máquina virtual de Java y es compatible con aplicaciones Java existentes.
Instalación
Scala puede trabajarse desde consola, desde un IDE o desde notebooks interactivos. Para este tutorial se recomienda revisar primero los notebooks, porque permiten estudiar ejemplos ejecutables y comparar resultados paso a paso.
Características
- Scala es orientado a objetos:
- Los tipos y comportamientos de objetos son descritos por clases y traits.
- Las clases pueden ser extendidas a través de subclases.
- Posee composición mezclada como alternativa a la herencia múltiple.
- Scala es funcional:
- Toda función es un valor.
- Permite definir funciones anónimas.
- Soporta funciones de orden superior.
- Permite funciones anidadas y currying.
- Scala es estáticamente tipado:
- Soporta clases genéricas.
- Permite métodos polimórficos.
- Ofrece inferencia de tipos sin perder verificación en tiempo de compilación.
- Scala es extensible e interoperable:
- Cualquier método puede usarse como operador infijo o postfijo.
- Interopera con el entorno de ejecución de Java.
Tipos de datos
Los tipos de datos de Scala se corresponden con los tipos de datos de Java.
Unit equivale a void; Nothing es subtipo
de cualquier otro tipo; y Any es el supertipo de todos los tipos.
Operadores
Colecciones
Scala y Java
Scala se ejecuta sobre la JVM y puede interoperar con bibliotecas Java. Sin embargo, suele ofrecer una sintaxis más compacta para transformar colecciones y trabajar con funciones de alto nivel.