Menu
Coddy logo textTech

Constructeurs constants

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

Un constructeur constant crée des objets constants au moment de la compilation. Lorsque vous créez des objets avec les mêmes valeurs en utilisant un constructeur const, Dart réutilise la même instance en mémoire, améliorant ainsi les performances.

Pour créer un constructeur constant, ajoutez le mot-clé const avant le nom du constructeur, et assurez-vous que toutes les variables d'instance sont final :

class Color {
  final int red;
  final int green;
  final int blue;

  const Color(this.red, this.green, this.blue);
}

const white = Color(255, 255, 255);
const alsoWhite = Color(255, 255, 255);

print(identical(white, alsoWhite)); // true

white et alsoWhite pointent tous deux vers le même objet en mémoire car ils ont été créés avec des valeurs identiques à l'aide d'un constructeur const.

Vous pouvez également utiliser des constructeurs const sans le mot-clé const, ce qui crée des instances régulières (non constantes) :

var red = Color(255, 0, 0);       // Instance régulière
const blue = Color(0, 0, 255);    // Instance constante

Les constructeurs constants sont couramment utilisés pour les objets de configuration immuables, les valeurs prédéfinies comme les couleurs ou les tailles, et partout où vous souhaitez garantir l'immuabilité des objets tout en optimisant l'utilisation de la mémoire.

challenge icon

Défi

Facile

Construisons un système de configuration pour un jeu simple qui utilise des constructeurs constants pour définir des paramètres immuables et réutilisables.

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

  • difficulty.dart : Définissez une classe Difficulty qui représente les paramètres de difficulté du jeu. Votre classe doit avoir :
    • Trois champs final : name (String), enemyCount (int), et playerLives (int)
    • Un constructeur constant qui initialise les trois champs
    • Une méthode display() qui affiche les informations de difficulté
  • main.dart : Importez votre classe de difficulté et créez trois préréglages de difficulté constants :
    • easy avec le nom 'Easy', 5 ennemis, et 5 vies
    • medium avec le nom 'Medium', 10 ennemis, et 3 vies
    • hard avec le nom 'Hard', 20 ennemis, et 1 vie
    Créez les trois en tant que constantes de compilation en utilisant le mot-clé const. Appelez ensuite display() sur chacun dans l'ordre listé ci-dessus. Enfin, vérifiez si deux objets const Difficulty('Easy', 5, 5) sont identiques en utilisant identical() et affichez le résultat.

La méthode display() doit afficher exactement ce format :

[name]: [enemyCount] enemies, [playerLives] lives

Sortie attendue :

Easy: 5 enemies, 5 lives
Medium: 10 enemies, 3 lives
Hard: 20 enemies, 1 lives
true

Aide-mémoire

Un constructeur constant crée des objets constants au moment de la compilation. Lorsque des objets avec des valeurs identiques sont créés à l'aide d'un constructeur const, Dart réutilise la même instance en mémoire.

Pour créer un constructeur constant, ajoutez le mot-clé const avant le nom du constructeur et assurez-vous que toutes les variables d'instance sont final :

class Color {
  final int red;
  final int green;
  final int blue;

  const Color(this.red, this.green, this.blue);
}

La création d'instances constantes avec des valeurs identiques donne le même objet en mémoire :

const white = Color(255, 255, 255);
const alsoWhite = Color(255, 255, 255);

print(identical(white, alsoWhite)); // true

Les constructeurs const peuvent également être utilisés sans le mot-clé const pour créer des instances régulières :

var red = Color(255, 0, 0);       // Regular instance
const blue = Color(0, 0, 255);    // Constant instance

Les constructeurs constants sont utiles pour les objets de configuration immuables, les valeurs prédéfinies et l'optimisation de l'utilisation de la mémoire.

Essayez vous-même

import 'difficulty.dart';

void main() {
  // TODO: Créez trois préréglages de difficulté constants en utilisant le mot-clé const :
  // - easy : nom 'Easy', 5 ennemis, 5 vies
  // - medium : nom 'Medium', 10 ennemis, 3 vies
  // - hard : nom 'Hard', 20 ennemis, 1 vie
  
  // TODO: Appelez display() sur chaque difficulté dans l'ordre : easy, medium, hard
  
  // TODO: Vérifiez si deux objets const Difficulty('Easy', 5, 5) sont identiques
  // en utilisant identical() et affichez le résultat
}
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