Fundamentos del lenguaje
27 pasos en 9 series de F#.
F# es el lenguaje funcional-primero de la familia .NET: el linaje de OCaml corriendo sobre el CLR, con el ecosistema entero de NuGet a un open de distancia. La inmutabilidad es el defecto, el compilador infiere casi cada tipo, y el operador pipeline vuelve las transformaciones de datos oraciones que se leen hacia adelante. Casas de finanzas, equipos de datos y backends web (Giraffe, el stack SAFE) lo corren en producción, y su forma de scripting — archivos .fsx bajo dotnet fsi — lo hace uno de los lenguajes de REPL más gratos en cualquier runtime.
Este tour teclea el núcleo funcional: ataduras let con mutabilidad deliberada, los tres idiomas de armar strings, currificación y aplicación parcial, pipelines y composición, match con guardas, Option y Result con sus pipelines de módulo, patrones activos, listas armadas con cons y el módulo List, pliegues, records con copia-y-actualización, uniones discriminadas, Map y Set, groupBy, arreglos contra secuencias perezosas, recursión de cola, excepciones, y el truco insignia — unidades de medida que el compilador hace cumplir. El Bis es el trío de scripts de siempre en F# idiomático: countBy, matches con guardas y pairwise.
Valores
- La forma del scriptEl F# más pequeño: ataduras let y printfn, de arriba abajo.
- Ataduras letInmutable por defecto; mutable es una elección aparte y deletreada.
- Strings de tres manerasprintfn formatea, sprintf devuelve, la interpolación con $ empalma.
Funciones
- CurrificaciónCada función toma un argumento; la aplicación parcial es gratis.
- El pipeline|> alimenta el valor izquierdo hacia adelante; los datos se leen en orden de flujo.
- Composición>> pega funciones en funciones nuevas, sin nombrar argumento.
Coincidencia de patrones
- matchUna expresión que debe cubrir cada caso; el compilador audita.
- OptionLa ausencia deletreada Some o None — no hay null que olvidar.
- Patrones activosNombra una clasificación una vez; matchea como si fuera nativa.
Listas
- Listas y consInmutables, enlazadas: :: construye, @ concatena, los patrones parten.
- El módulo Listmap, filter, sortBy, sumBy: el kit de todos los días.
- fold y reduceEnhebra estado por una lista; el acumulador puede ser lo que sea.
Tipos
- RecordsPaquetes con nombre inmutables, con igualdad estructural incluida.
- Uniones discriminadasUn conjunto cerrado de formas; el match debe cubrirlas todas.
- TuplasEmpareja valores sin ceremonia; los patrones las desarman.
Colecciones
- Map y SetColecciones inmutables con clave y de únicos; cada add devuelve otra.
- groupBy y countByCubetea una lista por clave calculada y pliega cada cubeta.
- Arreglos y seqsLos arreglos indexan y mutan; las seqs son vistas perezosas.
Idiomas del lenguaje
- ResultOk o Error, y bind para mantener el pipeline en la vía feliz.
- Recursiónrec permite la autorreferencia; el acumulador deja la llamada en cola.
- Pipelines de Optionmap, filter y defaultValue encadenan maybes sin un solo chequeo de null.
Firmas y pereza
- Excepcionestry/with atrapa por patrón; failwith lanza con mensaje.
- Unidades de medidakg y jar viajan en el sistema de tipos; la unidad mala no compila.
- Secuencias perezosasLo infinito está bien hasta que algo tira.
Bis
- word_freq.fsxUna tabla de frecuencias con Split, countBy y un orden de dos claves.
- grade_report.fsxBoletines desde un roster de records, un match con guardas y columnas.
- temp_stats.fsxUna semana de temperaturas: minBy/maxBy, barras y saltos con pairwise.