İ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 (exceptions) fırlatan özel doğrulama fonksiyonları uygulayarak kullanıcı hesap bilgilerini doğrulayan bir program oluşturun. Programınız birden fazla hesap alanını kontrol etmeli ve farklı doğrulama hataları için belirli hata mesajları fırlatmalıdır.
- Kullanıcı adını temsil eden bir dize (string) girdisi okuyun
- E-posta adresini temsil eden bir dize girdisi okuyun
- Yaşı dize olarak temsil eden bir dize girdisi okuyun
- Parolayı temsil eden bir dize girdisi okuyun
- Kullanıcı adının geçerli olup olmadığını kontrol eden
validateUsernameadında bir fonksiyon oluşturun: - Kullanıcı adı boşsa veya 3 karakterden kısaysa şu istisnayı fırlatın:
"Username must be at least 3 characters long" - Kullanıcı adı boşluk içeriyorsa şu istisnayı fırlatın:
"Username cannot contain spaces" - Doğrulama geçerse şunu yazdırın:
"Username validation passed" - E-postanın geçerli olup olmadığını kontrol eden
validateEmailadında bir fonksiyon oluşturun: - E-posta
@sembolünü içermiyorsa şu istisnayı fırlatın:"Email must contain @ symbol" - E-posta
@sembolünden sonra bir nokta.içermiyorsa şu istisnayı fırlatın:"Email must contain a valid domain" - Doğrulama geçerse şunu yazdırın:
"Email validation passed" - Yaşın geçerli olup olmadığını kontrol eden
validateAgeadında bir fonksiyon oluşturun: - Yaş dizesini
int.parse()kullanarak bir tam sayıya dönüştürün - Yaş 13'ten küçükse şu istisnayı fırlatın:
"Age must be at least 13 years old" - Yaş 120'den büyükse şu istisnayı fırlatın:
"Age must be realistic (under 120)" - Doğrulama geçerse şunu yazdırın:
"Age validation passed" - Parolanın geçerli olup olmadığını kontrol eden
validatePasswordadında bir fonksiyon oluşturun: - Parola 8 karakterden kısaysa şu istisnayı fırlatın:
"Password must be at least 8 characters long" - Doğrulama geçerse şunu yazdırın:
"Password validation passed" - Her bir doğrulama fonksiyonunu sırayla çağırın ve meydana gelen tüm istisnaları ele alın
- Sonuçları tam olarak aşağıda gösterilen formatta görüntüleyin
Örneğin, girdiler "john", "john@email.com", "25", "password123" ise programınızın çıktısı şöyle olmalıdır:
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ızın çıktısı şöyle olmalıdır:
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ızın çıktısı şöyle olmalıdır:
Account Validation System
=========================
Validating username: john doe
Validation Error: Username cannot contain spaces
Account creation failed due to validation errorsProgramınız her bir doğrulama fonksiyonunu tam olarak şu sırayla çağırmalıdır: kullanıcı adı, e-posta, yaş ve ardından parola. Herhangi bir doğrulama başarısız olduğunda doğrulamayı durdurun ve hata mesajını görüntüleyin. Yukarıda gösterilen belirli hata mesajlarıyla istisnaları manuel olarak tetiklemek için throw anahtar kelimesini kullanın. Her doğrulama fonksiyonu kendi alanını kontrol etmeli ve doğrulama başarısız olursa bir istisna fırlatmalı veya geçerse bir başarı mesajı yazdırmalıdır.
Kopya kağıdı
throw anahtar kelimesi, programınız geçersiz koşullarla karşılaştığında istisnaları manuel olarak tetiklemenize olanak tanır:
void checkAge(int age) {
if (age < 0) {
throw "Age cannot be negative!";
}
print("Age is valid: $age");
}Bir istisna fırlattığınızda (throw), program o noktada yürütmeyi durdurur. Bu, girdileri doğrulamak ve fonksiyonlardaki kuralları uygulamak için yararlıdır; kodunuzu daha güvenilir ve hata ayıklaması daha kolay hale getirir.
Basit dize mesajları fırlatabilir veya daha spesifik istisna türleri oluşturabilirsiniz. İstisna fırlatmak, önemli işlemlere devam etmeden önce girdileri kontrol etmesi gereken doğrulama fonksiyonlarında özellikle değerlidir.
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ölme