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
0Cridar 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
0Exposar 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 * bUtilitzar 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
Personque tingui propietatsNameiAge, i un mètodeGreetque retorni una salutació. - Referencia aquesta biblioteca en un projecte F#.
- Crea una instància de
Personen 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
0Exercici 2: Exposar una Biblioteca F# a C#
- Crea una biblioteca F# amb una classe
Converterque tingui un mètodeToFahrenheitque converteixi graus Celsius a Fahrenheit. - Referencia aquesta biblioteca en un projecte C#.
- Crea una instància de
Converteren 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
