Menu
Coddy logo textTech

Verificando Chaves e Valores

Parte da seção Lógica & Fluxo do Journey de Dart da Coddy. Lição 27 de 65.

Antes de acessar dados em um Map, é essencial verificar se a chave ou o valor que você está procurando realmente existe. O Dart fornece dois métodos para isso: containsKey() e containsValue().

O método containsKey() verifica se uma chave específica existe no mapa, retornando true se for encontrada e false caso contrário. Isso é particularmente útil antes de tentar acessar um valor, ajudando você a evitar erros potenciais.

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

Da mesma forma, containsValue() verifica se um valor específico existe em qualquer lugar no mapa. Este método pesquisa em todos os valores e retorna true se encontrar uma correspondência.

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

Estes métodos são cruciais para escrever código seguro que lida com dados ausentes de forma elegante, prevenindo erros em tempo de execução ao trabalhar com conteúdos de mapas dinâmicos.

challenge icon

Desafio

Fácil

Crie um programa que gerencie um sistema de autenticação de usuários verificando as credenciais dos usuários e conferindo os níveis de permissão. Seu programa deve:

  1. Ler uma entrada de texto representando o nome do sistema
  2. Ler vários pares de entradas representando nomes de usuário e seus níveis de permissão (a entrada terminará quando você receber "users_done")
  3. Ler uma entrada de texto representando o nome de usuário a ser verificado
  4. Ler uma entrada de texto representando o nível de permissão a ser validado
  5. Criar um Map para armazenar os nomes de usuário como chaves e seus níveis de permissão como valores
  6. Usar containsKey() para verificar se o nome de usuário existe no sistema
  7. Usar containsValue() para verificar se o nível de permissão especificado existe em qualquer parte do sistema
  8. Imprimir a análise de autenticação exatamente no formato mostrado abaixo

Por exemplo, se o nome do sistema for "Corporate Network", os usuários incluírem "alice" com "admin", "bob" com "editor", "charlie" com "viewer", "diana" com "admin", o nome de usuário a ser verificado for "alice" e o nível de permissão a ser validado for "admin", seu programa deverá produzir:

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 o nome do sistema for "School Portal", os usuários incluírem "teacher1" com "instructor", "student1" com "student", "admin1" com "administrator", o nome de usuário a ser verificado for "guest" e o nível de permissão a ser validado for "student", seu programa deverá produzir:

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 o nome do sistema for "Library System", os usuários incluírem "librarian" com "staff", "member1" com "member", "member2" com "member", o nome de usuário a ser verificado for "librarian" e o nível de permissão a ser validado for "premium", seu programa deverá produzir:

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)

Seu programa deve usar containsKey() para verificar se o nome de usuário existe e containsValue() para conferir se o nível de permissão existe em qualquer parte do sistema. Para verificar se o usuário específico possui a permissão específica, compare o nível de permissão real do usuário com o solicitado. Determine o nível de segurança com base nos resultados: "High" se o acesso for concedido com permissões do tipo admin (admin, administrator, staff), "Medium" se o usuário existir, mas tiver permissões incorretas, e "Low" se o usuário não existir. O formato da entrada será: nome do sistema, depois nomes de usuário e níveis de permissão alternados, terminando com "users_done", seguidos pelo nome de usuário a ser verificado e pelo nível de permissão a ser validado.

Experimente você mesmo

import 'dart:io';

void main() {
  // Ler o nome do sistema
  String? systemName = stdin.readLineSync();
  
  // Criar um Map para armazenar nomes de usuário e seus níveis de permissão
  Map<String, String> userDatabase = {};
  
  // Ler dados do usuário até "users_done"
  while (true) {
    String? input = stdin.readLineSync();
    if (input == "users_done") {
      break;
    }
    String username = input!;
    String? permission = stdin.readLineSync();
    userDatabase[username] = permission!;
  }
  
  // Ler o nome de usuário para verificar e o nível de permissão para validar
  String? usernameToCheck = stdin.readLineSync();
  String? permissionToVerify = stdin.readLineSync();
  
  // TODO: Escreva seu código abaixo
  // Use containsKey() para verificar se o nome de usuário existe
  // Use containsValue() para verificar se o nível de permissão existe no sistema
  // Verifique se o usuário específico possui a permissão específica
  // Determine o status de acesso e o nível de segurança:
  //   - "High (admin access detected)" if access granted AND permission is admin, administrator, or staff
  //   - "Medium (standard access)" se o acesso for concedido, mas a permissão não for do tipo admin
  //   - "Medium (valid user, invalid permission)" se o usuário existir, mas tiver a permissão errada
  //   - "Low (user not registered)" se o usuário não existir
  
  // Imprimir a análise de autenticação
  print("System: $systemName");
  print("User Database: $userDatabase");
  print("Authentication Check:");
  // Adicione suas instruções de saída aqui
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Lógica & Fluxo

Pratique por conta própria: Compilador de Dart online