Constructeur par défaut
Fait partie de la section Programmation Orientée Objet du Journey Dart de Coddy — leçon 10 sur 110.
Lorsque vous ne définissez aucun constructeur dans une classe, Dart fournit automatiquement un constructeur par défaut. Il s'agit d'un constructeur sans paramètres qui crée simplement une instance de la classe.
class Book {
String title = 'Unknown';
int pages = 0;
}
// Dart fournit un constructeur par défaut : Book()
Book myBook = Book();
print(myBook.title); // UnknownLe constructeur par défaut est invisible dans votre code, mais il existe. Il ne prend aucun argument et initialise l'objet avec les valeurs par défaut que vous avez assignées aux variables d'instance.
Une fois que vous définissez votre propre constructeur, le constructeur par défaut n'est plus fourni automatiquement. Si vous souhaitez toujours un constructeur sans argument en plus d'un constructeur paramétré, vous devez le créer explicitement :
class Book {
String title;
int pages;
// Constructeur par défaut explicite
Book() : title = 'Unknown', pages = 0;
// Constructeur paramétré
Book.withDetails(this.title, this.pages);
}
Book book1 = Book(); // Utilise le constructeur par défaut
Book book2 = Book.withDetails('Dart', 300); // Utilise le constructeur paramétréLe constructeur par défaut explicite utilise une liste d'initialisation (la partie après les deux-points) pour définir les valeurs initiales. Ce modèle est utile lorsque vous souhaitez proposer plusieurs façons de créer des objets à partir de la même classe.
Défi
FacileConstruisons un système d'inventaire de produits simple qui illustre à la fois les constructeurs par défaut implicites et explicites.
Vous allez créer deux fichiers pour organiser votre code :
product.dart: Définissez une classeProductqui propose deux façons de créer des produits :- Un constructeur par défaut explicite
Product()qui initialisenameà'Unnamed'etpriceà0.0en utilisant une liste d'initialisation - Un constructeur nommé
Product.withDetailsqui accepte les paramètresnameetprice - Une méthode
display()qui affiche :Product: [name] - $[price]
- Un constructeur par défaut explicite
main.dart: Importez votre classe de produit et créez deux produits :- Un utilisant le constructeur par défaut
- Un utilisant le constructeur nommé avec
'Laptop'et999.99
display()sur chaque produit.
Votre classe Product doit avoir deux variables d'instance :
String namedouble price
Format de sortie attendu :
Product: Unnamed - $0.0
Product: Laptop - $999.99Aide-mémoire
Lorsqu'aucun constructeur n'est défini dans une classe, Dart fournit automatiquement un constructeur par défaut sans paramètres :
class Book {
String title = 'Unknown';
int pages = 0;
}
Book myBook = Book(); // Uses implicit default constructor
print(myBook.title); // UnknownUne fois que vous définissez votre propre constructeur, le constructeur par défaut n'est plus fourni automatiquement. Pour avoir à la fois un constructeur sans argument et un constructeur paramétré, vous devez les créer explicitement :
class Book {
String title;
int pages;
// Explicit default constructor with initializer list
Book() : title = 'Unknown', pages = 0;
// Named constructor
Book.withDetails(this.title, this.pages);
}
Book book1 = Book(); // Uses default
Book book2 = Book.withDetails('Dart', 300); // Uses named constructorLe constructeur par défaut explicite utilise une liste d'initialisation (après les deux-points) pour définir les valeurs initiales.
Essayez vous-même
import 'product.dart';
void main() {
// TODO: Créer un produit en utilisant le constructeur par défaut
// TODO: Créer un produit en utilisant le constructeur nommé avec 'Laptop' et 999.99
// TODO: Appeler display() sur chaque produit
}
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
1Les bases de la POO
Fichiers externesBibliothèques et importsIntroduction à la POOClasses vs ObjetsLe mot-clé thisMéthodesVariables d'instanceBases des constructeursRécapitulatif - Calculatrice simple4Null Safety
Introduction à la Null SafetyNullable vs Non-NullableLes opérateurs ? et !Le mot-clé late et la Null SafetyLes opérateurs Null-AwareLa Null Safety dans les classesRécapitulatif - Système de profil utilisateur7Classes abstraites et Interfaces
Classes abstraitesMéthodes abstraitesInterfaces en DartInterfaces implicitesImplémentation vs ExtensionInterfaces multiplesRécapitulatif - Calculateur de formes10Collections et Génériques
Aperçu des List, Set et MapCollections Type-SafeClasses génériquesMéthodes génériquesContraintes de généricitéIterable & IteratorRécapitulatif - Stockage générique2Les constructeurs en Dart
Constructeur par défautConstructeurs nommésListes d'initialisationConstructeurs constantsConstructeurs factoryConstructeurs de redirectionRécapitulatif - Shape Builder5Encapsulation
Membres publics vs privésLa convention du préfixe _Visibilité au niveau de la bibliothèqueApprofondissement des Getters & SettersMasquage d'informationsRécapitulatif - Dossiers d'étudiants8Mixins
Introduction aux MixinsCréation de MixinsUtilisation de plusieurs MixinsLe mot-clé on dans les MixinsMixin vs HéritageMixin vs InterfaceRécapitulatif - Système Animal11Méthodes spéciales
Redéfinition de toString()Redéfinition de hashCode & ==Interface ComparableMéthode call()Redéfinition de noSuchMethodRécapitulatif - Collection personnalisée14Patrons de conception Partie 1
Introduction aux patrons de conceptionPatron SingletonPatron FabriquePatron ObservateurPatron Stratégie3Propriétés de classe
Membres d'instance vs statiquesChamps Final & ConstVariables LateMéthodes et champs statiquesGetters et SettersRécapitulatif - Gestionnaire de compte bancaire6Héritage
Bases de l'héritageLe mot-clé superRedéfinition de méthodeL'annotation @overrideLe mot-clé final pour les classesConstructeurs et héritageRécapitulatif - Hiérarchie des employés9Polymorphisme
Bases du polymorphismePolymorphisme via les interfacesVérification de type à l'exécutionLes opérateurs is & asMot-clé covariantRécapitulatif - Processeur de paiement12POO Asynchrone
Futures & async/awaitBases des StreamsStream ControllersConstructeurs asynchronesL'asynchrone dans les méthodes de classeRécapitulatif - Data Fetcher15Patrons de conception Partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode ModèlePatron ÉtatPatron CompositePatron Repository