0Pricing
Lua Academy · Pelajaran

Apa Itu Upvalue?

Pahami cara closure menangkap variabel sebagai upvalue dari scope yang melingkupinya.

Apa Itu Upvalue? adalah pelajaran Lua Academy gratis di CoddyKit. Ini adalah pelajaran 1 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.

Ringkasan Closure

Closure adalah fungsi yang dibundel bersama referensi ke variabel dari lingkup yang membungkusnya. Variabel yang ditangkap tersebut disebut upvalue.

Contoh Upvalue

Fungsi dalam menangkap count dari lingkup fungsi luar.

local function makeCounter()
  local count = 0
  return function()
    count = count + 1
    return count
  end
end
local next = makeCounter()
print(next())  -- 1
print(next())  -- 2

Upvalue Adalah Variabel yang Tetap Aktif

Upvalue bukan salinan—upvalue adalah referensi ke variabel. Fungsi penutup dapat membaca dan menulisnya.

Beberapa Upvalue

Sebuah fungsi penutup dapat menangkap beberapa variabel dari beberapa lingkup yang membungkusnya.

local function adder(x)
  return function(y) return x + y end
end
local add5 = adder(5)
print(add5(3))  -- 8

Masa Hidup Upvalue

Upvalue tetap ada selama masih ada fungsi penutup yang merujuknya. Upvalue baru dikumpulkan oleh pengumpul sampah setelah semua fungsi penutup yang merujuknya dikumpulkan.

debug.getupvalue

Anda dapat memeriksa upvalue dengan debug.getupvalue(fn, n), yang mengembalikan nama dan nilai upvalue ke-n.

local x = 10
local function f() return x end
print(debug.getupvalue(f, 1))  -- x  10

Upvalue vs. Global

Upvalue (variabel lokal yang ditangkap oleh fungsi penutup) lebih cepat daripada variabel global. VM mengaksesnya secara langsung melalui indeks tanpa pencarian tabel.

Upvalue Tertutup

Ketika blok yang membungkusnya selesai, upvalue menjadi tertutup: dipindahkan dari tumpukan ke heap. Fungsi penutup tetap berbagi sel di heap ini.

Upvalue Terbuka vs. Tertutup

Terbuka: upvalue masih berada di tumpukan (fungsi yang membungkusnya masih berjalan). Tertutup: upvalue dipindahkan ke heap saat lingkup yang membungkusnya berakhir.

Penerapan Praktis

Upvalue secara alami menerapkan keadaan privat dalam fungsi penutup—fungsi modul dapat menyimpan keadaan privat tanpa mengeksposnya secara global.

local id = 0
local function newId()
  id = id + 1
  return id
end

Batas Jumlah Upvalue

Setiap fungsi Lua dapat merujuk hingga 255 upvalue. Dalam praktiknya, hal ini jarang menjadi masalah.

Pertanyaan tentang Upvalue

Apa itu upvalue?

Ringkasan: Upvalue

Upvalue adalah variabel luar yang ditangkap oleh fungsi penutup. Upvalue tetap berada di heap setelah lingkup yang membungkusnya berakhir, dibagikan melalui referensi, dan menyediakan keadaan privat yang dapat diubah tanpa variabel global.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Apa Itu Upvalue?” gratis?

Ya — teks lengkap “Apa Itu Upvalue?” 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 “Apa Itu Upvalue?”?

Pahami cara closure menangkap variabel sebagai upvalue dari scope yang melingkupinya. 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 1 dari 4.

Berapa lama pelajaran “Apa Itu Upvalue?” 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