Menu
Coddy logo textTech

Anahtar ve Değer Kontrolü

Coddy'nin Dart Journey'sinin Mantık & Akış bölümünün bir parçası. Ders 27 / 65.

Bir Map içindeki verilere erişmeden önce, aradığınız anahtarın veya değerin gerçekten var olduğunu doğrulamanız önemlidir. Dart bunun için iki yöntem sunar: containsKey() ve containsValue().

containsKey() yöntemi, belirli bir anahtarın haritada (map) mevcut olup olmadığını kontrol eder; bulunursa true, aksi takdirde false döndürür. Bu, özellikle bir değere erişmeye çalışmadan önce kullanışlıdır ve olası hatalardan kaçınmanıza yardımcı olur.

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

Benzer şekilde, containsValue() belirli bir değerin eşlemde (map) herhangi bir yerde olup olmadığını kontrol eder. Bu yöntem tüm değerleri tarar ve bir eşleşme bulursa true değerini döndürür.

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

Bu yöntemler, dinamik harita içerikleriyle çalışırken çalışma zamanı hatalarını önleyerek, eksik verileri sorunsuz bir şekilde işleyen güvenli kodlar yazmak için kritik öneme sahiptir.

challenge icon

Görev

Kolay

Kullanıcı kimlik bilgilerini doğrulayarak ve izin düzeylerini kontrol ederek bir kullanıcı kimlik doğrulama sistemini yöneten bir program oluştur. Programın şunları yapması gerekir:

  1. Sistem adını temsil eden bir dize girdisi oku
  2. Kullanıcı adlarını ve izin düzeylerini temsil eden birden fazla girdi çifti oku (girdi, "users_done" alındığında sona erecek)
  3. Kontrol edilecek kullanıcı adını temsil eden bir dize girdisi oku
  4. Doğrulanacak izin düzeyini temsil eden bir dize girdisi oku
  5. Kullanıcı adlarını anahtar, izin düzeylerini değer olarak depolamak için bir Map oluştur
  6. Kullanıcı adının sistemde var olup olmadığını kontrol etmek için containsKey() kullan
  7. Belirtilen izin düzeyinin sistemin herhangi bir yerinde var olup olmadığını kontrol etmek için containsValue() kullan
  8. Kimlik doğrulama analizini aşağıda gösterilen tam biçimde yazdır

Örneğin sistem adı "Corporate Network" ise, kullanıcılar arasında "alice" izinli "admin", "bob" izinli "editor", "charlie" izinli "viewer", "diana" izinli "admin" bulunuyorsa, kontrol edilecek kullanıcı adı "alice" ve doğrulanacak izin düzeyi "admin" ise programınızın çıktısı şu şekilde olmalıdır:

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)

Sistem adı "School Portal" ise, kullanıcılar arasında "teacher1" izinli "instructor", "student1" izinli "student", "admin1" izinli "administrator" bulunuyorsa, kontrol edilecek kullanıcı adı "guest" ve doğrulanacak izin düzeyi "student" ise programınızın çıktısı şu şekilde olmalıdır:

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)

Sistem adı "Library System" ise, kullanıcılar arasında "librarian" izinli "staff", "member1" izinli "member", "member2" izinli "member" bulunuyorsa, kontrol edilecek kullanıcı adı "librarian" ve doğrulanacak izin düzeyi "premium" ise programınızın çıktısı şu şekilde olmalıdır:

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)

Programınız, kullanıcı adının var olup olmadığını doğrulamak için containsKey() ve izin düzeyinin sistemin herhangi bir yerinde var olup olmadığını kontrol etmek için containsValue() kullanmalıdır. Belirli kullanıcının belirli izne sahip olup olmadığını kontrol etmek için kullanıcının gerçek izin düzeyini istenen izin düzeyiyle karşılaştırın. Güvenlik düzeyini sonuçlara göre belirleyin: yönetici türü izinlerle (admin, administrator, staff) erişim veriliyorsa "High", kullanıcı mevcut ancak izinleri yanlışsa "Medium" ve kullanıcı mevcut değilse "Low". Girdi biçimi şu şekilde olacaktır: sistem adı, ardından dönüşümlü olarak kullanıcı adları ve izin düzeyleri, "users_done" ile sona erecek; sonrasında kontrol edilecek kullanıcı adı ve doğrulanacak izin düzeyi gelecektir.

Kendin dene

import 'dart:io';

void main() {
  // Sistem adını oku
  String? systemName = stdin.readLineSync();
  
  // Kullanıcı adlarını ve izin seviyelerini saklamak için bir Map oluştur
  Map<String, String> userDatabase = {};
  
  // "users_done" gelene kadar kullanıcı verilerini oku
  while (true) {
    String? input = stdin.readLineSync();
    if (input == "users_done") {
      break;
    }
    String username = input!;
    String? permission = stdin.readLineSync();
    userDatabase[username] = permission!;
  }
  
  // Kontrol edilecek kullanıcı adını ve doğrulanacak izin seviyesini oku
  String? usernameToCheck = stdin.readLineSync();
  String? permissionToVerify = stdin.readLineSync();
  
  // TODO: Kodunuzu aşağıya yazın
  // Kullanıcı adının var olup olmadığını kontrol etmek için containsKey() kullanın
  // İzin seviyesinin sistemde var olup olmadığını kontrol etmek için containsValue() kullanın
  // Belirli bir kullanıcının belirli bir izne sahip olup olmadığını kontrol edin
  // Erişim durumunu ve güvenlik seviyesini belirleyin:
  //   - "High (admin access detected)" if access granted AND permission is admin, administrator, or staff
  //   - Erişim verildiyse ancak izin admin tipi değilse "Medium (standard access)"
  //   - Kullanıcı varsa ancak yanlış izne sahipse "Medium (valid user, invalid permission)"
  //   - Kullanıcı mevcut değilse "Low (user not registered)"
  
  // Kimlik doğrulama analizini yazdır
  print("System: $systemName");
  print("User Database: $userDatabase");
  print("Authentication Check:");
  // Çıktı ifadelerinizi buraya ekleyin
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Mantık & Akış bölümündeki tüm dersler

Kendi başına pratik yap: Online Dart derleyicisi