Menu
Coddy logo textTech

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ı ele almak isteyebilirsiniz. Lua'nın pcall() işlevi, başarısız olabilecek kodu güvenli bir şekilde çalıştırmanıza olanak tanır.

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ğu hakkında bilgi döndürür.

İşte temel söz dizimi:

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

pcall() işlevi iki değer döndürür. İlki bir boolean durumudur: İşlev başarılı olduysa true, bir hata oluştuysa false. İkinci değer duruma bağlıdır; başarılıysa işlevin dönüş değeridir, hata varsa 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() bu 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 alan ve hesaplamanın sonucunu veya bir hata mesajını döndüren bir safeCalculate işlevi yazın.

İşlev, istenen matematiksel işlemi güvenli bir şekilde gerçekleştirmek için pcall() kullanmalıdır. İşlemin dizesine göre hesaplamayı gerçekleştiren bir iç işlev oluşturun, ardından hataları yakalamak için bu işlevi pcall() ile sarmalayın.

Mantık:

  • İşlem türünü denetleyen ve hesaplamayı gerçekleştiren bir iç işlev 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ı denetleyin; doğruysa error("Division by zero") çağrısını yapın, aksi takdirde a / b döndürün
  • Diğer tüm işlemler için error("Invalid operation") çağrısını yapın
  • İç işlevi yürütmek 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

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ülen: 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ın
    -- Note: Test çalıştırıcısı 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 çalıştırıcısı izin veriyorsa basit bir hata mesajı kullanın.
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