Menu
CoddyTech

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 ters gittiğinde programınızı durdursa da bazen çökmeye neden olmadan hataları işlemek istersiniz. Lua'nın pcall() işlevi, başarısız olabilecek kodu güvenli bir şekilde çalıştırmanızı sağlar.

pcall() adı “korumalı çağrı” anlamına gelir. Bir işlev çağrısını, hataları yakalayan koruyucu bir katmana sarar. Programınızın çökmesi yerine pcall(), ne olduğuna ilişkin bilgileri döndürür.

İşte temel sözdizimi:

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

pcall() işlevi iki değer döndürür. İlki bir boole durumu değeridir: işlev başarılı olduysa true, bir hata oluştuysa false. İkinci değer duruma bağlıdır; işlem başarılıysa işlevin döndürdüğü değerdir, 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)
end

Bu örnekte sıfıra bölme bir hatayı tetikler, ancak program çökmek yerine pcall() hatayı yakalar. Program çalışmaya devam eder ve durum değerini kontrol ederek hatayı düzgün bir şekilde ele alabilir.

challenge icon

Görev

Kolay

operation, a ve b değerlerini alan ve hesaplamanın sonucunu veya bir hata mesajını döndüren safeCalculate adlı bir fonksiyon 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 bir iç fonksiyon oluşturun, ardından hataları yakalamak için bu fonksiyonu pcall() ile sarmalayın.

Mantık:

  • İşlem türünü kontrol eden ve hesaplamayı gerçekleştiren bir iç fonksiyon oluşturun
  • "add" için a + b döndürün
  • "subtract" için a - b döndürün
  • "multiply" için a * b döndürün
  • "divide" için b değerinin 0 olup olmadığını kontrol edin; doğruysa error("Division by zero", 0) çağrısını yapın, değilse a / b döndürün
  • Diğer tüm işlemler için error("Invalid operation", 0) çağrısını yapın
  • İç fonksiyonu çalıştırmak için pcall() kullanın
  • Başarılı olursa, sonucu "Result: " ifadesinin ardından döndürün
  • Bir hata oluşursa, hata mesajını "Error: " ifadesinin ardından döndürün

error() fonksiyonunun ikinci argümanı olarak 0 geçirin. Bu argüman hata düzeyidir ve 0, Lua'ya dosya adını ve satır numarasını mesajınızın önüne eklememesini söyler; böylece döndürülen dize tam olarak "Error: Division by zero" olur.

Parametreler:

  • operation (string): Gerçekleştirilecek işlem ("add", "subtract", "multiply" veya "divide")
  • a (number): İlk işlenen
  • b (number): İkinci işlenen

Döndürülenler: Hesaplama sonucunun ardından "Result: " veya hata mesajının ardından "Error: " içeren bir dize (string)

Kendin dene

function safeCalculate(operation, a, b)
    -- Kodu buraya yaz
    -- Note: Lua'nın dosya adını ve eklememesi için error(message, 0) çağırın
    -- satır numarasını mesajınızın önüne.
end
quiz iconKendini test et

Bu 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

Kendi başına pratik yap: Online Lua derleyicisi