Les Enums dans les instructions 'switch'
Fait partie de la section Logique & Flux du Journey Dart de Coddy — leçon 61 sur 65.
L'une des applications les plus puissantes des enums est de les utiliser avec des instructions switch. Lorsque vous combinez des enums avec des instructions switch, vous créez un code qui est à la fois plus sûr et plus facile à maintenir.
Voici comment vous pouvez utiliser une énumération dans une instruction switch :
enum Status {
pending,
running,
completed
}
Status currentStatus = Status.pending;
switch (currentStatus) {
case Status.pending:
print('Task is waiting to start');
break;
case Status.running:
print('Task is currently in progress');
break;
case Status.completed:
print('Task has been finished');
break;
}L'avantage d'utiliser des enums avec des instructions switch est que Dart peut vérifier que vous avez traité toutes les valeurs possibles de l'enum. Si vous oubliez d'inclure un case pour l'une des valeurs de l'enum, Dart vous avertira, ce qui aide à prévenir les bugs dans votre code.
Cette approche est bien plus sûre que l'utilisation de chaînes de caractères ou de nombres dans les instructions switch, où des fautes de frappe pourraient provoquer un comportement inattendu. Avec les enums, vous bénéficiez d'une vérification à la compilation qui garantit que votre code gère tous les scénarios possibles.
Défi
FacileCréez un programme qui gère l'état d'un personnage de jeu en utilisant des enums et des instructions switch. Votre tâche consiste à :
- Définir un enum appelé
CharacterStateavec les valeurs suivantes :idle,walking,running,jumping, etattacking - Créer une variable appelée
currentStatede typeCharacterStateet lui assigner la valeurCharacterState.idle - Créer une fonction appelée
getStateMessagequi prend un paramètreCharacterStateet retourne un message sous forme de chaîne de caractères basé sur l'état en utilisant une instruction switch : - Pour
CharacterState.idle: retourner"Character is standing still" - Pour
CharacterState.walking: retourner"Character is moving slowly" - Pour
CharacterState.running: retourner"Character is moving quickly" - Pour
CharacterState.jumping: retourner"Character is in the air" - Pour
CharacterState.attacking: retourner"Character is fighting" - Afficher le message d'état initial en utilisant la fonction avec le format exact :
Initial state: Character is standing still - Changer le
currentStateenCharacterState.walking - Afficher le message d'état mis à jour avec le format exact :
Updated state: Character is moving slowly - Changer le
currentStateenCharacterState.attacking - Afficher le message d'état final avec le format exact :
Final state: Character is fighting
Votre programme doit démontrer l'utilisation appropriée des enums avec les instructions switch, montrant comment cette combinaison permet une gestion d'état de type sécurisé (type-safe). L'instruction switch doit gérer toutes les valeurs de l'enum et retourner le message approprié pour chaque état du personnage. Assurez-vous de respecter les conventions de nommage Dart et d'utiliser exactement les messages textuels spécifiés ci-dessus.
Aide-mémoire
Les enums fonctionnent bien avec les instructions switch pour un code de type sécurisé :
enum Status {
pending,
running,
completed
}
Status currentStatus = Status.pending;
switch (currentStatus) {
case Status.pending:
print('Task is waiting to start');
break;
case Status.running:
print('Task is currently in progress');
break;
case Status.completed:
print('Task has been finished');
break;
}Dart vérifie que toutes les valeurs de l'enum sont traitées dans l'instruction switch, évitant ainsi les bugs et fournissant une vérification à la compilation.
Essayez vous-même
import 'dart:io';
// TODO: Définissez votre enum CharacterState ici
// TODO: Créez votre fonction getStateMessage ici
void main() {
// TODO: Écrivez votre code ci-dessous
// Créer la variable currentState et lui assigner CharacterState.idle
// Afficher le message d'état initial
// Changer currentState en CharacterState.walking
// Afficher le message d'état mis à jour
// Changer currentState en CharacterState.attacking
// Afficher le message d'état final
}Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Logique & Flux
1Manipulation avancée des listes
Propriétés de liste : first & lastÉtat de la liste : isEmpty & isNotEmptyInverser une listeAjouter à une liste : insertSuppression dans une liste : removeWhereRechercher dans une liste : indexOfTrier une listeMélanger une listeRécapitulatif - Organisateur de liste4Manipulation avancée des Maps
Itérer sur une MapVérifier les clés et les valeursPropriétés de Map : keys & valuesAjout conditionnel : putIfAbsentSupprimer des entrées d'une MapMaps imbriquéesRécapitulatif - Mise à jour de l'inventaire2Opérations fonctionnelles sur les listes
Transformer avec 'map'Filtrer avec 'where'Utiliser '.toList()'Vérifier des conditions avec 'any'Conditions avec 'every'Trouver avec 'firstWhere'Récapitulatif - Filtrage de données3Les Ensembles
Qu'est-ce qu'un ensemble ?Créer un ensembleAjouter et supprimer des éléments d'un ensembleVérifier la présence d'éléments dans un ensembleConvertir une liste en ensembleUnion d'ensemblesIntersection d'ensemblesDifférence d'ensemblesRécapitulatif - Liste d'invités uniques6Gestion de base des erreurs
Que sont les exceptions ?Le bloc 'try-catch'Intercepter des exceptions avec 'on'Le bloc 'finally'Lever une exceptionRécapitulatif - Division sécurisée9Énumérations (Enums)
Qu'est-ce que les Enums ?Définir un Enum simpleUtiliser des Enums dans des variablesLes Enums dans les instructions 'switch'Récapitulatif - Feu de signalisation