Fonksiyonlar

*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.

Fonksiyonlar komut işlemlerinde birden fazla kez yürütülebilen kod bloklarıdır. Onları da etkinlikler veya 0>geri çağrılar0> olarak bağlayabilirsiniz.

Basit Fonksiyonlar

Bir işlev tanımı içerir:

  • Fonksiyonun kapsayıcısı (genel veya local olarak).
  • The function keyword.
  • camelCase içindeki işlevin adı.
  • Ebeveyn olarak işlevin parametreleri (()).
  • İşlevin "vücut" (kod bloku)
  • The end keyword.

İşlevin vücudu, işlevi çağırdığınızda yürür. Bir işlevi çağırmak için, onun adını ebeveyn parçalarından sonra yazın. Bir değeri kabul etmek için bir çeşit yerine kullanımını kullanabilirsiniz.


-- Bu işlevin hiç parçası yoktur ve hiçbir şeyi dönüştürmez
local function addOneAndTwo()
local result = 1 + 2
print(result)
end
-- Geri dönüş olmadan bir işlev çağırılması
addOneAndTwo() -- 3

Parametreler

Parametreler, işlevin içinde kullanılabilen değişkenlerdir ve sadece işlevin alanında kullanılır. İşlevlerin varsayılan olarak hiçbir parametresi yoktur. Eğer beklediğinden daha fazla parametre alırsa, Luau ekstra parametreleri görmezden gelir. Eğer beklediğinden daha az parametre alırsa, Luau nil</


-- Bu işlevin iki parçası vardır: num1 ve num2
local function addNumbers(num1, num2)
print(num1 + num2)
end
addNumbers(2, 3) -- 5
addNumbers(5, 6, 7) -- 11
addNumbers(9) -- attempt to perform arithmetic (add) on number and nil

DÖNÜŞ

İşlevin vücudunda, return kelimesi bir hesabın sonucunu iade eder. Bir işlevden birden fazla değer iade edebilirsiniz. return kelimesi işlevin ifadesini bitirir ve Luau, end kelimesini takip eder,


-- Bu işlev bir dönüş değeri döndürür
local function addNumbers(num1, num2)
local result = num1 + num2
return result
end
print(addNumbers(1, 2)) -- 3
local seven = addNumbers(3, 4)
print(seven) -- 7
-- Bu işlev çeşitli değerleri döndürür: toplama ve fark
local function addAndSubtract(num1, num2)
local sum = num1 + num2
local difference = num1 - num2
return sum, difference
end
-- Bir işlev çağırıp birden fazla dönüş değeri beklemek
local sum, difference = addAndSubtract(2, 3)
print(sum) -- 5
print(difference) -- -1

Yöntemler

Yöntemler bir nesnenin üyesi olan bir fonksiyon, örneğin bir klas veya bir tablo . Onlar, nesnenin kendisi ( self ) olarak ilk argümanı bekler. Bir yöntemi çağırdığınızda, doldan değil, kolon notasyonunu (

Roblox'daki tüm nesneler Instance 'den aşağıya iner ve yaygın olarak kullanılan yöntemleri içerir, bunlar arasında Instance:Destroy(), Instance:Clone() ve 1>Class.Instance:FindFirstChild()1> .


-- Bir Parçayı dot notu ile yok etme (fonksiyon)
local firstPart = Instance.new("Part")
firstPart.Parent = workspace
print(firstPart.Parent) -- Çalışma Alanı
firstPart.Destroy(firstPart)
print(firstPart.Parent) -- hiç
-- Bir Parçayı kolon notu ile yok etme (yöntem)
local secondPart = Instance.new("Part")
secondPart.Parent = workspace
print(secondPart.Parent) -- Çalışma Alanı
secondPart:Destroy()
print(secondPart.Parent) -- nil

Yöntemleri Tanımlama

Bir tabloda bir metod oluşturmak için, metodun anahtarı olarak metodun ismini kullanın ve metod işlevi değer olarak değer. Metodun definisyonunda, self parametresi metodun ebeveyn tabelasına işaret eder. Bir metodu kolon notu ile çağırırken, metodun ilk argümanı olarak tab

Aşağıdaki örnekte, testButton tabelasının bir değeri olarak changeEnabled anahtarının değerini içerir. self ile metodun ebeveyn tabelasını yazdırarak değerin 2> self.enabled2> ile ilgili olduğunu doğrulayabilirsiniz.


local testButton = {
enabled = true,
changeEnabled = function(self, isEnabled)
self.enabled = isEnabled
print(self.enabled)
end
}
print(testButton.enabled) -- doğru
-- Yöntemi çağır
testButton:changeEnabled(false) -- false

Çağrılar

Çağrılar diğer bir işlev veya sürece yanıt olarak çalıştıran işlevlerdir.

Basit Çağrılar

Fonksiyonlar diğer fonksiyonlara geçilir, örneğin, bir anonymous fonksiyonu bir table.sort() çağrısını uygulamak için kullanılabilir, ardından kullanıcı bir Players listesini 2>Class.Players.GetPlayers()2> ile eşleştirir.


local Players = game:GetService("Players")
local sortedPlayers = Players:GetPlayers()
table.sort(sortedPlayers, function(a, b)
-- Oyuncuları isim sırasında sıralamak için anonim bir çağrı kullanın
return a.Name < b.Name
end)

Roblox API'sinde, çağrılar sadece yazma işlevi üyesine işaret eder, çağrılar dönene kadar verir. Geniş olarak kullanılan çağrılar şunları içerir:

Bir çağrıyı ayarlamak için, bir işlevi ona atayın. Örneğin, Class.BindableFunction.OnInvoke``Class.BindableFunction ın bir işlev


local bindableFunction = Instance.new("BindableFunction")
bindableFunction.OnInvoke = function(number)
return 2 * number
end
print(bindableFunction:Invoke(42)) -- 84

İşlevsel Teknikler

Etkinlik İşleyicileri

Bir etkinlik oluşturduğunda çalıştırmak için bir işlev atayabilirsiniz, bilinen bir etkinlik oluşturucu olarak etkinlik処理器 . Örneğin, onPlayerAdded() etkinliğine bir işlev oluşturabilirsiniz, ismi herhangi bir oyuncunun katılımını yazdurmak için. Daha faz


local Players = game:GetService("Players")
local function onPlayerAdded(player)
print(player.Name .. " joined the game!")
end
Players.PlayerAdded:Connect(onPlayerAdded)

Anonim Fonksiyonlar

İsimsiz işlevler oluşturabilirsiniz, bunlara anonymous işlevler olarak bilinir, kullanılabilir çağrılar ve etkinlik işleyicileri olarak. Adlandırılmış işlevler gibi, anonim işlevlerin başlangıcı ve bitmes

Aşağıdaki örnekte, task.delay() işlevi için çağrı ve Players.PlayerAdded etkinliğinin işleyicisi her ikisi de anonim işlevlerdir.


-- Çağrıya göre anonim işlev task.延迟()
task.delay(2, function(exactTimeElapsed)
print(exactTimeElapsed) -- 2.0064592329945
end)
-- Bir etkinlik işleyicinde anonim işlev
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
print(player.Name .. " joined the game!")
end)

ModuleScript'lerdeki Fonksiyonlar

Fonksiyonları ModuleScripts ile birden fazla scriptte tekrar kullanabilirsiniz. Fonksiyonlar bir Luau veri yaz, bu yüzden diğer verilerle tablolarda saklayabilirsiniz.

Çeşitli Fonksiyonlar

Bir çeşitli işlev herhangi bir sayıda argüman kabul eder. Örneğin, Globals.LuaGlobals.print() bir çeşitli işlevdir.


print(2, "+", 2, "=", 2 + 2) --2 + 2 = 4
print(string.format("The %s is a %s!", "cake", "lie")) -- Kek yalan!
print(string.char(115, 101, 99, 114, 101, 116)) -- secret

Çeşitli Fonksiyonları Tanımlama

Bir çeşitli işlevi tanımlamak için, son veya tek parametre olarak ... jetonunu kullanır (.. ile karıştırmayın). İşlevi kolaylık açısından kullanıcı tablosuna yazabilirsiniz.


local function variadic(named, ...)
local arguments = {...} -- ekstra argeleri bir tabloda birleştir
print("Named argument =", named)
for i, value in arguments do
print("Input No.", i, "=", value)
end
end
variadic(10, "Hi", 20, "Variadic Function")
--[[ Sonuç çıkışı:
Named argument = 10
Input No. 1 = Hi
Input No. 2 = 20
Input No. 3 = Variadic Function
]]

İddia İleriye

Wraper olarak diğer işlevleri tanımlayabilirsiniz, böylece başka işlevlerden argümanlarıWraper'a biletveya ilerletebilirsiniz.


local function printAround(functionToPrintAround, ...)
print("Before")
functionToPrintAround(...)
print("After")
end
local function addNumbers(x, y, z)
print("x =", x)
print("y + z =", y + z)
end
printAround(addNumbers, 1, 2, 3)
--[[ Sonuç çıkışı:
Before
x = 1
y + z = 5
After
]]

Matrislerle Bir Varyadik Fonksiyonun Çağrılması

Bir tablo matrisi değerleri global bir funktiona, örneğin print() gibi, kullanabilirsiniz global unpack() işlevi değerleri tablo yerine tablo itself değil.


local squares = {1, 4, 9, 16, 25}
print("The first 5 square numbers are:", unpack(squares))
-- The first 5 square numbers are 1 4 9 16 25