F# para desarrolladores C#/Java — Misión
Secciones
Ajustes de lectura
Ninguna voz para este idioma en este navegador.
Más voces
Código y términos técnicos en inglés
Desactivado: la voz de la página lo lee todo, sin pausa entre dos voces.
Ninguna voz para este idioma en este navegador.
Más voces
Más voces: Microsoft Edge ofrece voces naturales en línea, y Windows (Configuración › Hora e idioma › Voz), macOS y Android instalan otras.
Por qué este curso
Sección titulada «Por qué este curso»Escribes C# o Java. Has usado lambdas, LINQ o streams, records, quizá expresiones switch con patrones. F# toma esas ideas, que C# y Java tomaron prestadas de los lenguajes funcionales en los últimos quince años, y las convierte en lo normal: valores que no cambian, funciones que devuelven valores en lugar de modificar estado, tipos que describen cada caso de tus datos y un compilador que comprueba que los has tratado todos.
F# se ejecuta sobre .NET, llama a cualquier biblioteca .NET y compila al mismo lenguaje intermedio que C#. No tienes que salir de tu ecosistema para aprenderlo, y lo que aprendes cambia tu forma de escribir C#.
Este curso usa las versiones actuales: F# 10, que se distribuye con .NET 10, publicado en noviembre de 2025.
Código real: TARS y Guitar Alchemist
Sección titulada «Código real: TARS y Guitar Alchemist»Los ejemplos vienen de dos bases de código F# públicas, fijadas en un commit para que los enlaces sigan apuntando al código que describen las lecciones:
- TARS, un framework de agentes en F# (razonamiento, workflows multiagente, gramáticas probabilísticas), en el commit
87464ce. Su código activo está env2/: las lecciones solo citan proyectos que su soluciónv2/Tars.slncompila y que su CI prueba. - Guitar Alchemist (GA), una aplicación de teoría musical escrita sobre todo en C#, cuyo DSL musical, parsers, configuración y servidor de lenguaje están en F#, en el commit
32f143c.
Cuando un extracto de GA compila por sí solo, el curso guarda una copia del archivo en code/fsharp/external/ga (GA tiene licencia MIT) y lo ejecuta. TARS no tiene archivo de licencia, así que su código se enlaza y se cita, y solo se reproduce en unas pocas líneas cuando hay que mostrar un comportamiento. Lo que las lecciones encuentran en estos repositorios (un bug, código muerto, un script que no se ejecuta) va al diario.
Cómo funcionan las lecciones
Sección titulada «Cómo funcionan las lecciones»Cada lección parte de lo que escribirías en C# (y en Java cuando es distinto) y luego muestra:
- la forma F#, con un script corto y la salida que realmente imprimió;
- el punto de vista del compilador: los errores y advertencias que encontrarás, con su mensaje exacto;
- código real de TARS o GA que usa la noción;
- ejercicios, con una solución en Solución: inténtalo primero y luego ábrela.
Al final de este curso, sabré
Sección titulada «Al final de este curso, sabré»- ejecutar scripts F# y F# Interactive, y organizar un proyecto F# cuyos archivos compilan en orden;
- modelar un dominio con records, uniones discriminadas y opciones, para que los estados inválidos no compilen;
- escribir funciones que se componen, con pipelines, aplicación parcial y coincidencia de patrones exhaustiva;
- manejar errores con
Result, y escribir y leer expresiones de cómputo, incluidas las mías; - probar código F# con xUnit, FsCheck y Expecto, y analizar texto con FParsec;
- medir y reducir asignaciones de memoria, y elegir entre
Async,TaskyMailboxProcessor; - leer y ampliar una base de código F# real, y publicar una biblioteca F# que el código C# consuma cómodamente.
| # | Lección | Nociones | Código real |
|---|---|---|---|
| Principiante | |||
| 1 | Scripts, F# Interactive y proyectos | dotnet fsi, scripts .fsx, printfn, #r "nuget:", indentación, el orden de los archivos de un .fsproj |
GA.Business.DSL.fsproj y Scripts/ModesConfig.fsx de GA, Tars.Core.fsproj de TARS |
| 2 | Valores, funciones e inferencia de tipos | let, inmutabilidad, mutable, inferencia, currificación, aplicación parcial, |> y >>, expresiones en todas partes |
HarmonicTransformationService de GA, TextNormalizer de TARS |
| 3 | Tuplas, records, uniones y opciones | tuplas, records y with, uniones discriminadas, Option, uniones de un solo caso, RequireQualifiedAccess |
ChordAst de GA, Domain.fs y Primitives.fs de TARS |
| 4 | Coincidencia de patrones | match, guardas, patrones «o», patrones de listas y de records, advertencias de exhaustividad |
ChordRenderer, ChordParser y BinObj.fsx de GA, AgentWorkflow.fs de TARS |
| 5 | Listas, arrays y secuencias | módulos List, Array y Seq, pipelines junto a LINQ y streams, evaluación perezosa |
|
| 6 | Módulos, espacios de nombres y organización del proyecto | módulos, espacios de nombres, private e internal, archivos de firma |
|
| Intermedio | |||
| 7 | Errores con Result |
programación orientada a raíles, Result junto a las excepciones |
|
| 8 | Expresiones de cómputo — un parser para un DSL | seq, async, task, builders, Bind, Return, un parser CE y final explícito |
el DSL musical de GA |
| 9 | Objetos en F# | clases, interfaces, expresiones de objeto, llamadas a bibliotecas C# | |
| 10 | Pruebas | xUnit, pruebas basadas en propiedades con FsCheck, Expecto | |
| 11 | Parsers | FParsec y combinadores escritos a mano | el DSL musical de GA |
| 12 | Modelar un dominio | unidades de medida, tipos fantasma, hacer que los estados ilegales no sean representables | Budget de TARS |
| Avanzado y experto | |||
| 13 | Expresiones de cómputo personalizadas | builders, let! y and!, lo que genera el compilador |
AgentWorkflow de TARS |
| 14 | Proveedores de tipos — datos tipados desde una muestra | proveedores borrados y generativos, inferencia CSV y JSON, estabilidad del esquema | FSharp.Data |
| 15 | Rendimiento | structs, inline, Span, voption, asignaciones medidas con BenchmarkDotNet |
|
| 16 | Concurrencia | MailboxProcessor, Async junto a Task, canales |
|
| 17 | Metaprogramación | Myriad, FSharp.Compiler.Service | el pool de sesiones de F# Interactive de GA |
| 18 | Herramientas | un servidor de lenguaje en F#, Fantomas, analizadores | GaMusicTheoryLsp de GA |
| 19 | Arquitectura de una aplicación F# real | una lectura guiada de TARS | TARS |
| 20 | Publicar una biblioteca F# para C# | diseño de API, [<CompiledName>], opciones y uniones vistas desde C# |
|
| — | Diario |
Las lecciones 9–13 y 15–20 están planificadas y aún no están escritas.
Requisitos previos
Sección titulada «Requisitos previos»- Programas en C# o Java. No hace falta experiencia en programación funcional.
- El SDK de .NET 10, en Windows, Linux (o WSL) o macOS. La lección 1 comprueba la instalación; el curso C# para principiantes la detalla para cada sistema.
- Un editor compatible con F#: Visual Studio Code con la extensión Ionide, JetBrains Rider, o Visual Studio en Windows.
Cursos relacionados
Sección titulada «Cursos relacionados»- C# avanzado cubre lo que ocurre bajo .NET: la memoria, el recolector de basura,
asyncy el rendimiento medido. Este curso enlaza con él en lugar de repetirlo; las lecciones 15 y 16 se apoyan en él. - Rust para desarrolladores C#/Java aborda las mismas ideas desde otro ángulo: los enums y
match,OptionyResult.
Recursos
Sección titulada «Recursos»- La documentación de F#, con su recorrido por F# y su referencia del lenguaje.
- Novedades de F# 10.
- La referencia de la API de FSharp.Core: los módulos
List,Option,Resulty el resto de la biblioteca básica. - La especificación del lenguaje F# y las RFC de diseño en fsharp/fslang-design.
- dotnet/fsharp: el compilador, FSharp.Core y F# Interactive.
- La guía de estilo de F# y las convenciones de código de F#.