Lua - Penanganan Kesalahan

Hai teman-teman yang sedang belajar pemrograman! Hari ini, kita akan melihat dunia penanganan kesalahan di Lua. Jangan khawatir jika Anda belum pernah menulis baris kode pun sebelumnya - saya akan memandu Anda langkah demi langkah, seperti yang saya lakukan bagi ribuan murid selama tahun-tahun mengajar saya. Jadi, mari kita mulai perjalanan menarik ini bersama!

Lua - Error Handling

Keperluan Penanganan Kesalahan

Bayangkan Anda sedang membuat kue untuk pertama kalinya. Anda mengikuti resep dengan hati-hati, tetapi tiba-tiba Anda menyadari Anda kehabisan gula. apa yang Anda lakukan? Anda tentu saja tidak bisa terus memasak tanpa bahan penting ini, kan? Itulah tempat penanganan kesalahan berguna dalam pemrograman.

Dalam dunia pemrograman, kesalahan seperti bahan yang hilang dalam resep kita. Mereka bisa terjadi karena berbagai alasan:

  1. Input yang tidak valid dari pengguna
  2. Masalah jaringan
  3. Masalah sistem file
  4. Kesalahan logis dalam kode kita

Tanpa penanganan kesalahan yang proper, program kita mungkin akan crash atau menghasilkan hasil yang tidak diharapkan. Itulah sebabnya penting untuk belajar bagaimana menangani kesalahan dengan mulus.

Fungsi Assert dan Error

Fungsi Assert

Mari kita mulai dengan fungsi assert. Fungsi ini seperti seorang penjaga waspada yang memeriksa apakah suatu kondisi benar. Jika tidak, ia akan memunculkan kesalahan.

Berikut adalah contoh sederhana:

local age = 15
assert(age >= 18, "You must be 18 or older to enter!")
print("Welcome to the club!")

Jika Anda menjalankan kode ini, Anda akan melihat pesan kesalahan:

lua: example.lua:2: You must be 18 or older to enter!

Fungsi assert memeriksa apakah age >= 18 benar. Karena itu tidak benar, ia memunculkan kesalahan dengan pesan yang kita tentukan.

Fungsi Error

Sekarang, mari kita kenal fungsi error. Fungsi ini memungkinkan kita untuk menghasilkan kesalahan sendiri saat kita membutuhkannya.

Berikut adalah contoh:

local function divide(a, b)
if b == 0 then
error("Cannot divide by zero!")
end
return a / b
end

print(divide(10, 2))  -- Ini akan berjalan lancar
print(divide(10, 0))  -- Ini akan memunculkan kesalahan

Ketika Anda menjalankan kode ini, Anda akan melihat:

5
lua: example.lua:3: Cannot divide by zero!

Perintah print pertama berjalan lancar, tetapi yang kedua memicu kesalahan karena kita mencoba membagi dengan nol.

pcall dan xpcall

Sekarang, mari kita belajar tentang dua fungsi kuat yang membantu kita menangani kesalahan: pcall dan xpcall.

Fungsi pcall

pcall berarti "protected call". Itu memungkinkan kita untuk memanggil fungsi dalam mode terjamin, menangkap kesalahan yang mungkin terjadi.

Berikut adalah contoh:

local function riskyFunction()
error("Oops! Something went wrong!")
end

local success, errorMessage = pcall(riskyFunction)

if success then
print("The function ran successfully!")
else
print("An error occurred:", errorMessage)
end

Ketika Anda menjalankan kode ini, Anda akan melihat:

An error occurred: example.lua:2: Oops! Something went wrong!

pcall mengembalikan dua nilai: sebuah boolean yang menunjukkan kesuksesan atau kegagalan, dan baik nilai kembalian fungsi (jika sukses) atau pesan kesalahan (jika gagal).

Fungsi xpcall

xpcall adalah seperti saudara yang lebih canggih dari pcall. Itu memungkinkan kita untuk menyediakan fungsi penanganan kesalahan khusus.

Berikut adalah contoh:

local function errorHandler(err)
print("CUSTOM ERROR HANDLER:")
print(debug.traceback("Error: " .. tostring(err), 2))
return "Error handled!"
end

local function riskyFunction()
error("Danger, Will Robinson!")
end

local success, result = xpcall(riskyFunction, errorHandler)

if success then
print("The function ran successfully!")
else
print("An error occurred. Result:", result)
end

Ketika Anda menjalankan kode ini, Anda akan melihat catatan kesalahan yang detil:

CUSTOM ERROR HANDLER:
Error: Danger, Will Robinson!
stack traceback:
example.lua:7: in function 'riskyFunction'
[C]: in function 'xpcall'
example.lua:11: in main chunk
[C]: in ?
An error occurred. Result: Error handled!

Ini memberikan kita informasi yang lebih banyak tentang di mana dan mengapa kesalahan terjadi.

Metode Penanganan Kesalahan

Berikut adalah tabel yang menggabungkan metode penanganan kesalahan yang kita pelajari:

Metode Deskripsi Use Case
assert Memeriksa suatu kondisi dan memunculkan kesalahan jika itu salah Validasi input
error Menghasilkan kesalahan khusus Saat suatu kondisi kesalahan spesifik terpenuhi
pcall Memanggil fungsi dalam mode terjamin Saat Anda ingin menangkap dan menangani kesalahan
xpcall Memanggil fungsi dalam mode terjamin dengan penanganan kesalahan khusus Saat Anda memerlukan informasi kesalahan detil

Ingat, penanganan kesalahan yang proper adalah seperti memakai sabuk pengaman saat mengemudi. Itu mungkin tampak tidak diperlukan saat segalanya berjalan mulus, tetapi itu bisa menyelamatkan Anda dari banyak masalah saat hal-hal berubah buruk!

Praktik konsep ini, eksperimen dengan berbagai skenario, dan segera Anda akan menangani kesalahan seperti seorang pro. Selamat pemrograman, dan jangan lupa untuk menerima kesalahan Anda - mereka adalah kesempatan untuk belajar dan meningkatkan kode Anda!

Credits: Image by storyset