pcall() ile Korumalı Çağrılar
Coddy'nin Lua Journey'sinin Mantık ve Akış bölümünün bir parçası — ders 33 / 54.
error() bir şeyler yanlış gittiğinde programınızı durdururken, bazen çökme olmadan hataları işlemek istersiniz. Lua'nın pcall() fonksiyonu, hata verebilecek kodları güvenli bir şekilde çalıştırmanızı sağlar.
pcall() adı "korumalı çağrı" (protected call) anlamına gelir. Bir fonksiyon çağrısını, oluşan hataları yakalayan koruyucu bir katmanla sarar. Programınızın çökmesi yerine, pcall() ne olduğu hakkında bilgi döndürür.
İşte temel sözdizimi:
local status, result = pcall(functionName, arg1, arg2)pcall() fonksiyonu iki değer döndürür. İlki bir boolean durumudur: fonksiyon başarılı olduysa true, bir hata oluştuysa false. İkinci değer duruma bağlıdır—başarılıysa fonksiyonun dönen değeridir; bir hata oluştuysa hata mesajıdır.
İşte pratik bir örnek:
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)
endBu örnekte, sıfıra bölme işlemi bir hata tetikler, ancak çökmek yerine bunu pcall() yakalar. Program çalışmaya devam eder ve durum (status) değerini kontrol ederek hatayı sorunsuz bir şekilde ele alabilir.
Görev
Kolayoperation, a ve b parametrelerini alan ve hesaplama sonucunu ya da bir hata mesajını döndüren bir safeCalculate fonksiyonu yazın.
Fonksiyon, istenen matematiksel işlemi güvenli bir şekilde gerçekleştirmek için pcall() kullanmalıdır. İşlem dizesine göre hesaplamayı yapan dahili bir fonksiyon oluşturun, ardından oluşabilecek hataları yakalamak için bunu pcall() ile sarın.
Mantık:
- İşlem türünü kontrol eden ve hesaplamayı yapan dahili bir fonksiyon oluşturun
- "add" için,
a + bdöndürün - "subtract" için,
a - bdöndürün - "multiply" için,
a * bdöndürün - "divide" için,
bdeğerinin 0 olup olmadığını kontrol edin ve doğruysaerror("Division by zero")çağırın, aksi takdirdea / bdöndürün - Diğer herhangi bir işlem için
error("Invalid operation")çağırın - Dahili fonksiyonu çalıştırmak için
pcall()kullanın - Başarılı olursa,
"Result: "ve ardından sonucu döndürün - Bir hata oluşursa,
"Error: "ve ardından hata mesajını döndürün
Parametreler:
operation(string): Gerçekleştirilecek işlem ("add", "subtract", "multiply" veya "divide")a(number): İlk terimb(number): İkinci terim
Döndürülen Değer: "Result: " ve ardından hesaplama sonucunu veya "Error: " ve ardından hata mesajını (string) içeren bir dize
Kendin dene
function safeCalculate(operation, a, b)
-- Buraya kod yazın
-- Note: Test runner, hata mesajının satır numarasını içermesini bekler.
-- Hata çağrınızın beklenen satırda olduğundan emin olun veya test runner izin veriyorsa basit bir hata mesajı kullanın.
endBu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Mantık ve Akış bölümündeki tüm dersler
1İleri Düzey Tablo Yineleme
pairs() ile Yinelemeipairs() ile Yinelemepairs() vs. ipairs()Özet - Karakter Sayfası2Daha Fazla Tablo Kütüphanesi Fonksiyonu
table.concat()Tablo Oluşturma ve unpack()table.sort()Fonksiyonlar ile Özel SıralamaÖzet - Yüksek Skor Tablosu