Fundamentos del lenguaje
27 pasos en 9 series de Scala.
Scala corre programación funcional sobre la JVM a escala industrial: Spark, Kafka y la mitad del ecosistema del big data están escritos en él, y compila al mismo bytecode que Java mientras dice el doble por línea. El dialecto de aquí es Scala 3 — la sintaxis sin llaves, guiada por indentación, con enums, métodos de extensión y definiciones de nivel superior que hicieron sentir al lenguaje una década más joven.
Este tour cubre el núcleo de todos los días: los val y la inferencia de tipos, expresiones en todas partes (if y match devuelven valores), métodos y lambdas, las colecciones inmutables y su kit de map/filter/fold, las case class con copy, los enums, Option y Either en lugar de null y excepciones, y los traits con métodos de extensión. El bis entrega programas completos. Cada fragmento compila bajo scalac -Werror con la verificación de código sin usar activada, y el bis corre de principio a fin.
Valores y tipos
- val y varEl conteo de asientos de un ferri en vinculaciones
val, con unvarpara el número que sí cambia. - Inferencia de tiposEl compilador deduce los tipos
Int,Double,StringyListde los valores que escribes. - Interpolación de cadenasTres interpoladores:
spara valores,fpara salida formateada,rawpara escapes intactos.
Expresiones
- if como expresiónEn Scala
if/elseevalúa a un valor, así que se puede asignar directo a unval. - Fundamentos de matchCoincidir sobre valores simples, con alternativas, guardas y un caso atrapatodo.
- Bucles forTres formas del
for: sobre una colección, sobre.indicesy con dos generadores.
Funciones
- Definir métodos
defcon parámetros tipados y tipo de retorno, primero como expresión y luego con cuerpo indentado. - Argumentos por defecto y con nombreParámetros con valores por defecto, y llamadas que nombran sus argumentos en vez de ordenarlos.
- Lambdas y valores funciónLiterales de función, la abreviatura
_y un método que recibe una función como parámetro.
Colecciones
Transformaciones
- Map y filterLos pedidos de una panadería pasados por
mapyfilter, solos y encadenados. - PlegarLos pesos de unas cajas plegados a un total, luego a una cadena y a un
Map. - El for con yieldLas hileras de un huerto convertidas en colecciones nuevas con
foryyield.
Case classes y enums
- Case classesUn registro
Lighthousecon impresión e igualdad generadas, desarmado por un match. - Copias con cambiosHorneadas revisadas con
copy, que crea un valor nuevo y deja intacto el viejo. - EnumsUn enum de señales cubierto de forma exhaustiva, y otro cuyos casos llevan datos.
Option y Either
- OptionLa respuesta de Scala a null: un valor que está o admite que no está.
- Encadenar OptionsDos búsquedas dependientes y una condición, sin un solo chequeo de null.
- Either para validarEither guarda el motivo del rechazo de un valor, donde un Option pelado no puede.
Traits y extensiones
- TraitsUn trait fija lo que toda figura debe responder y escribe la parte común una vez.
- Métodos de extensiónAgregar métodos a
IntyStringsin ser dueño de ninguno de los dos tipos. - Objetos y compañerosUn object es un espacio de nombres con una sola instancia; el compañero guarda los constructores.
Bis
- word_freq.scalaUn reporte completo: normalizar un pasaje, contar sus palabras, ordenarlas e imprimirlas.
- grade_report.scalaPromedios por estudiante, notas en letra y un resumen del curso desde una lista en el código.
- temp_stats.scalaUna semana de temperaturas máximas como tabla de estadísticas y gráfico de barras.