0Pricing
Lua Academy · Pelajaran

Fungsi Factory dan Generator

Gunakan closure sebagai fungsi factory untuk menghasilkan instans fungsi yang telah dikonfigurasi.

Fungsi Factory dan Generator adalah pelajaran Lua Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Lua Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Lua Academy mencakup 4 pelajaran total.

Apa Itu Fungsi Pembuat?

Fungsi pembuat adalah fungsi yang membuat dan mengembalikan fungsi lain, yang dikonfigurasi oleh argumen dan upvalue-nya.

Pembuat Pengali Sederhana

Setiap pemanggilan multiplier mengembalikan fungsi penutup baru yang menangkap factor yang berbeda.

local function multiplier(factor)
  return function(x) return x * factor end
end
local double = multiplier(2)
local triple = multiplier(3)
print(double(5))  -- 10
print(triple(5))  -- 15

Pembuat Pencatat yang Dapat Dikonfigurasi

Pembuat pencatat menangkap string awalan dan mengembalikan fungsi pencatat.

local function makeLogger(prefix)
  return function(msg)
    print("[" .. prefix .. "] " .. msg)
  end
end
local info = makeLogger("INFO")
local warn = makeLogger("WARN")
info("started")
warn("low memory")

Pembuat Pencacah

Sebuah pembangkit mempertahankan keadaan internal dan menghasilkan nilai baru pada setiap pemanggilan.

local function counter(start, step)
  local n = start - step
  return function()
    n = n + step
    return n
  end
end
local evens = counter(0, 2)
print(evens(), evens(), evens())  -- 0 2 4

Pembangkit Rentang

Pembangkit rentang menghasilkan nilai dari from hingga to, lalu mengembalikan nil saat semua nilai telah habis.

local function range(from, to, step)
  step = step or 1
  local i = from - step
  return function()
    i = i + step
    if i <= to then return i end
  end
end
for v in range(1, 5) do print(v) end

Penerapan Parsial

Sebuah fungsi pembuat menerapkan sebagian argumen untuk membuat versi fungsi yang terspesialisasi.

local function partial(fn, ...)
  local args = {...}
  return function(...)
    local all = {table.unpack(args)}
    for _, v in ipairs({...}) do all[#all+1] = v end
    return fn(table.unpack(all))
  end
end
local add = function(a,b) return a+b end
local add10 = partial(add, 10)
print(add10(5))  -- 15

Pembuat Memo

Sebuah fungsi pembuat dapat membuat versi memo dari fungsi yang mahal dijalankan.

local function memoize(fn)
  local cache = {}
  return function(x)
    if cache[x] == nil then cache[x] = fn(x) end
    return cache[x]
  end
end

Lexer Token Berkeadaan

Pembuat lexer menangkap string masukan dan posisi, lalu menghasilkan token berikutnya pada setiap pemanggilan.

local function lexer(input)
  local pos = 1
  return function()
    if pos > #input then return nil end
    local token = input:match("%S+", pos)
    if token then pos = pos + #token + 1 end
    return token
  end
end

Pembangkit vs. Coroutine

Pembangkit berbasis fungsi penutup lebih sederhana, tetapi menyimpan seluruh keadaan dalam upvalue. Pembangkit berbasis coroutine lebih kuat karena memungkinkan yield di mana saja dalam logika yang kompleks.

Templat Fungsi

Fungsi pembuat membuat templat fungsi—pola umum yang diparameterkan saat dibuat dan dapat digunakan kembali berkali-kali dengan konfigurasi yang berbeda.

Currying

Fungsi yang menjalani currying menerima argumen satu per satu, lalu mengembalikan fungsi baru sampai semua argumen diberikan.

local function curry2(fn)
  return function(a)
    return function(b)
      return fn(a, b)
    end
  end
end
local curriedAdd = curry2(function(a,b) return a+b end)
print(curriedAdd(3)(4))  -- 7

Pertanyaan tentang Fungsi Pembuat

Apa karakteristik utama fungsi pembuat?

Ringkasan: Fungsi Pembuat

Fungsi pembuat menghasilkan fungsi penutup yang telah dikonfigurasi, sehingga memungkinkan penerapan parsial, pembangkit, memo, dan currying. Fungsi pembuat merupakan salah satu pola pemrograman fungsional Lua yang paling kuat.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Fungsi Factory dan Generator” gratis?

Ya — teks lengkap “Fungsi Factory dan Generator” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Lua Academy, upgrade ke CoddyKit PRO. Kursus Lua Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Fungsi Factory dan Generator”?

Gunakan closure sebagai fungsi factory untuk menghasilkan instans fungsi yang telah dikonfigurasi. Kamu berlatih Lua Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Lua Academy?

Tidak diperlukan pengalaman sebelumnya. Lua Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “Fungsi Factory dan Generator” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Lua Academy ini?

Ya. Setiap pelajaran Lua Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Apa Itu Upvalue?
  2. Upvalue Bersama di antara Closure
  3. Fungsi Factory dan Generator
  4. Memoisasi dengan Closure
← Kembali ke Lua Academy