Menu
Coddy logo textTech

Metodi e campi statici

Fa parte della sezione Programmazione orientata agli oggetti del percorso Dart di Coddy. Lezione 20 di 110.

Ora che hai capito la differenza tra membri di istanza e statici, esploriamo come usare efficacemente metodi e campi statici. I membri statici sono perfetti per le funzionalità che appartengono al concetto stesso di classe, anziché ai singoli oggetti.

I campi statici memorizzano dati condivisi tra tutte le istanze. Gli usi più comuni includono contatori, valori di configurazione o dati memorizzati nella cache:

class MathHelper {
  static const double pi = 3.14159;
  static int calculationCount = 0;
  
  static double circleArea(double radius) {
    calculationCount++;
    return pi * radius * radius;
  }
}

print(MathHelper.circleArea(5));  // 78.53975
print(MathHelper.circleArea(3));  // 28.27431
print(MathHelper.calculationCount);  // 2

Nota che chiami i metodi statici direttamente sul nome della classe, non su un'istanza. La classe MathHelper funziona come un'utilità: non devi mai creare un oggetto MathHelper.

Una regola importante: i metodi statici non possono accedere direttamente ai membri di istanza. Non hanno accesso a this perché non sono associati a un oggetto specifico:

class Counter {
  int value = 0;  // Campo di istanza
  static int total = 0;  // Campo statico
  
  void increment() {
    value++;  // OK - il metodo di istanza accede al campo di istanza
    total++;  // OK - il metodo di istanza può accedere al campo statico
  }
  
  static void reset() {
    total = 0;  // OK - il metodo statico accede al campo statico
    // value = 0;  // Errore! Impossibile accedere al campo di istanza
  }
}

Usa i membri statici quando la funzionalità non dipende dallo stato dell’oggetto: le funzioni di utilità, il tracciamento delle factory o le costanti condivise sono candidati ideali.

challenge icon

Sfida

Facile

Creiamo una classe di utilità per le operazioni sulle stringhe, che mostri come i metodi e i campi statici collaborano per offrire funzionalità utili senza dover creare oggetti.

Creerai due file per organizzare il codice:

  • string_utils.dart: Definisci una classe StringUtils che funge da helper di utilità. La classe dovrebbe avere:
    • Un static const String defaultSeparator impostato su '-'
    • Un static int operationCount inizializzato a 0 per tenere traccia del numero di operazioni eseguite
    • Un metodo statico reverse(String text) che incrementa operationCount e restituisce la stringa invertita
    • Un metodo statico join(String first, String second) che incrementa operationCount e restituisce le due stringhe unite con defaultSeparator
    • Un metodo statico countVowels(String text) che incrementa operationCount e restituisce il numero di vocali (a, e, i, o, u, senza distinzione tra maiuscole e minuscole)
    • Un metodo statico getStats() che restituisce una stringa con il totale delle operazioni eseguite
  • main.dart: Importa la classe di utilità e usa i suoi metodi statici:
    • Chiama reverse() con 'hello' e stampa il risultato
    • Chiama join() con 'dart' e 'lang' e stampa il risultato
    • Chiama countVowels() con 'Programming' e stampa Vowels: [count]
    • Stampa le statistiche usando getStats()

Ricorda di chiamare tutti i metodi direttamente sul nome della classe, poiché sono statici: non creerai alcun oggetto StringUtils.

Il metodo getStats() dovrebbe restituire il testo in questo formato:

Operations performed: [operationCount]

Risultato previsto:

olleh
dart-lang
Vowels: 3
Operations performed: 3

Provalo tu

import 'string_utils.dart';

void main() {
  // TODO: Chiama reverse() con 'hello' e stampa il risultato
  
  // TODO: Chiama join() con 'dart' e 'lang' e stampa il risultato
  
  // TODO: Chiama countVowels() con 'Programming' e stampa "Vowels: [count]"
  
  // TODO: Stampa le statistiche usando getStats()
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore Dart online