Menu
CoddyTech

'throw' Anahtar Kelimesi

Coddy'nin C++ Journey'sinin Mantık & Akış bölümünün bir parçası. Ders 50 / 56.

Bazen, yalnızca diğer işlevlerin fırlattığı istisnaları yakalamak yerine, kendi kodunuzda bir hata oluştuğunu bildirmeniz gerekir. throw anahtar sözcüğü, programınız bir sorun algıladığında elle bir istisna oluşturmanıza olanak tanır.

İstisna olarak farklı türlerde değerler fırlatabilirsiniz - tamsayılar, dizeler veya özel nesneler bile. Temel söz dizimi şöyledir:

if (someErrorCondition) {
    throw "Error message";  // Bir dize sabiti fırlatır
}

throw kullandığında program, geçerli işlevin yürütülmesini hemen durdurur ve fırlatılan değeri işleyebilecek bir catch bloğu arar. Bu, özellikle girdiyi doğrulamak veya normal program yürütmesi sırasında gerçekleşmemesi gereken koşulları kontrol etmek için kullanışlıdır.

Geçersiz girdi algılandığında istisna fırlatmaya dair pratik bir örnek:

void checkAge(int age) {
    if (age < 0) {
        throw "Age cannot be negative!";
    }
    std::cout << "Age is valid: " << age << std::endl;
}

Çağıran, çağrıyı bir try bloğunun içine alır. Fırlatılan bir dize sabiti const char* türündedir; dolayısıyla catch bloğu bu türün adını kullanır ve parametresi mesajı tutar:

try {
    checkAge(-5);
} catch (const char* message) {
    std::cout << "Error: " << message << std::endl;
}
// Çıktı: Error: Age cannot be negative!

throw anahtar sözcüğü, programlarınızda hataların ne zaman ve nasıl bildirileceğini kontrol etmenizi sağlar; böylece geçersiz koşullarla karşılaşan işlevleriniz daha sağlam ve öngörülebilir olur.

challenge icon

Görev

Kolay

Geçersiz koşullar algılandığında istisnaları manuel olarak tetiklemek için throw anahtar sözcüğünü kullanarak girdi doğrulaması yapan bir program oluştur. Bu görev, kendi işlevlerinde hataları belirtmek için throw kullanımını anlama düzeyini sınayacaktır.

Aşağıdaki girdiler sağlanacaktır:

  • Kullanıcının seçtiği kullanıcı adını temsil eden bir dize username (bu satır boş olabilir)
  • Kullanıcının yaşını temsil eden bir tamsayı age

Programın şunları yapmalıdır:

  1. Parametre olarak bir dize ve bir tamsayı alan, validateUser adlı bir işlev oluştur
  2. İşlevin içinde, kullanıcı adının boş olup olmadığını (uzunluğunun 0 olup olmadığını) denetle
  3. Kullanıcı adı boşsa, "Username cannot be empty" dizesini throw et
  4. Yaşın 13'ten küçük olup olmadığını denetle
  5. Yaş 13'ten küçükse, "Age must be at least 13" dizesini throw et
  6. Her iki doğrulama da başarılı olursa, "User validation successful" yazdır
  7. Ana işlevde, girdi değerleriyle validateUser işlevini çağır
  8. İşlevi çağırmak için bir try bloğu, fırlatılan dize istisnalarını işlemek için de bir catch bloğu kullan

Aşağıdaki kesin çıktı biçimini kullan:

Doğrulama başarılı olduğunda:

User validation successful

Doğrulama hatalarında:

Validation error: [error_message]

throw kullandığında programın geçerli işlevi yürütmeyi hemen durdurduğunu ve eşleşen bir catch bloğu aradığını unutma. Fırlatılan dize sabitlerini işlemek için catch bloğunda const char* türü belirtilmelidir. İlk doğrulama başarısız olursa işlev bir istisna fırlatır ve ikinci koşulu denetlemeye devam etmez.

Kendin dene

#include <iostream>
#include <string>
using namespace std;

// TODO: validateUser fonksiyonunu burada, main'in üstüne yaz
// string türünde bir username ve int türünde bir age alır; bir kontrol başarısız olursa bir string sabiti fırlatır

int main() {
    // Girdiyi oku
    string username;
    int age;
    getline(cin, username);
    cin >> age;
    
    // TODO: validateUser fonksiyonunu bir try bloğu içinde çağır
    // ve fırlatılan mesajı catch (const char* error) ile yakala
    
    return 0;
}
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 C++ derleyicisi