Menu
Coddy logo textTech

Méthodes et champs statiques

Fait partie de la section Programmation Orientée Objet du Journey Dart de Coddy — leçon 20 sur 110.

Maintenant que vous comprenez la différence entre les membres d'instance et les membres statiques, explorons comment utiliser efficacement les méthodes et les champs statiques. Les membres statiques sont parfaits pour les fonctionnalités qui appartiennent au concept de classe lui-même plutôt qu'aux objets individuels.

Les champs statiques stockent des données partagées entre toutes les instances. Les utilisations courantes incluent les compteurs, les valeurs de configuration ou les données mises en 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

Remarquez que vous appelez les méthodes statiques directement sur le nom de la classe, et non sur une instance. La classe MathHelper fonctionne comme un utilitaire - vous n'avez jamais besoin de créer un objet MathHelper.

Une règle importante : les méthodes statiques ne peuvent pas accéder directement aux membres d'instance. Elles n'ont pas accès à this car elles ne sont liées à aucun objet spécifique :

class Counter {
  int value = 0;  // Champ d'instance
  static int total = 0;  // Champ statique
  
  void increment() {
    value++;  // OK - une méthode d'instance accède à un champ d'instance
    total++;  // OK - une méthode d'instance peut accéder à un champ statique
  }
  
  static void reset() {
    total = 0;  // OK - une méthode statique accède à un champ statique
    // value = 0;  // Erreur ! Impossible d'accéder à un champ d'instance
  }
}

Utilisez des membres statiques lorsque la fonctionnalité ne dépend pas de l'état de l'objet - les fonctions utilitaires, le suivi de fabrique ou les constantes partagées sont des candidats idéaux.

challenge icon

Défi

Facile

Construisons une classe utilitaire pour les opérations sur les chaînes de caractères qui démontre comment les méthodes et les champs statiques collaborent pour fournir des fonctionnalités utiles sans avoir besoin de créer des objets.

Vous allez créer deux fichiers pour organiser votre code :

  • string_utils.dart : Définissez une classe StringUtils qui sert d'assistant utilitaire. Votre classe doit comporter :
    • Une constante static const String defaultSeparator définie sur '-'
    • Un entier static int operationCount commençant à 0 pour suivre le nombre d'opérations effectuées
    • Une méthode statique reverse(String text) qui incrémente operationCount et retourne la chaîne inversée
    • Une méthode statique join(String first, String second) qui incrémente operationCount et retourne les deux chaînes jointes avec le defaultSeparator
    • Une méthode statique countVowels(String text) qui incrémente operationCount et retourne le nombre de voyelles (a, e, i, o, u - insensible à la casse)
    • Une méthode statique getStats() qui retourne une chaîne affichant le total des opérations effectuées
  • main.dart : Importez votre classe utilitaire et utilisez ses méthodes statiques :
    • Appelez reverse() avec 'hello' et affichez le résultat
    • Appelez join() avec 'dart' et 'lang' et affichez le résultat
    • Appelez countVowels() avec 'Programming' et affichez Vowels: [count]
    • Affichez les statistiques en utilisant getStats()

N'oubliez pas d'appeler toutes les méthodes directement sur le nom de la classe puisqu'elles sont statiques - vous ne créerez aucun objet StringUtils.

La méthode getStats() doit retourner ce format :

Operations performed: [operationCount]

Résultat attendu :

olleh
dart-lang
Vowels: 3
Operations performed: 3

Aide-mémoire

Les membres statiques appartiennent à la classe elle-même plutôt qu'aux instances individuelles. Accédez-y en utilisant le nom de la classe, et non un objet.

Les champs statiques stockent des données partagées entre toutes les instances :

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.calculationCount);  // 1

Règles d'accès :

  • Les méthodes d'instance peuvent accéder aux membres d'instance et aux membres statiques
  • Les méthodes statiques ne peuvent accéder qu'aux membres statiques (pas d'accès à this)
class Counter {
  int value = 0;  // Champ d'instance
  static int total = 0;  // Champ statique
  
  void increment() {
    value++;  // OK - méthode d'instance accédant à un champ d'instance
    total++;  // OK - une méthode d'instance peut accéder à un champ statique
  }
  
  static void reset() {
    total = 0;  // OK - méthode statique accédant à un champ statique
    // value = 0;  // Erreur ! Impossible d'accéder à un champ d'instance
  }
}

Utilisez les membres statiques pour les fonctions utilitaires, les constantes partagées, les compteurs ou les fonctionnalités qui ne dépendent pas de l'état de l'objet.

Essayez vous-même

import 'string_utils.dart';

void main() {
  // À FAIRE : Appeler reverse() avec 'hello' et afficher le résultat
  
  // À FAIRE : Appeler join() avec 'dart' et 'lang' et afficher le résultat
  
  // À FAIRE : Appeler countVowels() avec 'Programming' et afficher "Vowels: [count]"
  
  // À FAIRE : Afficher les statistiques en utilisant getStats()
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Programmation Orientée Objet