Vérifier les clés et les valeurs
Fait partie de la section Logique & Flux du Journey Dart de Coddy — leçon 27 sur 65.
Avant d'accéder aux données dans un Map, il est essentiel de vérifier que la clé ou la valeur que vous recherchez existe réellement. Dart propose deux méthodes pour cela : containsKey() et containsValue().
La méthode containsKey() vérifie si une clé spécifique existe dans la map, renvoyant true si elle est trouvée et false sinon. C'est particulièrement utile avant d'essayer d'accéder à une valeur, vous aidant à éviter des erreurs potentielles.
Map<String, String> userPermissions = {
'user123': 'admin',
'user456': 'editor',
'user789': 'viewer'
};
bool hasUser = userPermissions.containsKey('user123');
print(hasUser); // true
bool hasUnknownUser = userPermissions.containsKey('user999');
print(hasUnknownUser); // falseDe même, containsValue() vérifie si une valeur spécifique existe n'importe où dans la map. Cette méthode parcourt toutes les valeurs et renvoie true si elle trouve une correspondance.
bool hasAdmin = userPermissions.containsValue('admin');
print(hasAdmin); // trueCes méthodes sont cruciales pour écrire du code sûr qui gère les données manquantes avec élégance, évitant ainsi les erreurs d'exécution lors de la manipulation de contenus de maps dynamiques.
Défi
FacileCréez un programme qui gère un système d'authentification d'utilisateurs en vérifiant les identifiants des utilisateurs et en contrôlant les niveaux de permission. Votre programme doit :
- Lire une chaîne de caractères en entrée représentant le nom du système
- Lire plusieurs paires d'entrées représentant les noms d'utilisateur et leurs niveaux de permission (la saisie se terminera lorsque vous recevrez
"users_done") - Lire une chaîne de caractères en entrée représentant le nom d'utilisateur à vérifier
- Lire une chaîne de caractères en entrée représentant le niveau de permission à vérifier
- Créer une Map pour stocker les noms d'utilisateur comme clés et leurs niveaux de permission comme valeurs
- Utiliser
containsKey()pour vérifier si le nom d'utilisateur existe dans le système - Utiliser
containsValue()pour vérifier si le niveau de permission spécifié existe quelque part dans le système - Afficher l'analyse d'authentification exactement au format indiqué ci-dessous
Par exemple, si le nom du système est "Corporate Network", que les utilisateurs incluent "alice" avec "admin", "bob" avec "editor", "charlie" avec "viewer", "diana" avec "admin", que le nom d'utilisateur à vérifier est "alice" et que le niveau de permission à vérifier est "admin", votre programme doit afficher :
System: Corporate Network
User Database: {alice: admin, bob: editor, charlie: viewer, diana: admin}
Authentication Check:
Username 'alice' exists: true
Permission 'admin' exists in system: true
User 'alice' has permission 'admin': true
Access Status: GRANTED - User authenticated with valid permissions
Security Level: High (admin access detected)Si le nom du système est "School Portal", que les utilisateurs incluent "teacher1" avec "instructor", "student1" avec "student", "admin1" avec "administrator", que le nom d'utilisateur à vérifier est "guest" et que le niveau de permission à vérifier est "student", votre programme doit afficher :
System: School Portal
User Database: {teacher1: instructor, student1: student, admin1: administrator}
Authentication Check:
Username 'guest' exists: false
Permission 'student' exists in system: true
User 'guest' has permission 'student': false
Access Status: DENIED - Username not found in system
Security Level: Low (user not registered)Si le nom du système est "Library System", que les utilisateurs incluent "librarian" avec "staff", "member1" avec "member", "member2" avec "member", que le nom d'utilisateur à vérifier est "librarian" et que le niveau de permission à vérifier est "premium", votre programme doit afficher :
System: Library System
User Database: {librarian: staff, member1: member, member2: member}
Authentication Check:
Username 'librarian' exists: true
Permission 'premium' exists in system: false
User 'librarian' has permission 'premium': false
Access Status: DENIED - Permission level not available
Security Level: Medium (valid user, invalid permission)Votre programme doit utiliser containsKey() pour vérifier si le nom d'utilisateur existe et containsValue() pour vérifier si le niveau de permission existe quelque part dans le système. Pour vérifier si l'utilisateur spécifique possède la permission spécifique, comparez le niveau de permission réel de l'utilisateur avec celui demandé. Déterminez le niveau de sécurité en fonction des résultats : "High" si l'accès est accordé avec des permissions de type administrateur (admin, administrator, staff), "Medium" si l'utilisateur existe mais a de mauvaises permissions, et "Low" si l'utilisateur n'existe pas. Le format d'entrée sera : le nom du système, puis l'alternance des noms d'utilisateur et des niveaux de permission, se terminant par "users_done", suivi du nom d'utilisateur à vérifier et du niveau de permission à vérifier.
Aide-mémoire
Utilisez containsKey() pour vérifier si une clé spécifique existe dans une Map :
Map<String, String> userPermissions = {
'user123': 'admin',
'user456': 'editor',
'user789': 'viewer'
};
bool hasUser = userPermissions.containsKey('user123');
print(hasUser); // trueUtilisez containsValue() pour vérifier si une valeur spécifique existe n'importe où dans une Map :
bool hasAdmin = userPermissions.containsValue('admin');
print(hasAdmin); // trueLes deux méthodes renvoient true si l'élément est trouvé et false sinon, ce qui aide à prévenir les erreurs d'exécution lors de la manipulation de contenus de map dynamiques.
Essayez vous-même
import 'dart:io';
void main() {
// Lire le nom du système
String? systemName = stdin.readLineSync();
// Créer une Map pour stocker les noms d'utilisateur et leurs niveaux de permission
Map<String, String> userDatabase = {};
// Lire les données utilisateur jusqu'à "users_done"
while (true) {
String? input = stdin.readLineSync();
if (input == "users_done") {
break;
}
String username = input!;
String? permission = stdin.readLineSync();
userDatabase[username] = permission!;
}
// Lire le nom d'utilisateur à vérifier et le niveau de permission à valider
String? usernameToCheck = stdin.readLineSync();
String? permissionToVerify = stdin.readLineSync();
// TODO: Écrivez votre code ci-dessous
// Utiliser containsKey() pour vérifier si l'utilisateur existe
// Utiliser containsValue() pour vérifier si le niveau de permission existe dans le système
// Vérifier si l'utilisateur spécifique possède la permission spécifique
// Déterminer le statut d'accès et le niveau de sécurité :
// - "High (admin access detected)" si l'accès est accordé ET que la permission est admin, administrator, ou staff
// - "Medium (standard access)" si l'accès est accordé mais que la permission n'est pas de type admin
// - "Medium (valid user, invalid permission)" si l'utilisateur existe mais a la mauvaise permission
// - "Low (user not registered)" si l'utilisateur n'existe pas
// Afficher l'analyse d'authentification
print("System: $systemName");
print("User Database: $userDatabase");
print("Authentication Check:");
// Ajoutez vos instructions de sortie ici
}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 uniques