İstisna Fırlatmak
Coddy'nin Dart Journey'sinin Mantık & Akış bölümünün bir parçası. Ders 42 / 65.
Bazen kodunuzda kendi hata koşullarınızı oluşturmanız gerekir. throw anahtar kelimesi, programınız devam etmesine izin verilmemesi gereken bir durumla karşılaştığında manuel olarak bir istisna tetiklemenize olanak tanır.
Bir istisna (exception) throw ettiğinizde, aslında "her şeyi durdur - burada bir şeyler yanlış" demiş olursunuz. Bu, girdileri doğrulamak veya fonksiyonlarınızdaki kuralları uygulamak için kullanışlıdır. Basit bir dize (string) mesajı fırlatabilir veya daha spesifik istisna türleri oluşturabilirsiniz.
void checkAge(int age) {
if (age < 0) {
throw "Age cannot be negative!";
}
print("Age is valid: $age");
}Bu örnekte, birisi negatif bir yaş geçirmeye çalışırsa, fonksiyon açıklayıcı bir mesajla anında bir istisna fırlatır. Bu, fonksiyonun geri kalanının geçersiz verilerle çalışmasını önleyerek kodunuzu daha güvenilir ve hata ayıklaması daha kolay hale getirir.
İstisna fırlatmak, önemli işlemlere devam etmeden önce girdilerini doğrulaması gereken fonksiyonlarda özellikle değerlidir.
Görev
KolayGeçersiz veriler tespit edildiğinde istisnalar fırlatan özel doğrulama işlevleri uygulayarak kullanıcı hesabı bilgilerini doğrulayan bir program oluştur. Programın birden fazla hesap alanını denetlemesi ve farklı doğrulama hataları için belirli hata mesajları fırlatması gerekir.
- Kullanıcı adını temsil eden bir dize girdisi oku
- E-posta adresini temsil eden bir dize girdisi oku
- Yaşı dize olarak temsil eden bir dize girdisi oku
- Parolayı temsil eden bir dize girdisi oku
- Kullanıcı adının geçerli olup olmadığını denetleyen
validateUsernameadlı bir işlev oluştur: - Kullanıcı adı boşsa veya 3 karakterden azsa şu istisnayı fırlat:
"Username must be at least 3 characters long" - Kullanıcı adı boşluk içeriyorsa şu istisnayı fırlat:
"Username cannot contain spaces" - Doğrulama başarılı olursa şunu yazdır:
"Username validation passed" - E-postanın geçerli olup olmadığını denetleyen
validateEmailadlı bir işlev oluştur: - E-posta
@sembolünü içermiyorsa şu istisnayı fırlat:"Email must contain @ symbol" - E-posta,
.sembolünden sonra bir nokta@içermiyorsa şu istisnayı fırlat:"Email must contain a valid domain" - Doğrulama başarılı olursa şunu yazdır:
"Email validation passed" - Yaşın geçerli olup olmadığını denetleyen
validateAgeadlı bir işlev oluştur: - Yaş dizesini
int.parse()kullanarak bir tamsayıya dönüştür - Yaş 13'ten küçükse şu istisnayı fırlat:
"Age must be at least 13 years old" - Yaş 120'den büyükse şu istisnayı fırlat:
"Age must be realistic (under 120)" - Doğrulama başarılı olursa şunu yazdır:
"Age validation passed" - Parolanın geçerli olup olmadığını denetleyen
validatePasswordadlı bir işlev oluştur: - Parola 8 karakterden kısaysa şu istisnayı fırlat:
"Password must be at least 8 characters long" - Doğrulama başarılı olursa şunu yazdır:
"Password validation passed" - Her doğrulama işlevini sırayla çağır ve oluşabilecek istisnaları ele al
- Sonuçları aşağıda gösterilen tam biçimde görüntüle
Örneğin girdiler "john", "john@email.com", "25", "password123" ise programın şu çıktıyı vermesi gerekir:
Account Validation System
=========================
Validating username: john
Username validation passed
Validating email: john@email.com
Email validation passed
Validating age: 25
Age validation passed
Validating password: password123
Password validation passed
=========================
All validations passed successfully!
Account created for user: johnGirdiler "jo", "john@email.com", "25", "password123" ise programın şu çıktıyı vermesi gerekir:
Account Validation System
=========================
Validating username: jo
Validation Error: Username must be at least 3 characters long
Account creation failed due to validation errorsGirdiler "john doe", "johnemail.com", "12", "pass" ise programın şu çıktıyı vermesi gerekir:
Account Validation System
=========================
Validating username: john doe
Validation Error: Username cannot contain spaces
Account creation failed due to validation errorsProgramın her doğrulama işlevini tam olarak şu sırayla çağırması gerekir: kullanıcı adı, e-posta, yaş ve ardından parola. Herhangi bir doğrulama başarısız olduğunda doğrulamayı durdur ve hata mesajını hemen görüntüle. Yukarıda gösterilen belirli hata mesajlarıyla istisnaları manuel olarak tetiklemek için throw anahtar sözcüğünü kullan. Her doğrulama işlevi kendi alanını denetlemeli ve doğrulama başarısız olursa bir istisna fırlatmalı, başarılı olursa bir başarı mesajı yazdırmalıdır.
Kendin dene
import 'dart:io';
void main() {
// Girişi oku
String? username = stdin.readLineSync();
String? email = stdin.readLineSync();
String? age = stdin.readLineSync();
String? password = stdin.readLineSync();
print("Account Validation System");
print("=========================");
try {
// YAPILACAK: validateUsername fonksiyonunu oluşturun ve burada çağırın
print("Validating username: $username");
// YAPILACAK: validateEmail fonksiyonunu oluşturun ve burada çağırın
print("Validating email: $email");
// YAPILACAK: validateAge fonksiyonunu oluşturun ve burada çağırın
print("Validating age: $age");
// YAPILACAK: validatePassword fonksiyonunu oluşturun ve burada çağırın
print("Validating password: $password");
// YAPILACAK: Tüm doğrulamalar geçerse, başarı mesajlarını yazdırın
print("=========================");
print("All validations passed successfully!");
print("Account created for user: $username");
} catch (e) {
// YAPILACAK: İstisnaları ele alın ve hata mesajını yazdırın
print("Validation Error: $e");
print("Account creation failed due to validation errors");
}
}
// YAPILACAK: Doğrulama fonksiyonlarınızı buraya yazınBu 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 Listesi6Temel Hata Yönetimi
İstisnalar Nedir?'try-catch' Bloğu'on' ile İstisnaları Yakalamak'finally' Bloğuİstisna FırlatmakÖzet - Güvenli BölmeKendi başına pratik yap: Online Dart derleyicisi