Introducció a les Closures

Les closures són una característica poderosa i flexible de Groovy que permeten definir blocs de codi que poden ser passats com a arguments, retornats des de funcions o assignats a variables. Les closures són similars a les funcions anònimes o lambdas en altres llenguatges de programació.

Conceptes Clau

  • Definició de Closure: Una closure és un bloc de codi que pot ser executat més tard.
  • Sintaxi: Les closures es defineixen utilitzant les claus {}.
  • Paràmetres: Les closures poden acceptar paràmetres, que es defineixen abans de l'operador ->.
  • Context: Les closures poden accedir a variables del seu context envoltant.

Sintaxi Bàsica

def closure = { println "Hola, món!" }
closure() // Executa la closure

Closures amb Paràmetres

def greet = { nom -> println "Hola, $nom!" }
greet("Anna") // Sortida: Hola, Anna!

Closures amb Múltiples Paràmetres

def sum = { a, b -> a + b }
println sum(5, 3) // Sortida: 8

Accés al Context Envoltant

def factor = 2
def multiply = { num -> num * factor }
println multiply(5) // Sortida: 10

Exemples Pràctics

Iteració amb Closures

Les closures són especialment útils per a iterar sobre col·leccions.

def llista = [1, 2, 3, 4, 5]
llista.each { element -> println element }

Filtratge amb Closures

def llista = [1, 2, 3, 4, 5]
def parells = llista.findAll { it % 2 == 0 }
println parells // Sortida: [2, 4]

Transformació amb Closures

def llista = [1, 2, 3, 4, 5]
def quadrats = llista.collect { it * it }
println quadrats // Sortida: [1, 4, 9, 16, 25]

Exercicis Pràctics

Exercici 1: Crear una Closure Simple

Descripció: Defineix una closure que imprimeixi "Benvingut a Groovy!".

def benvinguda = { println "Benvingut a Groovy!" }
benvinguda()

Exercici 2: Closure amb Paràmetres

Descripció: Defineix una closure que accepti un nom com a paràmetre i imprimeixi "Hola, [nom]!".

def saluda = { nom -> println "Hola, $nom!" }
saluda("Joan")

Exercici 3: Filtrar una Llista

Descripció: Utilitza una closure per filtrar una llista de nombres i obtenir només els nombres imparells.

def nombres = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
def imparells = nombres.findAll { it % 2 != 0 }
println imparells // Sortida: [1, 3, 5, 7, 9]

Exercici 4: Transformar una Llista

Descripció: Utilitza una closure per transformar una llista de nombres multiplicant cada element per 10.

def nombres = [1, 2, 3, 4, 5]
def multiplicats = nombres.collect { it * 10 }
println multiplicats // Sortida: [10, 20, 30, 40, 50]

Errors Comuns i Consells

  • Oblidar Executar la Closure: Recorda que definir una closure no l'executa. Has de cridar-la explícitament amb closure().
  • Paràmetres Incorrectes: Assegura't que el nombre de paràmetres en la definició de la closure coincideixi amb el nombre de paràmetres passats en la crida.
  • Accés al Context: Les closures poden accedir a variables del seu context envoltant, però tingues en compte que modificar aquestes variables pot tenir efectes secundaris inesperats.

Resum

En aquesta secció, hem après què són les closures en Groovy, com es defineixen i utilitzen, i hem vist diversos exemples pràctics. Les closures són una eina poderosa per a la programació funcional i poden simplificar molt el codi, especialment quan es treballa amb col·leccions. Amb la pràctica, les closures es convertiran en una part natural del teu repertori de programació en Groovy.

© Copyright 2024. Tots els drets reservats