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
