Menu
Coddy logo textTech

Verificare chiavi e valori

Fa parte della sezione Logica e flusso del percorso Dart di Coddy. Lezione 27 di 65.

Prima di accedere ai dati in una Map, è essenziale verificare che la chiave o il valore che stai cercando esista davvero. Dart fornisce due metodi per farlo: containsKey() e containsValue().

Il metodo containsKey() verifica se una determinata chiave esiste nella mappa, restituendo true se viene trovata e false altrimenti. È particolarmente utile prima di provare ad accedere a un valore e ti aiuta a evitare potenziali errori.

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);  // false

Allo stesso modo, containsValue() verifica se un valore specifico esiste in qualsiasi punto della mappa. Questo metodo esamina tutti i valori e restituisce true se trova una corrispondenza.

bool hasAdmin = userPermissions.containsValue('admin');
print(hasAdmin);  // true

Questi metodi sono fondamentali per scrivere codice sicuro che gestisca con eleganza i dati mancanti, evitando errori di runtime quando si lavora con contenuti dinamici delle mappe.

challenge icon

Sfida

Facile

Crea un programma che gestisca un sistema di autenticazione degli utenti verificando le credenziali degli utenti e controllando i livelli di autorizzazione. Il tuo programma deve:

  1. Leggere una stringa di input che rappresenta il nome del sistema
  2. Leggere più coppie di input che rappresentano i nomi utente e i rispettivi livelli di autorizzazione (l’input terminerà quando riceverai "users_done")
  3. Leggere una stringa di input che rappresenta il nome utente da controllare
  4. Leggere una stringa di input che rappresenta il livello di autorizzazione da verificare
  5. Creare una Map per memorizzare i nomi utente come chiavi e i rispettivi livelli di autorizzazione come valori
  6. Usare containsKey() per controllare se il nome utente esiste nel sistema
  7. Usare containsValue() per controllare se il livello di autorizzazione specificato esiste in qualsiasi punto del sistema
  8. Stampare l’analisi dell’autenticazione nel formato esatto mostrato di seguito

Per esempio, se il nome del sistema è "Corporate Network", gli utenti includono "alice" con "admin", "bob" con "editor", "charlie" con "viewer", "diana" con "admin", il nome utente da controllare è "alice" e il livello di autorizzazione da verificare è "admin", il tuo programma dovrebbe produrre:

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)

Se il nome del sistema è "School Portal", gli utenti includono "teacher1" con "instructor", "student1" con "student", "admin1" con "administrator", il nome utente da controllare è "guest" e il livello di autorizzazione da verificare è "student", il tuo programma dovrebbe produrre:

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)

Se il nome del sistema è "Library System", gli utenti includono "librarian" con "staff", "member1" con "member", "member2" con "member", il nome utente da controllare è "librarian" e il livello di autorizzazione da verificare è "premium", il tuo programma dovrebbe produrre:

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)

Il tuo programma deve usare containsKey() per verificare se il nome utente esiste e containsValue() per controllare se il livello di autorizzazione esiste in qualsiasi punto del sistema. Per verificare se l’utente specifico dispone dell’autorizzazione specifica, confronta il livello di autorizzazione effettivo dell’utente con quello richiesto. Determina il livello di sicurezza in base ai risultati: "High" se l’accesso è concesso con autorizzazioni di tipo amministratore (admin, administrator, staff), "Medium" se l’utente esiste ma dispone di autorizzazioni errate e "Low" se l’utente non esiste. Il formato dell’input sarà: nome del sistema, poi nomi utente e livelli di autorizzazione alternati, terminando con "users_done", seguiti dal nome utente da controllare e dal livello di autorizzazione da verificare.

Provalo tu

import 'dart:io';

void main() {
  // Leggi il nome del sistema
  String? systemName = stdin.readLineSync();
  
  // Crea una Map per memorizzare i nomi utente e i relativi livelli di autorizzazione
  Map<String, String> userDatabase = {};
  
  // Leggi i dati degli utenti fino a "users_done"
  while (true) {
    String? input = stdin.readLineSync();
    if (input == "users_done") {
      break;
    }
    String username = input!;
    String? permission = stdin.readLineSync();
    userDatabase[username] = permission!;
  }
  
  // Leggi il nome utente da controllare e il livello di autorizzazione da verificare
  String? usernameToCheck = stdin.readLineSync();
  String? permissionToVerify = stdin.readLineSync();
  
  // TODO: Scrivi il tuo codice qui sotto
  // Usa containsKey() per verificare se il nome utente esiste
  // Usa containsValue() per verificare se il livello di autorizzazione esiste nel sistema
  // Verifica se l'utente specifico ha l'autorizzazione specifica
  // Determina lo stato di accesso e il livello di sicurezza:
  //   - "High (admin access detected)" se l'accesso è consentito E l'autorizzazione è admin, administrator, o staff
  //   - "Medium (standard access)" se l'accesso è consentito ma l'autorizzazione non è di tipo admin
  //   - "Medium (valid user, invalid permission)" se l'utente esiste ma ha un'autorizzazione errata
  //   - "Low (user not registered)" se l'utente non esiste
  
  // Stampa l'analisi dell'autenticazione
  print("System: $systemName");
  print("User Database: $userDatabase");
  print("Authentication Check:");
  // Aggiungi qui le istruzioni di output
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore Dart online