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 des utilisateurs en vérifiant les identifiants des utilisateurs et en contrôlant les niveaux d’autorisation. Votre programme doit :
- Lire une entrée de type chaîne représentant le nom du système
- Lire plusieurs paires d’entrées représentant les noms d’utilisateur et leurs niveaux d’autorisation (la saisie se terminera lorsque vous recevrez
"users_done") - Lire une entrée de type chaîne représentant le nom d’utilisateur à vérifier
- Lire une entrée de type chaîne représentant le niveau d’autorisation à vérifier
- Créer un Map pour stocker les noms d’utilisateur comme clés et leurs niveaux d’autorisation 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 d’autorisation spécifié existe quelque part dans le système - Afficher l’analyse de l’authentification dans le format exact indiqué ci-dessous
Par exemple, si le nom du système est "Corporate Network", que les utilisateurs comprennent "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 d’autorisation à 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 comprennent "teacher1" avec "instructor", "student1" avec "student", "admin1" avec "administrator", que le nom d’utilisateur à vérifier est "guest" et que le niveau d’autorisation à 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 comprennent "librarian" avec "staff", "member1" avec "member", "member2" avec "member", que le nom d’utilisateur à vérifier est "librarian" et que le niveau d’autorisation à 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 d’autorisation existe quelque part dans le système. Pour vérifier si l’utilisateur spécifié possède l’autorisation spécifiée, comparez le niveau d’autorisation 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 autorisations de type administrateur (admin, administrator, staff), « Medium » si l’utilisateur existe mais possède des autorisations incorrectes, et « Low » si l’utilisateur n’existe pas. Le format de saisie sera le suivant : nom du système, puis noms d’utilisateur et niveaux d’autorisation en alternance, se terminant par "users_done", suivis du nom d’utilisateur à vérifier et du niveau d’autorisation à vérifier.
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 uniquesEntraînez-vous par vous-même : Compilateur Dart en ligne