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); // falseBenzer ş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); // trueBu 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.
Görev
KolayKullanı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:
- Sistem adını temsil eden bir dize (string) girdisi okuyun
- Kullanıcı adlarını ve izin seviyelerini temsil eden birden fazla girdi çifti okuyun (girdi
"users_done"ifadesini aldığınızda sona erecektir) - Kontrol edilecek kullanıcı adını temsil eden bir dize girdisi okuyun
- Doğrulanacak izin seviyesini temsil eden bir dize girdisi okuyun
- Kullanıcı adlarını anahtar (key), izin seviyelerini değer (value) olarak saklamak için bir Map oluşturun
- Kullanıcı adının sistemde mevcut olup olmadığını kontrol etmek için
containsKey()kullanın - Belirtilen izin seviyesinin sistemin herhangi bir yerinde mevcut olup olmadığını kontrol etmek için
containsValue()kullanın - 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); // trueBir 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); // trueHer 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
}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
1İleri Düzey Liste İşlemleri
Liste Özellikleri: first & lastListe Durumu: isEmpty & isNotEmptyBir Listeyi Tersine ÇevirmeListeye Ekleme: insertListeden Silme: removeWhereListede Bulma: indexOfBir Listeyi SıralamaBir Listeyi KarıştırmaÖzet - Liste Düzenleyici4İleri Seviye Map İşlemleri
Map Üzerinde GezinmeAnahtar ve Değer KontrolüMap Özellikleri: keys & valuesKoşullu Ekleme: putIfAbsentMap'ten Öge Kaldırmaİç İçe Map'lerÖzet - Envanter Güncelleme7İleri Seviye Fonksiyonlar
Anonim FonksiyonlarFonksiyonları Argüman Olarak AktarmaClosure'ları AnlamakÖzyinelemeye GirişÖzyinelemeli Fonksiyon: Geri SayımÖzyinelemeli Fonksiyon: FaktöriyelÖzet - Liste İşleyici10Son Meydan Okumalar
Meydan Okuma: Not SıralayıcıMeydan Okuma: Sesli Harf SayacıMeydan Okuma: FizzBuzz2Fonksiyonel Liste İşlemleri
'map' ile Dönüştürme'where' ile Filtreleme'.toList()' Kullanımı'any' ile Koşul Kontrolü'every' ile Koşullar'firstWhere' ile BulmaÖzet - Veri Filtreleme5Proje: Alışveriş Sepeti Hesaplayıcı
Proje KurulumuSepete Ürün Ekleme3Kümeler
Küme Nedir?Küme OluşturmaKümelere Eleman Ekleme ve ÇıkarmaKüme İçinde Eleman KontrolüListeyi Kümeye DönüştürmeKüme BirleşimiKüme KesişimiKüme FarkıÖzet - Benzersiz Davetli Listesi