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 seviyelerini kontrol ederek bir kullanıcı kimlik doğrulama sistemini yöneten bir program oluşturun. Programınız şunları yapmalıdır:

  1. Sistem adını temsil eden bir dize (string) girdisi okuyun
  2. Kullanıcı adlarını ve izin seviyelerini temsil eden birden fazla girdi çifti okuyun (girdi "users_done" ifadesini aldığınızda sona erecektir)
  3. Kontrol edilecek kullanıcı adını temsil eden bir dize girdisi okuyun
  4. Doğrulanacak izin seviyesini temsil eden bir dize girdisi okuyun
  5. Kullanıcı adlarını anahtar (key), izin seviyelerini değer (value) olarak saklamak için bir Map oluşturun
  6. Kullanıcı adının sistemde mevcut olup olmadığını kontrol etmek için containsKey() kullanın
  7. Belirtilen izin seviyesinin sistemin herhangi bir yerinde mevcut olup olmadığını kontrol etmek için containsValue() kullanın
  8. Kimlik doğrulama analizini aşağıda gösterilen tam formatta yazdırın

Örneğin, sistem adı "Corporate Network" ise, kullanıcılar "admin" ile "alice", "editor" ile "bob", "viewer" ile "charlie", "admin" ile "diana" ise, kontrol edilecek kullanıcı adı "alice" ve doğrulanacak izin seviyesi "admin" ise, programınız şu çıktıyı vermelidir:

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)

Eğer sistem adı "School Portal" ise, kullanıcılar "instructor" ile "teacher1", "student" ile "student1", "administrator" ile "admin1" ise, kontrol edilecek kullanıcı adı "guest" ve doğrulanacak izin seviyesi "student" ise, programınız şu çıktıyı vermelidir:

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)

Eğer sistem adı "Library System" ise, kullanıcılar "staff" ile "librarian", "member" ile "member1", "member" ile "member2" ise, kontrol edilecek kullanıcı adı "librarian" ve doğrulanacak izin seviyesi "premium" ise, programınız şu çıktıyı vermelidir:

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 seviyesinin sistemin herhangi bir yerinde olup olmadığını kontrol etmek için containsValue() kullanmalıdır. Belirli bir kullanıcının belirli bir izne sahip olup olmadığını kontrol etmek için, kullanıcının gerçek izin seviyesini istenen seviye ile karşılaştırın. Sonuçlara göre güvenlik seviyesini belirleyin: Yönetici tipi izinlerle (admin, administrator, staff) erişim verilmişse "High", kullanıcı mevcut ancak yanlış izinlere sahipse "Medium" ve kullanıcı mevcut değilse "Low". Giriş formatı şu şekilde olacaktır: sistem adı, ardından sırayla kullanıcı adları ve izin seviyeleri, "users_done" ile bitiş, ardından kontrol edilecek kullanıcı adı ve doğrulanacak izin seviyesi.

Kopya kağıdı

Bir Map içinde belirli bir anahtarın var olup olmadığını kontrol etmek için containsKey() yöntemini kullanın:

Map<String, String> userPermissions = {
  'user123': 'admin',
  'user456': 'editor',
  'user789': 'viewer'
};

bool hasUser = userPermissions.containsKey('user123');
print(hasUser);  // true

Bir Map içinde herhangi bir yerde belirli bir değerin var olup olmadığını kontrol etmek için containsValue() yöntemini kullanın:

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

Her iki yöntem de bulunursa true, aksi takdirde false döndürür; bu da dinamik map içerikleriyle çalışırken çalışma zamanı hatalarını önlemeye yardımcı olur.

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:
  //   - Erişim verildiyse VE izin admin, administrator veya staff ise "High (admin access detected)"
  //   - 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