Dart:
Organizzare il codice in funzioni

Come fare:

Funzione di base

In Dart, si definisce una funzione utilizzando la parola chiave void se questa non restituisce un valore, oppure si specifica il tipo di valore che restituisce altrimenti. Ecco una semplice funzione che stampa un messaggio di saluto:

void greet(String name) {
  print('Ciao, $name!');
}

void main() {
  greet('Alice');  // Output: Ciao, Alice!
}

Restituire un Valore

Le funzioni possono restituire valori. L’esempio seguente prende due interi come input e restituisce la loro somma:

int add(int a, int b) {
  return a + b;
}

void main() {
  var sum = add(5, 3);
  print(sum);  // Output: 8
}

Funzioni Anonime

Dart supporta le funzioni anonime (note anche come espressioni lambda o closures), utili per funzionalità rapide e immediate. Ecco come utilizzare una funzione anonima con il metodo forEach di un elenco:

void main() {
  var fruits = ['mela', 'banana', 'ciliegia'];
  fruits.forEach((item) {
    print(item);
  });
  // Output:
  // mela
  // banana
  // ciliegia
}

Sintassi a Freccia per Funzioni a Singola Espressione

Per funzioni che contengono una sola espressione, Dart offre una sintassi concisa usando la notazione “a freccia” (=>). Questo è particolarmente utile per funzioni brevi o per passare funzioni come argomenti:

int square(int num) => num * num;

void main() {
  print(square(4));  // Output: 16
}

Utilizzare Librerie di Terze Parti

Per funzionalità più complesse o specializzate, gli sviluppatori Dart si affidano spesso a librerie di terze parti. Prendi in considerazione la libreria http per effettuare richieste HTTP. Prima, aggiungi http al tuo file pubspec.yaml sotto le dipendenze:

dependencies:
  http: ^0.13.3

Poi, puoi utilizzarla per recuperare dati dal web:

import 'package:http/http.dart' as http;

Future<void> fetchUserData() async {
  var response = await http.get(Uri.parse('https://api.example.com/users/1'));
  print(response.body);
}

void main() {
  fetchUserData();
  // Risultato atteso: Dati JSON dell'utente. Il risultato effettivo dipenderà dalla risposta dell'API.
}

Ricorda, quando organizzi il tuo codice Dart in funzioni, pensa alla riutilizzabilità, chiarezza e al principio di singola responsabilità. Questo non solo rende il tuo codice più pulito, ma anche più facile per altri (e per il te del futuro) da comprendere e mantenere.