'throw' Anahtar Kelimesi
Coddy'nin C++ Journey'sinin Mantık & Akış bölümünün bir parçası — ders 50 / 56.
Bazen sadece diğer fonksiyonlar tarafından fırlatılan istisnaları yakalamak yerine, kendi kodunuzda bir hata oluştuğunu bildirmeniz gerekir. throw anahtar kelimesi, programınız bir sorun tespit ettiğinde manuel olarak bir istisna tetiklemenize olanak tanır.
İstisna olarak farklı türde değerler fırlatabilirsiniz - tam sayılar, dizeler veya hatta özel nesneler. İşte temel sözdizimi:
if (someErrorCondition) {
throw "Error message"; // Bir dize sabiti fırlatır
}throw kullandığınızda, program mevcut fonksiyonu yürütmeyi anında 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 oluşmaması gereken koşulları kontrol etmek için yararlıdır.
Geçersiz girdi tespit edildiğinde istisna fırlatılmasına dair pratik bir örnek:
void checkAge(int age) {
if (age < 0) {
throw "Age cannot be negative!";
}
std::cout << "Age is valid: " << age << std::endl;
}throw anahtar kelimesi, programlarınızda hataların ne zaman ve nasıl raporlanacağı üzerinde size kontrol sağlayarak, geçersiz koşullarla uğraşırken fonksiyonlarınızı daha sağlam ve öngörülebilir hale getirir.
Görev
KolayGeçersiz koşullar tespit edildiğinde istisnaları manuel olarak tetiklemek için throw anahtar kelimesini kullanarak girdi doğrulaması uygulayan bir program oluşturun. Bu görev, kendi fonksiyonlarınızda hataları bildirmek için throw ifadesini nasıl kullanacağınızı anlama düzeyinizi test edecektir.
Aşağıdaki girdiler sağlanacaktır:
- Kullanıcının seçtiği kullanıcı adını temsil eden bir string
username - Kullanıcının yaşını temsil eden bir tam sayı
age
Programınız şunları yapmalıdır:
- Parametre olarak bir string ve bir tam sayı alan
validateUseradında bir fonksiyon oluşturun - Fonksiyonun içinde, kullanıcı adının boş olup olmadığını (uzunluğunun 0 olup olmadığını) kontrol edin
- Eğer kullanıcı adı boşsa,
"Username cannot be empty"string değerinithrowile fırlatın - Yaşın 13'ten küçük olup olmadığını kontrol edin
- Eğer yaş 13'ten küçükse,
"Age must be at least 13"string değerinithrowile fırlatın - Her iki doğrulama da geçerse,
"User validation successful"yazdırın - Ana fonksiyonda (main function), girdi değerleriyle
validateUserfonksiyonunu çağırın - Fonksiyonu çağırmak için bir
trybloğu ve fırlatılan string istisnalarını ele almak için bircatchbloğu kullanın
Aşağıdaki tam çıktı formatını kullanın:
Başarılı doğrulama için:
User validation successfulDoğrulama hataları için:
Validation error: [error_message]throw kullandığınızda, programın mevcut fonksiyonu yürütmeyi hemen durdurduğunu ve eşleşen bir catch bloğu aradığını unutmayın. catch bloğu, fırlatılan string sabitlerini (string literals) ele almak için const char* tipini belirtmelidir. Eğer ilk doğrulama başarısız olursa, fonksiyon bir istisna fırlatacak ve ikinci koşulu kontrol etmeye devam etmeyecektir.
Kopya kağıdı
throw anahtar kelimesi, programınız bir sorun tespit ettiğinde istisnaları manuel olarak tetiklemenize olanak tanır:
if (someErrorCondition) {
throw "Error message"; // Bir dize sabiti fırlatır
}throw kullandığınızda, program mevcut fonksiyonu yürütmeyi anında durdurur ve fırlatılan değeri işleyebilecek bir catch bloğu arar.
Giriş doğrulaması için bir istisna fırlatma örneği:
void checkAge(int age) {
if (age < 0) {
throw "Age cannot be negative!";
}
std::cout << "Age is valid: " << age << std::endl;
}İstisna olarak farklı türde değerler fırlatabilirsiniz - tam sayılar, dizeler veya özel nesneler. Fırlatılan dize sabitlerini işlemek için catch bloklarında const char* kullanın.
Kendin dene
#include <iostream>
#include <string>
using namespace std;
int main() {
// Girdiyi oku
string username;
int age;
cin >> username;
cin >> age;
// TODO: Kodunuzu buraya yazın
// validateUser fonksiyonunu oluşturun ve doğrulama mantığını uygulayın
// İstisnaları işlemek için try-catch bloklarını kullanın
return 0;
}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
1İşaretçiler ve Bellek
İşaretçi Nedir?Adres OperatörüDereference OperatörüNull İşaretçilerİşaretçiler ve Diziler'new' ile Dinamik Bellek'delete' ile Belleği Serbest BırakmaÖzet - İşaretçi Pratiği2Vektörler (Dinamik Diziler)
std::vector'a GirişBir Vektör OluşturmaEleman EklemeElemanlara ErişmeVektör BoyutuFor Döngüsü ile YinelemeAralık Tabanlı For DöngüsüEleman SilmeÖzet - Vektör İşlemleri5Proje: Envanter Aracı
Proje KurulumuÖğe Ekleme ve Güncelleme8Temel Hata Yönetimi
İstisnalara Giriş'try' ve 'catch' Blokları'throw' Anahtar KelimesiFarklı İstisna TürleriGenel YakalayıcıÖzet - Güvenli Bölme3Proje: Görev Listesi Aracı
Projeye Genel BakışGörev Ekleme