Menu
CoddyTech

Kata Kunci 'throw'

Termasuk bagian Logika dan Alur dalam perjalanan C++ di Coddy. Pelajaran 50 dari 56.

Terkadang, kamu perlu menandakan bahwa terjadi error di kodemu sendiri, bukan hanya menangkap exception yang dilempar oleh fungsi lain. Kata kunci throw memungkinkan kamu memicu exception secara manual ketika programmu mendeteksi masalah.

Kamu dapat melempar berbagai tipe nilai sebagai pengecualian, seperti integer, string, atau bahkan object kustom. Berikut sintaks dasarnya:

if (someErrorCondition) {
    throw "Error message";  // Melempar string literal
}

Saat kamu menggunakan throw, program langsung berhenti menjalankan fungsi saat ini dan mencari blok catch yang dapat menangani nilai yang dilempar. Ini sangat berguna untuk memvalidasi input atau memeriksa kondisi yang seharusnya tidak terjadi selama program berjalan normal.

Berikut contoh praktis melempar exception saat mendeteksi input yang tidak valid:

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

Pemanggil membungkus pemanggilan tersebut dalam blok try. Literal string yang dilempar memiliki tipe const char*, jadi itulah tipe yang disebutkan oleh blok catch, dan parameternya menyimpan pesan tersebut:

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

Kata kunci throw memberimu kendali atas kapan dan bagaimana error dilaporkan dalam programmu, sehingga fungsi-fungsimu lebih tangguh dan dapat diprediksi saat menangani kondisi yang tidak valid.

challenge icon

Tantangan

Mudah

Buat program yang menerapkan validasi input menggunakan kata kunci throw untuk memicu exception secara manual saat kondisi tidak valid terdeteksi. Tantangan ini akan menguji pemahamanmu tentang cara menggunakan throw untuk menandakan error di fungsi buatanmu sendiri.

Input berikut akan diberikan:

  • Sebuah string username yang menunjukkan username pilihan pengguna (baris ini bisa kosong)
  • Sebuah bilangan bulat age yang menunjukkan usia pengguna

Programmu harus:

  1. Membuat fungsi bernama validateUser yang menerima string dan bilangan bulat sebagai parameter
  2. Di dalam fungsi, memeriksa apakah username kosong (memiliki panjang 0)
  3. Jika username kosong, throw string "Username cannot be empty"
  4. Memeriksa apakah usia kurang dari 13
  5. Jika usia kurang dari 13, throw string "Age must be at least 13"
  6. Jika kedua validasi berhasil, mencetak "User validation successful"
  7. Di fungsi main, memanggil validateUser dengan nilai input
  8. Menggunakan blok try untuk memanggil fungsi dan blok catch untuk menangani exception string yang dilemparkan

Gunakan format output persis berikut:

Untuk validasi yang berhasil:

User validation successful

Untuk error validasi:

Validation error: [error_message]

Ingat, saat kamu menggunakan throw, program langsung berhenti menjalankan fungsi saat ini dan mencari blok catch yang cocok. Blok catch harus menentukan tipe const char* untuk menangani literal string yang dilemparkan. Jika validasi pertama gagal, fungsi akan melemparkan exception dan tidak melanjutkan pemeriksaan kondisi kedua.

Coba sendiri

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

// TODO: Tulis fungsi validateUser di sini, di atas main
// Fungsi ini menerima string username dan int age, lalu melempar literal string jika pemeriksaan gagal

int main() {
    // Baca input
    string username;
    int age;
    getline(cin, username);
    cin >> age;
    
    // TODO: Panggil validateUser di dalam blok try
    // dan tangkap pesan yang dilempar dengan catch (const char* error)
    
    return 0;
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Logika dan Alur

Latihan sendiri: Compiler C++ online