pcall() ile Korumalı Çağrılar
Coddy'nin Lua Journey'sinin Logic & Flow bölümünün bir parçası — ders 33 / 54.
Bir şeyler ters gittiğinde error() programınızı durdururken, bazen hataları çökme yaşamadan ele almak istersiniz. Lua'nın pcall() fonksiyonu, başarısız olabilecek 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şabilecek 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 durumdur: fonksiyon başarılı olursa true, bir hata oluşursa false. İkinci değer duruma bağlıdır; başarılıysa fonksiyonun dönüş 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 bir hatayı tetikler, ancak çökmek yerine pcall() bunu yakalar. Program çalışmaya devam eder ve durum değerini kontrol ederek hatayı kontrollü bir şekilde ele alabilir.
Görev
Kolayoperation, a ve b parametrelerini alan ve hesaplama sonucunu veya 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 dizisine göre hesaplamayı yapan dahili bir fonksiyon oluşturun, ardından hataları yakalamak için bunu pcall() ile sarmalayın.
Mantık:
- İşlem türünü kontrol eden ve hesaplamayı gerçekleştiren dahili bir fonksiyon oluşturun
"add"içina + bdöndürün"subtract"içina - bdöndürün"multiply"içina * bdöndürün"divide"içinbdeğerinin 0 olup olmadığını kontrol edin ve doğruysaerror("Division by zero")çağırın, aksi takdirdea / bdöndürün- Diğer tüm işlemler için
error("Invalid operation")çağırın - Dahili fonksiyonu yürütmek 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 işlenenb(number): İkinci işlenen
Döndürdüğü Değer: "Result: " ve ardından hesaplama sonucunu veya "Error: " ve ardından hata mesajını (string) içeren bir dize
Kopya kağıdı
pcall() fonksiyonu (korumalı çağrı), programınızı çökertmeden hata verebilecek kodları güvenli bir şekilde çalıştırmanıza olanak tanır.
Temel sözdizimi:
local status, result = pcall(functionName, arg1, arg2)pcall() iki değer döndürür:
- status: Fonksiyon başarılı olursa
true, bir hata oluşursafalse - result: Başarılı olursa fonksiyonun dönüş değeri, hata oluşursa hata mesajı
Ö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, programın çökmesi yerine hatayı yakalar ve programın devam ederek hatayı düzgün bir şekilde işlemesini sağlar.
Kendin dene
function safeCalculate(operation, a, b)
-- Kodunuzu buraya yazın
end
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Logic & Flow 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