Menu
Coddy logo textTech

Variadic Fonksiyonlar (...)

Coddy'nin Lua Journey'sinin Logic & Flow bölümünün bir parçası — ders 11 / 54.

Bazen herhangi bir sayıda argümanla çalışabilen bir fonksiyona ihtiyaç duyarsınız. Belki de her durum için ayrı fonksiyonlar yazmadan iki, üç veya on sayının toplamını hesaplamak istersiniz. Lua bunun için özel bir sözdizimi sağlar: üç nokta ...

Bir fonksiyonun parametre listesine ... yerleştirdiğinizde, bu fonksiyon herhangi bir sayıda argüman kabul eden değişken sayıda argümanlı (variadic) bir fonksiyon haline gelir:

function sum(...)
    -- Fonksiyon gövdesi
end

Fonksiyonun içinde, bu argümanlara tekrar ... kullanarak erişebilirsiniz. Onlarla daha kolay çalışmak için, süslü parantezler kullanarak onları bir tabloya paketleyebilirsiniz:

function sum(...)
    local args = {...}
    local total = 0
    for i = 1, #args do
        total = total + args[i]
    end
    return total
end

print(sum(5, 10, 15))  -- Çıktı: 30
print(sum(1, 2, 3, 4, 5))  -- Çıktı: 15

{...} ifadesi, fonksiyona iletilen tüm argümanları içeren liste stilinde bir tablo oluşturur. Daha sonra, # uzunluk operatörünü veya ipairs() fonksiyonunu kullanarak bu tabloyu diğerleri gibi yineleyebilirsiniz.

challenge icon

Görev

Kolay

Herhangi bir sayıda sayısal argüman kabul eden ve bunların ortalamasını döndüren bir calculateAverage fonksiyonu yazın.

Esnek sayıda argüman kabul etmek için ... değişken argüman (variadic) sözdizimini kullanın, bunları bir tabloya paketleyin, toplamlarını hesaplayın ve sayıya bölün.

Not: Başlangıç kodu ("Don't touch this code" olarak işaretlenmiş), girdiden sayıları okur, her birini tonumber() kullanarak metinden sayıya dönüştürür ve bunları numbers adlı bir tabloda saklar. Sonunda, tablonun değerlerini bireysel argümanlar olarak yayan unpack(numbers) kullanarak fonksiyonunuzu çağırır — böylece fonksiyonunuz bunları ... olarak alır. Bu kodu ayrıntılı olarak değiştirmenize veya anlamanıza gerek yoktur; sadece calculateAverage fonksiyonunu yazmaya odaklanın.

Mantık:

  • {...} kullanarak tüm argümanları bir tabloya paketleyin
  • Tüm sayıların toplamını hesaplamak için tabloyu döngüye alın
  • Ortalamayı elde etmek için toplamı argüman sayısına bölün
  • Ortalamayı bir sayı olarak döndürün

Parametreler:

  • ... (sayılar): Değişken sayıda sayısal argüman

Döndürdüğü Değer: Sağlanan tüm sayıların ortalaması (sayı)

Kopya kağıdı

Lua, üç nokta sözdizimini ... kullanarak herhangi bir sayıda argüman kabul edebilen değişken sayıda argümanlı (variadic) fonksiyonları destekler:

function sum(...)
    -- Fonksiyon gövdesi
end

Değişken sayıda argümanlı bir fonksiyonun içinde, {...} kullanarak argümanları bir tabloya paketleyin:

function sum(...)
    local args = {...}
    local total = 0
    for i = 1, #args do
        total = total + args[i]
    end
    return total
end

print(sum(5, 10, 15))  -- Çıktı: 30
print(sum(1, 2, 3, 4, 5))  -- Çıktı: 15

{...} ifadesi tüm argümanları içeren bir tablo oluşturur. Uzunluk operatörü # veya ipairs() kullanarak bu tablo üzerinde döngü kurabilirsiniz.

Kendin dene

-- Bu koda dokunmayın --
local numbers = {}
while true do
    local input = io.read()
    if input == nil or input == "" then
        break
    end
    local num = tonumber(input)
    if num then
        table.insert(numbers, num)
    end
end
-------------------------

function calculateAverage(...)
    -- Kodu buraya yazın
end

local average = calculateAverage(unpack(numbers))
print("Average: " .. average)

quiz iconKendini test et

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