'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.
Görev
KolayGeç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:
- Parametre olarak bir dize ve bir tamsayı alan,
validateUseradlı bir işlev oluştur - İşlevin içinde, kullanıcı adının boş olup olmadığını (uzunluğunun 0 olup olmadığını) denetle
- Kullanıcı adı boşsa,
"Username cannot be empty"dizesinithrowet - Yaşın 13'ten küçük olup olmadığını denetle
- Yaş 13'ten küçükse,
"Age must be at least 13"dizesinithrowet - Her iki doğrulama da başarılı olursa,
"User validation successful"yazdır - Ana işlevde, girdi değerleriyle
validateUserişlevini çağır - İşlevi çağırmak için bir
trybloğu, fırlatılan dize istisnalarını işlemek için de bircatchbloğu kullan
Aşağıdaki kesin çıktı biçimini kullan:
Doğrulama başarılı olduğunda:
User validation successfulDoğ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;
}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 EklemeKendi başına pratik yap: Online C++ derleyicisi