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, kod bloklarıdır ve bunları komutla birden fazla kez çalıştırabilirsiniz. Ayrıca bunları olaylara bağlayabilir veya geri çağırmalar olarak atayabilirsiniz.

Temel fonksiyonlar

Bir fonksiyon tanımı şunları içerir:

  • Fonksiyonun kapsamı: global veya local (veya yeniden atayamayacağınız bir yerel fonksiyon için const).
  • function anahtar kelimesi.
  • Fonksiyonun adı camelCase formatında.
  • Fonksiyonun parametreleri parantez içinde (()).
  • Fonksiyonun kod bloğu veya "gövdesi".
  • end anahtar kelimesi.

Fonksiyonun gövdesi, fonksiyonu çağırdığınızda çalışır. Bir fonksiyonu çağırmak için, adını parantez ile birlikte yazın. Dönüş değerini kabul etmek için bir değişken tanımlayabilir veya dönüş değerini bir değişken yerine kullanabilirsiniz.

-- Bu fonksiyonun parametreleri yoktur ve nil döner
local function addOneAndTwo()
local result = 1 + 2
print(result)
end
-- Dönüş değeri olmayan bir fonksiyonu çağırma
addOneAndTwo() -- 3

Parametreler

Parametreler, fonksiyona sunduğunuz ve yalnızca fonksiyonun kapsamında kullanılan değişkenlerdir. Fonksiyonların varsayılan olarak parametreleri yoktur. Eğer bir fonksiyonu beklediğinden daha fazla parametre ile çağırırsanız, Luau fazladan parametreleri göz ardı eder. Eğer bir fonksiyonu beklediğinden daha az parametre ile çağırırsanız, Luau eksik olan tüm parametreler için nil geçirir.

-- Bu fonksiyonun iki parametresi 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) -- sayılar ve nil üzerinde aritmetik (toplama) yapma girişimi

Dönüş

Fonksiyonun gövdesinde, return anahtar kelimesi bir hesaplamadan bir sonuç döner. Bir fonksiyondan birden fazla değer dönebilirsiniz. return, fonksiyonun yürütülmesini sonlandırır ve Luau, return ifadelerinin ardından end anahtar kelimesinin gelmesini bekler, bu nedenle return komutu ile end komutu arasında kod yazmak bir hata oluşturur.

-- Bu fonksiyon bir dönüş değeri döner
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 fonksiyon birden fazla değer döner: toplam ve fark
local function addAndSubtract(num1, num2)
local sum = num1 + num2
local difference = num1 - num2
return sum, difference
end
-- Bir fonksiyonu çağırma ve birden fazla dönüş değeri bekleme
local sum, difference = addAndSubtract(2, 3)
print(sum) -- 5
print(difference) -- -1

Metotlar

Metotlar, bir nesnenin, örneğin bir sınıf veya tablo gibi, üyesi olan fonksiyonlardır. İlk argüman olarak nesnenin kendisini (self) beklerler. Bir metodu çağırdığınızda, self'i otomatik olarak ilk argüman olarak geçirmek için iki nokta (:) notasyonunu kullanın.

Roblox'taki tüm nesneler Instance'dan türetilmiştir ve Instance:Destroy(), Instance:Clone() ve Instance:FindFirstChild() gibi yaygın olarak kullanılan metodlara sahiptir.

local Workspace = game:GetService("Workspace")
-- Nokta notasyonu ile bir parçayı yok etme (fonksiyon)
local firstPart = Instance.new("Part")
firstPart.Parent = Workspace
print(firstPart.Parent) -- Workspace
firstPart.Destroy(firstPart)
print(firstPart.Parent) -- nil
-- İki nokta notasyonu ile bir parçayı yok etme (metot)
local secondPart = Instance.new("Part")
secondPart.Parent = Workspace
print(secondPart.Parent) -- Workspace
secondPart:Destroy()
print(secondPart.Parent) -- nil

Metotları tanımlama

Bir tabloda bir metot oluşturmak için, metodun adını anahtar olarak ve metot fonksiyonunu değer olarak kullanın. Metodun tanımında, self parametresi metodun ana tablosunu ifade eder. İki nokta notasyonu kullanarak bir metodu çağırdığınızda, tabloyu ilk argüman olarak geçirirsiniz. Bir metot için parametreler tanımlayabilirsiniz, ancak bunları self parametresinden sonra listelemeniz gerekir.

Aşağıdaki örnekte, testButton tablosu changeEnabled anahtarının değeri olarak bir metoda sahiptir. self'in metodun ana tablosunu ifade ettiğini doğrulamak için self.enabled değerini yazdırabilirsiniz.

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

Geri çağırmalar

Geri çağırmalar, başka bir fonksiyon veya süreçle yanıt olarak yürütülen fonksiyonlardır.

Temel geri çağırmalar

Fonksiyonlar, diğer fonksiyonlara geçirilebilir; örneğin, bir anonim fonksiyon, table.sort()'un Players listesini sıralamak için kullandığı bir geri çağırma olarak kullanılabilir.

local Players = game:GetService("Players")
local sortedPlayers = Players:GetPlayers()
table.sort(sortedPlayers, function(a, b)
-- Oyuncuları isimlerine göre sıralamak için anonim bir geri çağırma kullan
return a.Name < b.Name
end)

Roblox API'sinde, geri çağırmalar yazma-yalnızca bir fonksiyon üyesini ifade eder, geri çağırmalar döndüklerinde bekletilir. Yaygın olarak kullanılan geri çağırmalar şunlardır:

Bir geri çağırma ayarlamak için, ona bir fonksiyon atayın. Örneğin, BindableFunction.OnInvoke, BindableFunction'ın bir geri çağırmasıdır. Ona bir adlandırılmış veya anonim fonksiyon atayabilirsiniz ve bu fonksiyonu geri çağırma üzerinde :Invoke() metodunu çağırarak (çağırarak) çağırabilirsiniz. :Invoke()'ya geçirdiğiniz argümanlar geri çağırmaya iletilir ve geri çağırma fonksiyonunun dönüş değeri :Invoke()'nun çağrıcısına döner.

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

Fonksiyon teknikleri

Olay işleyicileri

Bir olay tetiklendiğinde çalıştırılacak bir fonksiyonu, olay işleyici olarak atayabilirsiniz. Örneğin, Players.PlayerAdded olayına onPlayerAdded() adında bir fonksiyon oluşturarak, katılan oyuncunun adını yazdırabilirsiniz. Daha fazla bilgi için Olaylar sayfasına bakın.

local Players = game:GetService("Players")
local function onPlayerAdded(player)
print(player.Name .. " oyuna katıldı!")
end
Players.PlayerAdded:Connect(onPlayerAdded)

Anonim fonksiyonlar

Anonim fonksiyonlar olarak bilinen isimlendirilmemiş fonksiyonlar oluşturabilir ve bunları geri çağırmalar ve olay işleyicileri olarak kullanabilirsiniz. İsimlendirilmiş fonksiyonlar gibi, anonim fonksiyonlar da function ve end anahtar kelimeleri ile başlamalı ve bitmelidir, ancak her zaman yerel kapsamda oldukları için yerel kapsamı belirtmek için local anahtar kelimesine ihtiyacınız yoktur.

Aşağıdaki örnekte, task.delay() fonksiyonu için geri çağırma ve Players.PlayerAdded olayı için olay işleyici her ikisi de anonim fonksiyonlardır.

-- task.delay() fonksiyonunda bir geri çağırma olarak anonim fonksiyon
task.delay(2, function(exactTimeElapsed)
print(exactTimeElapsed) -- 2.0064592329945
end)
-- Olay işleyici olarak anonim fonksiyon
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
print(player.Name .. " oyuna katıldı!")
end)

Modül scriptlerinde fonksiyonlar

Fonksiyonları ModuleScripts içinde saklayarak birden fazla scriptte yeniden kullanabilirsiniz. Fonksiyonlar, Luau veri türü olduğundan, diğer verilerle birlikte tablolarda saklayabilirsiniz.

Variadik fonksiyonlar

Variadik bir fonksiyon, herhangi bir sayıda argümanı kabul eder. Örneğin, Globals.LuaGlobals.print() bir variadik fonksiyondur.

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

Variadik fonksiyonları tanımlama

Bir variadik fonksiyon tanımlamak için, son veya tek parametre olarak ... tokenını kullanırsınız (bu, .., bir birleştirme operatörü ile karıştırılmamalıdır). Kullanımı kolay olması için ... değerlerini bir tabloda toplayabilirsiniz.

local function variadic(named, ...)
local arguments = {...} -- ek argümanları bir tabloya paketle
print("İsimli argüman =", named)
for i, value in arguments do
print("Girdi No.", i, "=", value)
end
end
variadic(10, "Merhaba", 20, "Variadik Fonksiyon")
--[[ Sonuç çıktısı:
İsimli argüman = 10
Girdi No. 1 = Merhaba
Girdi No. 2 = 20
Girdi No. 3 = Variadik Fonksiyon
]]

Argümanları iletme

Variadik fonksiyonları, argümanları sarmalayıp diğer fonksiyonlara iletmek veya aktarmak için sarmalayıcılar olarak tanımlayabilirsiniz.

local function printAround(functionToPrintAround, ...)
print("Önce")
functionToPrintAround(...)
print("Sonra")
end
local function addNumbers(x, y, z)
print("x =", x)
print("y + z =", y + z)
end
printAround(addNumbers, 1, 2, 3)
--[[ Sonuç çıktısı:
Önce
x = 1
y + z = 5
Sonra
]]

Bir variadik fonksiyonu dizilerle çağırma

Bir tablo dizisi değerini global bir variadik fonksiyona, örneğin print()'e geçirmek istiyorsanız, tabloyu değil, tablonun değerlerini geçirmek için global unpack() fonksiyonunu kullanabilirsiniz.

local squares = {1, 4, 9, 16, 25}
print("İlk 5 kare sayısı:", unpack(squares))
-- İlk 5 kare sayısı 1 4 9 16 25
©2026 Roblox Corporation. Roblox, the Roblox logo and Powering Imagination are among our registered and unregistered trademarks in the U.S. and other countries.