Lingkup

*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.

Dalam scripting, sebuah blok kode adalah tubuh dari sebuah struktur kontrol atau fungsi. Lingkup dari sebuah variabel atau fungsi adalah blok kode yang dapat mengaksesnya, dan itu bisa bersifat global atau lokal. Semua blok dapat mengakses variabel dan fungsi global. Sebuah blok dapat mengakses variabel dan fungsi lokal di blok induknya, tetapi tidak di blok anaknya.

Variabel dan fungsi memiliki lingkup global secara default, tetapi hampir selalu lebih baik untuk mendeklarasikannya dengan lingkup lokal karena Luau mengakses variabel dan fungsi lokal lebih cepat daripada yang global. Untuk memberikan variabel atau fungsi lingkup lokal, letakkan kata kunci local sebelum namanya saat Anda mendeklarasikannya.

Skrip tidak dapat mengakses variabel atau fungsi global dan lokal di skrip lain. Jika Anda ingin berbagi nilai dan fungsi antara skrip, gunakan ModuleScripts.


local helloWorld = 'Hello World!'
local function printHelloWorld()
print(helloWorld)
end
printHelloWorld() -- Hello World!
  • Blok B dapat mengakses variabel lokal di blok A.
  • Blok C dapat mengakses variabel dan fungsi lokal di blok A dan B.
  • Blok A tidak dapat mengakses variabel dan fungsi lokal di blok B atau C.
  • Blok B tidak dapat mengakses variabel lokal di blok C.

Lingkup global

Setelah Anda mendeklarasikan variabel atau fungsi global, blok kode mana pun dalam skrip yang sama dapat mengaksesnya. Variabel dan fungsi memiliki lingkup global kecuali Anda mendeklarasikannya dengan kata kunci local.

Dalam kode berikut, testVar memiliki lingkup global di dalam fungsi lokal testFunc(). Ketika Luau memanggil testFunc(), itu menetapkan testVar nilai 64. testVar memiliki lingkup global, sehingga fungsi print() di luar testFunc() dapat mengaksesnya dan mencetak 64.

Contoh fungsi dan variabel global

local function testFunc() -- lingkup lokal
testVar = 64 -- lingkup global
end
testFunc()
print(testVar) -- 64

Dalam kode berikut, variabel global x dimulai dengan 0, meningkat 1 dengan setiap iterasi dari for loop, dan mencetak lagi setelahnya dengan nilai akhir 4.


x = 0 -- Variabel global "x"
for i = 1, 4 do
x += 1
print("Global 'x' = " .. x)
end
print("Global 'x' = " .. x)
--[[ Hasil keluaran:
Global 'x' = 1
Global 'x' = 2
Global 'x' = 3
Global 'x' = 4
Global 'x' = 4
]]

Lebih mudah untuk mendeklarasikan variabel dan fungsi global karena Anda tidak perlu mengetik sebanyak itu, tetapi variabel dan fungsi global memiliki kerugian berikut dibandingkan yang lokal:

  • Luau mengakses variabel dan fungsi global dengan pencarian hash, jadi itu mahal digunakan dalam hal kinerja. Menggunakan variabel global dalam loop yang kritis terhadap waktu dapat membuatnya berjalan lebih dari 10% lebih lambat dibandingkan menggunakan variabel lokal di dalam loop yang sama.
  • Luau membuang variabel lokal setelah lingkupnya berakhir, mengurangi penggunaan memori.
  • Anda dapat mengakses variabel dan fungsi global dalam skrip yang sama, tetapi tidak antara beberapa skrip. Oleh karena itu, variabel atau fungsi global tidak memberikan keuntungan dibandingkan dengan ekivalen lokal dalam lingkup, sebuah upvalue, atau shadow.

Lingkup lokal

Luau hanya dapat mengakses variabel atau fungsi lokal dalam blok kode di mana Anda mendeklarasikannya. Membuat variabel dengan lingkup lokal memberi Anda kontrol yang lebih ketat mengenai kapan dan di mana nilainya berubah.

Dalam kode berikut, fungsi testFunc() dan variabel testVar memiliki lingkup lokal. Hanya kode di dalam testFunc() yang dapat mengakses variabel testVar. Variabel testVar tidak memiliki nilai di luar testFunc(), jadi memanggil print(testVar) di dalam testFunc() mencetak nilai dari testVar, tetapi memanggil print(testVar) di luar testFunc() mencetak nil.


local function testFunc() -- lingkup lokal
local testVar = 64 -- lingkup lokal
print(testVar) -- 64
end
testFunc()
print(testVar) -- nil

Dalam kode berikut, variabel lokal x memiliki nilai 0 di baris 1. Ketika Luau melakukan iterasi melalui for loop, variabel lokal yang berbeda x memiliki nilai 1. Kemudian, Luau mencetak variabel awal x dengan nilai yang tidak berubah 0.


local x = 0 -- Variabel lokal "x"
for i = 1, 4 do
local x = 1 -- Variabel berbeda "x", lokal untuk "for" loop ini
print("Loop 'x' = " .. x)
end
print("Initial 'x' = " .. x)
--[[ Hasil keluaran:
Loop 'x' = 1
Loop 'x' = 1
Loop 'x' = 1
Loop 'x' = 1
Initial 'x' = 0
]]

Tangkap

Setelah Anda mendeklarasikan dan menetapkan variabel lokal, Anda dapat membacanya di tingkat lingkupnya dan fungsi-fungsi yang lingkupnya dilingkupi oleh lingkup yang sama yang berisi variabel lokal. Teknik ini dikenal sebagai menangkap.

Dalam kode berikut, fungsi f menangkap variabel lokal x. Variabel x dalam f() adalah sebuah upvalue.


local x = 5
local function f()
print(x)
end
f() -- 5
print(x) -- 5

Bayangan

Setelah Anda mendeklarasikan dan menetapkan variabel lokal, Anda dapat membacanya di tingkat lingkupnya dan tingkat lingkup keturunannya. Jika Anda mendeklarasikan ulang dan menetapkan variabel di tingkat lingkup keturunan, maka Anda menciptakan variabel lokal baru dengan nama yang sama tetapi nilai yang berbeda dari penetapan sebelumnya. Variabel lokal yang baru tidak mempengaruhi variabel lokal dari penetapan sebelumnya. Teknik ini, yang dikenal sebagai bayangan, membantu Anda menggunakan kembali nama variabel tanpa menggunakan kembali nilainya.

Dalam kode berikut, Luau membuat bayangan pada variabel x. Variabel x dalam f() adalah sebuah variabel bayangan.


local x = 5
local function f()
local x = 7
print(x)
end
f() -- 7
print(x) -- 5

Anda juga dapat mendeklarasikan ulang variabel lokal tanpa menetapkan nilai padanya sehingga Anda dapat menetapkan kembali variabel di tingkat lingkupnya dan tingkat lingkup keturunannya. Mendeklarasikan ulang variabel lokal tanpa menetapkan nilai padanya mengatur nilainya ke nil.

Dalam kode berikut, Luau membuat bayangan pada variabel lokal fruitName dalam fungsi getFruitByColor(). Fungsi ini mendeklarasikan fruitName sebagai variabel bayangan baru dan mengatur nilainya ke nil. Fungsi tersebut memiliki tingkat lingkup keturunan, sebuah for loop, yang menetapkan nilai pada fruitName. Setelah loop for, fungsi mengembalikan variabel bayangan fruitName. Sepanjang fungsi ini, fruitName adalah variabel lokal yang sama yang tidak menimpa variabel lokal fruitName yang awal.


local fruitName = "Cokelat"
local fruitTable = {
Lemon = "Kuning",
Apple = "Merah",
Orange = "Oranye"
}
local function getFruitByColor(color)
local fruitName
for key, value in fruitTable do
if value == color then
fruitName = key
end
end
return fruitName
end
local fruit = getFruitByColor("Kuning")
print(fruit) -- Lemon
print(fruit .. ", bukan " .. fruitName) -- Lemon, bukan Cokelat
©2026 Roblox Corporation. Roblox, logo Roblox, dan Powering Imagination termasuk dalam merek dagang kami yang terdaftar dan tidak terdaftar di AS dan negara lainnya.