Menu
CoddyTech

Panggilan terlindungi dengan pcall()

Termasuk bagian Logika dan Alur dalam perjalanan Lua di Coddy. Pelajaran 33 dari 54.

Meskipun error() menghentikan programmu saat terjadi kesalahan, terkadang kamu ingin menangani error tanpa membuat program crash. Fungsi pcall() milik Lua memungkinkanmu menjalankan kode dengan aman meskipun kode tersebut mungkin gagal.

Nama pcall() berarti "pemanggilan terlindungi." Fungsi ini membungkus pemanggilan fungsi dengan lapisan pelindung yang menangkap error apa pun. Alih-alih programmu mengalami crash, pcall() mengembalikan informasi tentang apa yang terjadi.

Berikut sintaks dasarnya:

local status, result = pcall(functionName, arg1, arg2)

Fungsi pcall() mengembalikan dua nilai. Nilai pertama adalah status boolean: true jika fungsi berhasil, atau false jika terjadi error. Nilai kedua bergantung pada statusnya. Jika berhasil, nilainya adalah nilai yang dikembalikan fungsi; jika terjadi error, nilainya adalah pesan error.

Berikut contoh praktis:

function divide(a, b)
    if b == 0 then
        error("Cannot divide by zero")
    end
    return a / b
end
local success, result = pcall(divide, 10, 0)
if success then
    print("Result: " .. result)
else
    print("Error caught: " .. result)
end

Dalam contoh ini, pembagian dengan nol memicu error, tetapi alih-alih mengalami crash, pcall() menangkapnya. Program terus berjalan dan dapat menangani error dengan baik dengan memeriksa nilai status.

challenge icon

Tantangan

Mudah

Tulis fungsi safeCalculate yang menerima operation, a, dan b, lalu mengembalikan hasil perhitungan atau pesan error.

Fungsi ini harus menggunakan pcall() untuk menjalankan operasi matematika yang diminta dengan aman. Buat fungsi internal yang melakukan perhitungan berdasarkan string operasi, lalu bungkus fungsi tersebut dengan pcall() untuk menangkap error.

Logika:

  • Buat fungsi internal yang memeriksa jenis operasi dan melakukan perhitungan
  • Untuk "add", kembalikan a + b
  • Untuk "subtract", kembalikan a - b
  • Untuk "multiply", kembalikan a * b
  • Untuk "divide", periksa apakah b adalah 0 dan panggil error("Division by zero", 0) jika benar, jika tidak, kembalikan a / b
  • Untuk operasi lainnya, panggil error("Invalid operation", 0)
  • Gunakan pcall() untuk menjalankan fungsi internal
  • Jika berhasil, kembalikan "Result: " diikuti hasilnya
  • Jika terjadi error, kembalikan "Error: " diikuti pesan error

Berikan 0 sebagai argumen kedua untuk error(). Argumen itu adalah level error, dan 0 memberi tahu Lua agar tidak menambahkan nama file dan nomor baris di depan pesanmu, sehingga string yang dikembalikan persis "Error: Division by zero".

Parameter:

  • operation (string): Operasi yang akan dilakukan ("add", "subtract", "multiply", atau "divide")
  • a (number): Operand pertama
  • b (number): Operand kedua

Nilai yang dikembalikan: String yang berisi "Result: " diikuti hasil perhitungan, atau "Error: " diikuti pesan error (string)

Coba sendiri

function safeCalculate(operation, a, b)
    -- Tulis kodemu di sini
    -- Catatan: panggil error(message, 0) agar Lua tidak menambahkan nama file dan
    -- nomor baris di depan pesanmu.
end
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 Lua online