Variables différées
Fait partie de la section Programmation Orientée Objet du Journey Dart de Coddy. Leçon 19 sur 110.
Le mot-clé late indique à Dart qu'une variable non-nullable sera initialisée avant d'être utilisée, même si elle n'est pas assignée immédiatement. C'est utile lorsque vous ne pouvez pas initialiser un champ dans la déclaration ou le constructeur, mais que vous êtes certain qu'il aura une valeur avant d'être accédé.
class User {
late String username;
void initialize(String name) {
username = name;
}
void greet() {
print('Hello, $username!');
}
}
User user = User();
user.initialize('Alice');
user.greet(); // Hello, Alice!Sans late, Dart se plaindrait que username n'est pas initialisé. Le modificateur late promet que vous assignerez une valeur avant de la lire.
Un autre avantage de late est l'initialisation paresseuse. Une variable late avec un initialiseur ne calculera sa valeur qu'au moment de son premier accès :
class Config {
late String settings = loadSettings();
String loadSettings() {
print('Loading...');
return 'default';
}
}
Config config = Config();
print('Config created');
print(config.settings); // "Loading..." s'affiche ici, puis "default"La méthode loadSettings() s'exécute uniquement lorsque settings est accédé pour la première fois, et non lors de la création de l'objet. Attention cependant : accéder à une variable late avant qu'elle ne soit initialisée génère une erreur d'exécution.
Défi
FacileConstruisons un gestionnaire de connexions à une base de données qui illustre à la fois l’initialisation différée et l’initialisation paresseuse à l’aide de variables late.
Tu vas créer deux fichiers pour organiser ton code :
database.dart: définis une classeDatabasequi simule une connexion à une base de données. Ta classe doit avoir :- Un
late String connectionStringqui sera défini après la création de l’objet - Un
late String statusavec un initialiseur paresseux qui afficheChecking connection...et renvoie'Connected' - Une méthode
connect(String connStr)qui définitconnectionStringet afficheConnection configured: [connectionString] - Une méthode
query(String sql)qui afficheExecuting on [connectionString]: [sql] - Une méthode
checkStatus()qui afficheStatus: [status](cela déclenchera l’initialisation paresseuse lors du premier appel)
- Un
main.dart: importe ta classe de base de données et montre les deux utilisations delate:- Créer une instance de
Database - Afficher
Database object created - Appeler
connect()avec la chaîne de connexion'localhost:5432/mydb' - Appeler
query()avec'SELECT * FROM users' - Appeler
checkStatus()pour déclencher l’initialisation paresseuse
- Créer une instance de
Remarque que connectionString est défini manuellement après la création de l’objet, tandis que status ne calcule sa valeur que lors de son premier accès.
Sortie attendue :
Database object created
Connection configured: localhost:5432/mydb
Executing on localhost:5432/mydb: SELECT * FROM users
Checking connection...
Status: ConnectedEssayez vous-même
import 'database.dart';
void main() {
// TODO : Créer une instance de Database
// TODO : Afficher 'Database object created'
// TODO : Appeler connect() avec 'localhost:5432/mydb'
// TODO : Appeler query() avec 'SELECT * FROM users'
// TODO : Appeler checkStatus() pour déclencher l'initialisation paresseuse
}
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
1Fondamentaux de la POO
Fichiers externesBibliothèques et importsIntroduction à la POOClasses vs objetsLe mot-clé thisMéthodesVariables d’instanceBases des constructeursRécapitulatif - Calculatrice simple4Sécurité face aux valeurs nulles
Introduction à la sécurité face aux valeurs nullesNullable vs Non-NullableLes opérateurs ? et !Mot-clé Late et sécurité face aux valeurs nullesOpérateurs sensibles à nullSécurité face aux valeurs nulles dans les classesRécapitulatif – Système de profil utilisateur7Classes abstraites et interfaces
Classes abstraitesMéthodes abstraitesInterfaces en DartInterfaces implicitesImplémenter ou étendreInterfaces multiplesRécapitulatif - Calculateur de formes10Collections et génériques
Vue d’ensemble des List, Set et MapCollections à typage sûrClasses génériquesMéthodes génériquesContraintes génériquesIterable et IteratorRécapitulatif – stockage générique2Constructeurs en Dart
Constructeur par défautConstructeurs nommésListes d'initialisationConstructeurs constantsConstructeurs factoryConstructeurs redirigésRécapitulatif - Constructeur de formes5Encapsulation
Membres publics vs privésLa convention du préfixe _Confidentialité au niveau de la bibliothèqueApprofondissement des getters et settersMasquage de l’informationRécapitulatif - Fiches des étudiants8Mixins
Introduction aux MixinsCréer des MixinsUtiliser plusieurs MixinsMot-clé on dans les MixinsMixin ou héritageMixin ou interfaceRécapitulatif - Système animal11Méthodes spéciales
Redéfinition de toString()Redéfinition de hashCode et ==Interface ComparableMéthode call()Redéfinition de noSuchMethodRécapitulatif - Collection personnalisée14Patrons de conception, partie 1
Introduction aux patrons de conceptionPatron SingletonPatron FactoryPatron ObserverPatron Strategy3Propriétés des classes
Membres d’instance et statiquesChamps Final et ConstVariables différéesMéthodes et champs statiquesAccesseurs et mutateursRécapitulatif - Gestionnaire de compte bancaire6Héritage
Héritage de baseLe mot-clé superRedéfinition de méthodeL’annotation @overrideLe mot-clé de classe finalConstructeurs et héritageRécapitulatif – Hiérarchie des employés9Polymorphisme
Bases du polymorphismePolymorphisme via les interfacesVérification des types à l’exécutionLes opérateurs is et asMot-clé covariantRécapitulatif - Processeur de paiements12POO asynchrone
Futures et async/awaitNotions de base des StreamsContrôleurs de StreamsConstructeurs asynchronesAsynchrone dans les méthodes de classeRécapitulatif - récupérateur de données15Patrons de conception – Partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode modèlePatron ÉtatPatron CompositePatron DépôtEntraînez-vous par vous-même : Compilateur Dart en ligne