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)
endDalam 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.
Tantangan
MudahTulis 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
badalah 0 dan panggilerror("Division by zero", 0)jika benar, jika tidak, kembalikana / 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 pertamab(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.
endPelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Logika dan Alur
1Iterasi Tabel Tingkat Lanjut
Iterasi dengan pairs()Iterasi dengan ipairs()pairs() vs. ipairs()Rangkuman: Lembar Karakter2Fungsi library tabel Lainnya
table.concat()Pembuatan tabel & unpack()table.sort()Pengurutan Kustom dengan FungsiRangkuman, Papan Skor TertinggiLatihan sendiri: Compiler Lua online