Menu
Coddy logo textTech

İ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.

challenge icon

Görev

Kolay

Geç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.

  1. Kullanıcı adını temsil eden bir dize girdisi oku
  2. E-posta adresini temsil eden bir dize girdisi oku
  3. Yaşı dize olarak temsil eden bir dize girdisi oku
  4. Parolayı temsil eden bir dize girdisi oku
  5. Kullanıcı adının geçerli olup olmadığını denetleyen validateUsername adlı 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"
  6. E-postanın geçerli olup olmadığını denetleyen validateEmail adlı 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"
  7. Yaşın geçerli olup olmadığını denetleyen validateAge adlı 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"
  8. Parolanın geçerli olup olmadığını denetleyen validatePassword adlı 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"
  9. Her doğrulama işlevini sırayla çağır ve oluşabilecek istisnaları ele al
  10. 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: john

Girdiler "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 errors

Girdiler "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 errors

Programı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ın
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