0Pricing
Lua Academy · Ders

Kısmi Uygulama

İşlev bağımsız değişkenlerini önceden doldurun.

Kısmi Uygulama, CoddyKit'te ücretsiz bir Lua Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Lua Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Lua Academy kursu toplamda 4 dersten oluşur.

Kısmi Uygulama Nedir

Kısmi uygulama, bir işlevin bazı bağımsız değişkenlerini şimdi sabitleyip geri kalanını daha sonra vermek anlamına gelir. Sonuçta daha az bağımsız değişken bekleyen yeni bir işlev elde edersiniz.

Bu, zaten bildiğiniz değerleri sabitleyerek genel bir işlevi özelleştirilmiş bir işlev hâline getirmenizi sağlar.

Elle Yazılmış Bir Örnek

Bir add işleviniz olduğunu varsayın. 5'i yakalayan ve ikinci sayıyı bekleyen bir kapanış yazarak addFive oluşturabilirsiniz.

Yakalanan değer döndürülen işlevde yaşamaya devam eder; bu nedenle her çağrının yalnızca kalan bağımsız değişkene ihtiyacı vardır.

local function add(a, b)
  return a + b
end

local function addFive(b)
  return add(5, b)
end

print(addFive(10))
print(addFive(2))

İlk Bağımsız Değişkeni Sabitleme

Bu yaklaşımı genelleştirebiliriz. Bir bind1 yardımcı işlevi bir işlev ile sabit bir ilk bağımsız değişken alır ve ikinci bağımsız değişkeni bekleyen yeni bir işlev döndürür.

Kapanış hem f'yi hem de sabitlenen değeri yakalar, ardından çağrıldığında her şeyi aktarır.

local function bind1(f, a)
  return function(b)
    return f(a, b)
  end
end

local function mul(x, y) return x * y end
local double = bind1(mul, 2)
print(double(7))
print(double(50))

Değişken Sayıda Bağımsız Değişken Kullanma

Her sayıda başlangıç bağımsız değişkenini sabitlemek için Lua'nın değişken sayıda bağımsız değişken söz dizimi olan ... ifadesini kullanın. Sabit bağımsız değişkenleri yakalayın, ardından çağrı sırasında gelen bağımsız değişkenleri bunların sonuna ekleyin.

table.pack ve table.unpack işlevleri, bağımsız değişken listelerini saklamanıza ve açmanıza yardımcı olur.

local function partial(f, ...)
  local fixed = table.pack(...)
  return function(...)
    local rest = table.pack(...)
    local args = {}
    for i = 1, fixed.n do args[i] = fixed[i] end
    for i = 1, rest.n do args[fixed.n + i] = rest[i] end
    return f(table.unpack(args, 1, fixed.n + rest.n))
  end
end

local function add3(a, b, c) return a + b + c end
local add10 = partial(add3, 10)
print(add10(2, 3))

Birden Çok Argümanı Sabitleme

partial değişken sayıda argüman kabul ettiği için aynı anda birden fazla argümanı sabitleyebilirsiniz. Döndürülen işlevin artık yalnızca kalan argümanlara ihtiyacı olur.

Burada üç argümandan ikisi önceden doldurulur ve geriye tek argüman alan bir işlev kalır.

local function partial(f, ...)
  local fixed = table.pack(...)
  return function(...)
    local rest = table.pack(...)
    local args = {}
    for i = 1, fixed.n do args[i] = fixed[i] end
    for i = 1, rest.n do args[fixed.n + i] = rest[i] end
    return f(table.unpack(args, 1, fixed.n + rest.n))
  end
end

local function label(prefix, sep, value) return prefix .. sep .. value end
local tag = partial(label, "id", ":")
print(tag(42))

Pratik Bir Kullanım

Kısmi uygulama, genel amaçlı yardımcı işlevlerle kullanıldığında çok etkilidir. Yapılandırmayı bir kez sabitleyin, ardından özelleştirilmiş işlevi birçok kez yeniden kullanın.

Aşağıda genel amaçlı bir greet, yalnızca bir ada ihtiyaç duyan belirli bir dilde selamlama işlevine dönüştürülür.

local function greet(lang, name)
  if lang == "tr" then return "Merhaba, " .. name end
  return "Hello, " .. name
end

local function bind1(f, a) return function(b) return f(a, b) end end
local greetTr = bind1(greet, "tr")
print(greetTr("Ada"))
print(greetTr("Lin"))

Kısmi Uygulama ve Kürleme

Kürleme, çok argümanlı bir işlevi, her biri sıradaki işlevi döndüren tek argümanlı işlevler zincirine dönüştürür. Kısmi uygulama ise yalnızca bazı argümanları sabitler ve kalanları normal bir çağrı olarak bırakır.

Bu iki yaklaşım birbiriyle ilişkilidir ancak birbirinden farklıdır: kürleme argümanları tek tek işler, kısmi uygulama ise bazılarını hemen sabitler.

local function curryAdd(a)
  return function(b)
    return function(c)
      return a + b + c
    end
  end
end

print(curryAdd(1)(2)(3))

İki Argümanlı İşlevi Kürleme

Küçük bir yardımcı işlev, iki argümanlı herhangi bir işlevi otomatik olarak kürleyebilir. İlk argümanı alan ve ikinci argümanı alan başka bir işlev döndürür.

Bu, işlem hatlarında okunaklı duran, yeniden kullanılabilir tek argümanlı oluşturucular üretir.

local function curry2(f)
  return function(a)
    return function(b)
      return f(a, b)
    end
  end
end

local function pow(base, exp) return base ^ exp end
local cpow = curry2(pow)
print(cpow(2)(10))

Kapanışlar Bunu Sağlar

Her kısmi uygulanmış ve kürlenmiş işlev kapanışlara dayanır. Sabit argümanlar, döndürülen işlevin hatırladığı yakalanmış yerel değişkenlerdir.

Her döndürülen işlevin kendine ait yakalanmış değerleri olduğundan, birçok özelleştirilmiş varyantı güvenle oluşturabilirsiniz.

local function bind1(f, a) return function(b) return f(a, b) end end
local function sub(x, y) return x - y end

local from100 = bind1(sub, 100)
local from10 = bind1(sub, 10)
print(from100(40))
print(from10(3))

Ne Zaman Kullanmalı

Bir işlevi sürekli aynı baştaki argümanlarla çağırdığınızda tekrarı azaltmak için kısmi uygulamayı kullanın.

Ayrıca bir işlevi, yalnızca bir değer aktaran bir geri çağırma işlevi gibi daha az argüman bekleyen bir arayüze uyarlamanıza yardımcı olur.

Yapılandırılmış Geri Çağırma İşlevleri

Kısmi uygulama, eşleme ve süzme işlevleriyle iyi uyum sağlar. Geri çağırma işlevinin yalnızca liste öğesini alması için bir yapılandırma argümanını önceden doldurabilirsiniz.

Bu, davranışı yine de ayarlayabilmenizi sağlarken işlem hattınızı temiz tutar.

local function map(t, f) local o={} for i,v in ipairs(t) do o[i]=f(v) end return o end
local function bind1(f, a) return function(b) return f(a, b) end end
local function scale(factor, x) return factor * x end

local r = map({1,2,3,4}, bind1(scale, 10))
print(table.concat(r, ", "))

Hızlı Kontrol

Birbiriyle ilişkili iki fikir arasındaki farkı hatırlayın.

Özet

Kısmi uygulama bazı argümanları sabitler ve sabit değerleri yakalayan kapanışlar aracılığıyla, kalanları bekleyen yeni bir işlev döndürür.

Değişken sayıda argüman alan partial yardımcı işlevi bunu genellerken kürleme, tek argümanlı işlevleri zincirler. Her ikisi de tekrarı azaltır ve işlevleri geri çağırma işlevlerine uyarlar.

Sıkça Sorulan Sorular

“Kısmi Uygulama” dersi ücretsiz mi?

Evet — “Kısmi Uygulama” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Lua Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Lua Academy kursu toplamda 4 dersten oluşur.

“Kısmi Uygulama” dersinde ne öğreneceğim?

İşlev bağımsız değişkenlerini önceden doldurun. Lua Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Lua Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Lua Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“Kısmi Uygulama” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Lua Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Lua Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Değer Olarak İşlevler
  2. map, filter, reduce
  3. Kısmi Uygulama
  4. İşlevleri Birleştirme
← Lua Academy Sayfasına Dön