Programación funcional · JVM · Scala

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.

P

Presentaciones

Diapositivas históricas del tutorial.

T

Talleres

Actividades para repasar los conceptos principales de Scala.

E

Ejemplos

Acceso a ejemplos de código y comparación práctica con Java.

N

Notebooks

Material interactivo para revisar y ejecutar ejemplos guiados.

Presentaciones

Material de exposición asociado al tutorial de Scala en distintos periodos académicos.

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.

1

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.

2

Inmutabilidad por defecto

El uso de val y colecciones inmutables ayuda a evitar cambios inesperados de estado, lo que facilita pruebas, mantenimiento y concurrencia.

3

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.

4

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.

5

Transformación de colecciones

Operaciones como map, filter y reduce permiten procesar listas sin alterar la colección original, favoreciendo un estilo declarativo.

6

Pattern matching

match permite clasificar datos de forma clara. Es útil para reemplazar cadenas largas de condicionales y expresar casos de manera legible.

Mientras Java suele escribirse con un estilo más imperativo y orientado a objetos, Scala permite expresar muchas soluciones de forma más declarativa, usando funciones, colecciones inmutables y transformaciones sobre datos.

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)
En el enfoque funcional no se modifica una lista existente. Se parte de una colección, se filtran los datos que cumplen una condición y luego se transforman para obtener únicamente los nombres. El resultado es más breve, más declarativo y más cercano al objetivo del problema.

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

paradigmas de Scala

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.

imagen decorativa

Características

Tipos de datos

tipos

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

operadores

Colecciones

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.