Linguaggi di programmazione

Caratteristiche funzionali in Dart

Ecco un semplice esempio, volutamente semplificato:

// A list of numbers
List<int> numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

// Functional programming in Dart
var evenSquares = numbers
    .where((n) => n % 2 == 0) // Filter: Keep only even numbers
    .map((n) => n * n)        // Transform: Square each number
    .toList();                // Convert the result to a list

// Output the result
print("Even squares:");
evenSquares.forEach(print);

// Aggregate: Sum of even squares
int sum = evenSquares.reduce((a, b) => a + b);
print("Sum of even squares: $sum");

Nell'esempio sono concentrate varie funzioni tra quelle che si possono applicare a una collezione di dati (nel caso specifico, numeri):

  • where, per selezionare gli elementi secondo un dato criterio
  • map, per convertire gli elementi secondo una certa regola di trasformazione
  • forEach, per enumerare gli elementi della collezione
  • reduce, per aggregare gli elementi secondo un certo criterio

Un altro esempio, un po' più elaborato, che coinvolge una mappa, cioè un insieme di coppie chiave-valore:

// A map of names and ages
Map<String, int> people = {
    "Alice": 25,
    "Bob": 30,
    "Charlie": 35,
    "Diana": 40,
    "Eve": 22
};

// Filter: Keep only people older than 30
var filteredPeople = people.entries
    .where((entry) => entry.value > 30)
    .toList();

// Transform: Create a list of strings describing the filtered people
var descriptions = filteredPeople
    .map((entry) => "${entry.key} is ${entry.value} years old")
    .toList();

// Output the descriptions
print("Filtered people:");
descriptions.forEach(print);

// Aggregate: Calculate the average age of the filtered people
if (filteredPeople.isNotEmpty) {
    double averageAge = filteredPeople
        .map((entry) => entry.value)
        .reduce((a, b) => a + b) / filteredPeople.length;
    print("Average age of filtered people: $averageAge");
} else {
    print("No people older than 30.");
}


Giorgio Barchiesi
Albo degli Ingegneri Sez. A, N. 4027 della Prov. di Trento
P.IVA 02370260222, C.F. BRC GRG 58L26 C794R

Copyright © 2015-2024 Giorgio Barchiesi - Tutti i diritti riservati