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

  1. Kullanıcı adını temsil eden bir dize (string) girdisi okuyun
  2. E-posta adresini temsil eden bir dize girdisi okuyun
  3. Yaşı dize olarak temsil eden bir dize girdisi okuyun
  4. Parolayı temsil eden bir dize girdisi okuyun
  5. Kullanıcı adının geçerli olup olmadığını kontrol eden validateUsername adı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"
  6. E-postanın geçerli olup olmadığını kontrol eden validateEmail adı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"
  7. Yaşın geçerli olup olmadığını kontrol eden validateAge adı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"
  8. Parolanın geçerli olup olmadığını kontrol eden validatePassword adı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"
  9. Her bir doğrulama fonksiyonunu sırayla çağırın ve meydana gelen tüm istisnaları ele alın
  10. 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: john

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

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

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