En aquest tema, explorarem com utilitzar LINQ (Language Integrated Query) en F#. LINQ és una poderosa característica de .NET que permet realitzar consultes sobre col·leccions de dades de manera declarativa. Tot i que LINQ és més conegut en el context de C#, també es pot utilitzar en F# amb algunes diferències sintàctiques.
Objectius d'Aprenentatge
- Comprendre què és LINQ i com s'utilitza en F#.
- Aprendre a realitzar operacions bàsiques de consulta amb LINQ.
- Veure exemples pràctics d'ús de LINQ en F#.
- Realitzar exercicis pràctics per reforçar els conceptes apresos.
Introducció a LINQ
LINQ permet realitzar operacions de consulta sobre col·leccions de dades com si estiguéssim utilitzant SQL. Les operacions de LINQ es poden aplicar a arrays, llistes, seqüències i altres col·leccions.
Exemple Bàsic de LINQ en F#
open System.Linq
let numbers = [| 1; 2; 3; 4; 5; 6; 7; 8; 9; 10 |]
let evenNumbers = 
    numbers
    |> Seq.filter (fun n -> n % 2 = 0)
    |> Seq.toArray
printfn "Even numbers: %A" evenNumbersExplicació del Codi
- Importació del Mòdul LINQ: open System.Linqimporta les funcions de LINQ.
- Definició de la Col·lecció: numbersés un array d'enters.
- Filtratge amb LINQ: Seq.filters'utilitza per seleccionar només els números parells.
- Conversió a Array: Seq.toArrayconverteix la seqüència resultant en un array.
- Impressió del Resultat: printfns'utilitza per imprimir els números parells.
Operacions Bàsiques amb LINQ
Selecció (Select)
Filtratge (Where)
let greaterThanFive = 
    numbers
    |> Seq.filter (fun n -> n > 5)
    |> Seq.toArray
printfn "Numbers greater than five: %A" greaterThanFiveOrdenació (OrderBy)
Agrupació (GroupBy)
let groupedByEvenOdd = 
    numbers
    |> Seq.groupBy (fun n -> n % 2 = 0)
    |> Seq.map (fun (key, group) -> (key, Seq.toArray group))
    |> Seq.toArray
printfn "Grouped by even/odd: %A" groupedByEvenOddExercicis Pràctics
Exercici 1: Filtrar i Ordenar
Descripció: Escriu una funció que filtri els números imparells d'una llista i els ordeni en ordre descendent.
Codi Inicial:
let filterAndSortDescending numbers =
    // Implementa la funció aquí
    []
let result = filterAndSortDescending [1; 3; 5; 2; 4; 6; 7; 8; 9; 10]
printfn "Result: %A" resultSolució:
let filterAndSortDescending numbers =
    numbers
    |> Seq.filter (fun n -> n % 2 <> 0)
    |> Seq.sortDescending
    |> Seq.toList
let result = filterAndSortDescending [1; 3; 5; 2; 4; 6; 7; 8; 9; 10]
printfn "Result: %A" resultExercici 2: Agrupar per Longitud de Paraula
Descripció: Escriu una funció que agrupi una llista de paraules per la seva longitud.
Codi Inicial:
let groupByLength words =
    // Implementa la funció aquí
    []
let result = groupByLength ["apple"; "banana"; "cherry"; "date"; "fig"; "grape"]
printfn "Result: %A" resultSolució:
let groupByLength words =
    words
    |> Seq.groupBy (fun word -> word.Length)
    |> Seq.map (fun (key, group) -> (key, Seq.toList group))
    |> Seq.toList
let result = groupByLength ["apple"; "banana"; "cherry"; "date"; "fig"; "grape"]
printfn "Result: %A" resultResum
En aquest tema, hem après com utilitzar LINQ en F# per realitzar operacions de consulta sobre col·leccions de dades. Hem vist exemples pràctics de selecció, filtratge, ordenació i agrupació. També hem realitzat exercicis pràctics per reforçar els conceptes apresos. LINQ és una eina poderosa que pot simplificar molt el treball amb col·leccions de dades en F#.
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
