🚀 Nuova versione beta disponibile! Feedback o problemi? Contattaci

Funzioni Lambda in Dart: Guida Completa

Codegrind TeamSep 25 2024

Le funzioni lambda in Dart, conosciute anche come funzioni anonime o funzioni inline, sono un tipo di funzione che non ha un nome e viene definita direttamente nel punto in cui viene utilizzata. Questo le rende particolarmente utili per operazioni temporanee o per semplificare il codice.

Cos’è una Funzione Lambda?

Una funzione lambda è una funzione compatta che può essere definita e utilizzata al volo. Non ha un nome e viene spesso passata come argomento a un’altra funzione. Le funzioni lambda possono avere parametri e un corpo, proprio come le funzioni normali.

Sintassi delle Funzioni Lambda

In Dart, una funzione lambda viene definita utilizzando una sintassi concisa che segue il pattern:

(tipoParametro1 parametro1, tipoParametro2 parametro2) {
  // Corpo della funzione
  // Valore di ritorno implicito o dichiarato
}

Se la funzione lambda ha un solo espressione come corpo, puoi omettere le parentesi graffe e il tipo di ritorno, rendendo il codice ancora più compatto:

(parametro1, parametro2) => espressione;

Esempi di Funzioni Lambda

1. Funzione Lambda Semplice

Ecco un esempio di una funzione lambda che stampa un messaggio:

void main() {
  var saluta = (String nome) {
    print("Ciao, $nome!");
  };

  saluta("Alice"); // Output: Ciao, Alice!
}

2. Funzione Lambda con Valore di Ritorno

Una funzione lambda può restituire un valore. Ecco un esempio che calcola la somma di due numeri:

void main() {
  var somma = (int a, int b) => a + b;

  var risultato = somma(5, 3); // Output: 8
  print("La somma è $risultato");
}

3. Funzione Lambda Senza Parametri

Le funzioni lambda possono anche essere definite senza parametri:

void main() {
  var salutoGenerale = () => print("Ciao, mondo!");

  salutoGenerale(); // Output: Ciao, mondo!
}

Utilizzo delle Funzioni Lambda con le Collezioni

Le funzioni lambda sono particolarmente utili quando si lavora con collezioni in Dart, grazie alla loro compattezza. Puoi utilizzarle con metodi come map, where e forEach.

1. Utilizzo con map

Il metodo map applica una funzione a ogni elemento di una collezione e restituisce una nuova collezione con i risultati.

void main() {
  var numeri = [1, 2, 3, 4, 5];
  var quadrati = numeri.map((n) => n * n);

  print(quadrati.toList()); // Output: [1, 4, 9, 16, 25]
}

2. Utilizzo con where

Il metodo where filtra gli elementi di una collezione in base alla funzione lambda fornita.

void main() {
  var numeri = [1, 2, 3, 4, 5];
  var numeriPari = numeri.where((n) => n % 2 == 0);

  print(numeriPari.toList()); // Output: [2, 4]
}

3. Utilizzo con forEach

Il metodo forEach applica una funzione a ciascun elemento di una collezione.

void main() {
  var nomi = ['Alice', 'Bob', 'Charlie'];
  nomi.forEach((nome) => print("Nome: $nome"));

  // Output:
  // Nome: Alice
  // Nome: Bob
  // Nome: Charlie
}

Differenze tra Funzioni Lambda e Normali

Le principali differenze tra funzioni lambda e normali sono:

  1. Sintassi: Le funzioni lambda hanno una sintassi più compatta e sono spesso utilizzate per operazioni temporanee.
  2. Utilizzo: Le funzioni lambda sono spesso passate come argomenti a metodi di collezioni, mentre le funzioni normali vengono dichiarate con un nome e possono essere richiamate più volte.
  3. Ambito di Utilizzo: Le funzioni lambda sono particolarmente utili per operazioni inline e brevi, mentre le funzioni normali sono più adatte per blocchi di codice più complessi e riutilizzabili.

Conclusione

Le funzioni lambda in Dart offrono un modo compatto e flessibile per scrivere funzioni temporanee e inline. Utilizzandole in combinazione con i metodi delle collezioni, puoi semplificare il tuo codice e renderlo più leggibile.