Introducció
F# és un llenguatge de programació funcional que s'executa en la plataforma .NET, la qual cosa permet una interoperabilitat fluida amb altres llenguatges .NET, com C#. Aquesta capacitat és crucial per aprofitar les biblioteques existents i integrar-se amb aplicacions escrites en C#. En aquest tema, explorarem com F# i C# poden treballar junts, incloent la crida a codi C# des de F# i viceversa.
Objectius
- Entendre com referenciar i utilitzar biblioteques C# en projectes F#.
- Aprendre a cridar funcions i mètodes C# des de F#.
- Veure com exposar codi F# perquè pugui ser utilitzat des de C#.
- Examinar exemples pràctics d'interoperabilitat.
Referenciar Biblioteques C#
Passos per referenciar una biblioteca C#
- Crear o obtenir la biblioteca C#: Si no tens una biblioteca C# existent, pots crear-ne una nova en Visual Studio o qualsevol altre IDE compatible amb .NET.
- Afegir la referència a la biblioteca en el projecte F#:
- A Visual Studio, fes clic dret sobre el projecte F# i selecciona "Add Reference".
- Navega fins a la biblioteca C# que vols referenciar i afegeix-la.
Exemple de codi C#
// C# Library: MyLibrary.cs namespace MyLibrary { public class Calculator { public int Add(int a, int b) { return a + b; } } }
Utilitzar la biblioteca C# en F#
// F# Project: Program.fs open MyLibrary [<EntryPoint>] let main argv = let calculator = Calculator() let result = calculator.Add(3, 4) printfn "Result of addition: %d" result 0
Cridar Funcions i Mètodes C# des de F#
Exemple Pràctic
Suposem que tenim una classe C# amb diversos mètodes que volem utilitzar en el nostre projecte F#.
// C# Library: Utilities.cs namespace Utilities { public class StringUtils { public string ToUpperCase(string input) { return input.ToUpper(); } public bool IsNullOrEmpty(string input) { return string.IsNullOrEmpty(input); } } }
Utilitzar els mètodes en F#
// F# Project: Program.fs open Utilities [<EntryPoint>] let main argv = let stringUtils = StringUtils() let upper = stringUtils.ToUpperCase("hello") let isEmpty = stringUtils.IsNullOrEmpty("") printfn "Uppercase: %s" upper printfn "Is empty: %b" isEmpty 0
Exposar Codi F# a C#
Crear una Biblioteca F#
// F# Library: MyFSharpLibrary.fs namespace MyFSharpLibrary type MathOperations() = member this.Multiply(a: int, b: int) : int = a * b
Utilitzar la Biblioteca F# en C#
-
Afegir la referència a la biblioteca F# en el projecte C#:
- A Visual Studio, fes clic dret sobre el projecte C# i selecciona "Add Reference".
- Navega fins a la biblioteca F# que vols referenciar i afegeix-la.
-
Cridar el codi F# des de C#:
// C# Project: Program.cs using System; using MyFSharpLibrary; class Program { static void Main() { var mathOps = new MathOperations(); int result = mathOps.Multiply(3, 4); Console.WriteLine($"Result of multiplication: {result}"); } }
Exercicis Pràctics
Exercici 1: Cridar una Biblioteca C# des de F#
- Crea una biblioteca C# amb una classe
Person
que tingui propietatsName
iAge
, i un mètodeGreet
que retorni una salutació. - Referencia aquesta biblioteca en un projecte F#.
- Crea una instància de
Person
en F# i crida el mètodeGreet
.
Solució
// C# Library: PersonLibrary.cs namespace PersonLibrary { public class Person { public string Name { get; set; } public int Age { get; set; } public string Greet() { return $"Hello, my name is {Name} and I am {Age} years old."; } } }
// F# Project: Program.fs open PersonLibrary [<EntryPoint>] let main argv = let person = Person(Name = "Alice", Age = 30) let greeting = person.Greet() printfn "%s" greeting 0
Exercici 2: Exposar una Biblioteca F# a C#
- Crea una biblioteca F# amb una classe
Converter
que tingui un mètodeToFahrenheit
que converteixi graus Celsius a Fahrenheit. - Referencia aquesta biblioteca en un projecte C#.
- Crea una instància de
Converter
en C# i crida el mètodeToFahrenheit
.
Solució
// F# Library: ConverterLibrary.fs namespace ConverterLibrary type Converter() = member this.ToFahrenheit(celsius: float) : float = celsius * 9.0 / 5.0 + 32.0
// C# Project: Program.cs using System; using ConverterLibrary; class Program { static void Main() { var converter = new Converter(); double fahrenheit = converter.ToFahrenheit(25.0); Console.WriteLine($"25 degrees Celsius is {fahrenheit} degrees Fahrenheit."); } }
Conclusió
La interoperabilitat entre F# i C# permet aprofitar el millor de tots dos llenguatges i integrar-se fàcilment amb l'ecosistema .NET. Hem vist com referenciar biblioteques, cridar mètodes i exposar codi entre F# i C#. Amb aquests coneixements, pots començar a combinar F# i C# en els teus projectes per obtenir solucions més robustes i flexibles.
Curs de Programació en F#
Mòdul 1: Introducció a F#
Mòdul 2: Conceptes Bàsics
- Tipus de Dades i Variables
- Funcions i Immutabilitat
- Coincidència de Patrons
- Col·leccions: Llistes, Matrius i Seqüències
Mòdul 3: Programació Funcional
Mòdul 4: Estructures de Dades Avançades
Mòdul 5: Programació Orientada a Objectes en F#
- Classes i Objectes
- Herència i Interfícies
- Barreja de Programació Funcional i Orientada a Objectes
- Mòduls i Espais de Noms
Mòdul 6: Programació Asíncrona i Paral·lela
- Fluxos de Treball Asíncrons
- Biblioteca de Tasques Paral·leles
- MailboxProcessor i Agents
- Patrons de Concurrència
Mòdul 7: Accés i Manipulació de Dades
Mòdul 8: Proves i Depuració
- Proves Unitàries amb NUnit
- Proves Basades en Propietats amb FsCheck
- Tècniques de Depuració
- Perfilat de Rendiment