ฟังก์ชัน

*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่

ฟังก์ชัน คือ บล็อกของโค้ด ที่คุณสามารถเรียกใช้ได้หลายครั้งตามคำสั่ง คุณยังสามารถเชื่อมโยงฟังก์ชันกับ เหตุการณ์ หรือกำหนดให้เป็น callback

ฟังก์ชันพื้นฐาน

การกำหนดฟังก์ชันประกอบด้วย:

  • ขอบเขต ของฟังก์ชัน: ทั่วไปหรือ local (หรือ const สำหรับฟังก์ชันท้องถิ่นที่ไม่สามารถเปลี่ยนชื่อได้)
  • คำสำคัญ function
  • ชื่อของฟังก์ชันในรูปแบบ camelCase
  • พารามิเตอร์ของฟังก์ชันในวงเล็บ (())
  • บล็อกของโค้ด หรือ "เนื้อหา" ของฟังก์ชัน
  • คำสำคัญ end

เนื้อหาของฟังก์ชันจะทำงานเมื่อคุณเรียกฟังก์ชันนั้น เพื่อเรียกฟังก์ชัน ให้พิมพ์ชื่อของมันตามด้วยวงเล็บ คุณสามารถกำหนดตัวแปรเพื่อรับค่าที่ส่งกลับหรือใช้ค่าที่ส่งกลับแทนตัวแปร

-- ฟังก์ชันนี้ไม่มีพารามิเตอร์และส่งกลับ nil
local function addOneAndTwo()
local result = 1 + 2
print(result)
end
-- เรียกฟังก์ชันโดยไม่มีการส่งกลับ
addOneAndTwo() -- 3

พารามิเตอร์

พารามิเตอร์คือ ตัวแปรที่คุณทำให้สามารถใช้งานได้ในฟังก์ชันและใช้เฉพาะใน ขอบเขต ของฟังก์ชัน ฟังก์ชันไม่มีพารามิเตอร์ตามค่าเริ่มต้น หากคุณเรียกฟังก์ชันด้วยพารามิเตอร์มากกว่าที่คาดไว้ Luau จะละเว้นพารามิเตอร์ที่เกิน หากคุณเรียกฟังก์ชันด้วยพารามิเตอร์น้อยกว่าที่คาดไว้ Luau จะส่ง nil สำหรับพารามิเตอร์ที่ขาดหายไปทั้งหมด

-- ฟังก์ชันนี้มีพารามิเตอร์สองตัว: num1 และ num2
local function addNumbers(num1, num2)
print(num1 + num2)
end
addNumbers(2, 3) -- 5
addNumbers(5, 6, 7) -- 11
addNumbers(9) -- พยายามทำการคำนวณ (บวก) กับหมายเลขและ nil

การส่งกลับ

ในเนื้อหาของฟังก์ชัน คำสำคัญ return จะส่งค่าผลลัพธ์จากการคำนวณ คุณสามารถส่งค่าหลายค่าออกจากฟังก์ชันหนึ่งได้ return จะสิ้นสุดการทำงานของฟังก์ชัน และ Luau คาดหวังให้คำสำคัญ end ตามหลังคำสั่ง return ดังนั้นการเขียนโค้ดระหว่างคำสั่ง return และคำสั่ง end จะทำให้เกิดข้อผิดพลาด

-- ฟังก์ชันนี้ส่งกลับค่าผลลัพธ์หนึ่งค่า
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
-- ฟังก์ชันนี้ส่งกลับค่าหลายค่า: ผลรวมและผลต่าง
local function addAndSubtract(num1, num2)
local sum = num1 + num2
local difference = num1 - num2
return sum, difference
end
-- เรียกฟังก์ชันและคาดหวังค่าผลลัพธ์หลายค่า
local sum, difference = addAndSubtract(2, 3)
print(sum) -- 5
print(difference) -- -1

เมธอด

เมธอดคือฟังก์ชันที่เป็นสมาชิกของวัตถุ เช่น คลาส หรือ ตาราง เมธอดคาดหวังว่าวัตถุเอง (self) จะเป็นอาร์กิวเมนต์แรก เมื่อคุณเรียกเมธอด ให้ใช้การเขียนด้วยเครื่องหมายสองจุด (:) แทนการเขียนด้วยจุด (.) เพื่อส่ง self เป็นอาร์กิวเมนต์แรกโดยอัตโนมัติ

วัตถุทั้งหมดใน Roblox สืบทอดมาจาก Instance และมีเมธอดที่ใช้บ่อยรวมถึง Instance:Destroy(), Instance:Clone(), และ Instance:FindFirstChild()

local Workspace = game:GetService("Workspace")
-- ทำลายส่วนด้วยการเขียนด้วยจุด (ฟังก์ชัน)
local firstPart = Instance.new("Part")
firstPart.Parent = Workspace
print(firstPart.Parent) -- Workspace
firstPart.Destroy(firstPart)
print(firstPart.Parent) -- nil
-- ทำลายส่วนด้วยการเขียนด้วยเครื่องหมายสองจุด (เมธอด)
local secondPart = Instance.new("Part")
secondPart.Parent = Workspace
print(secondPart.Parent) -- Workspace
secondPart:Destroy()
print(secondPart.Parent) -- nil

การกำหนดเมธอด

ในการสร้างเมธอดในตาราง ให้ใช้ชื่อของเมธอดเป็นกุญแจและฟังก์ชันเมธอดเป็นค่า ในการกำหนดเมธอด คำสำคัญ self จะหมายถึงตารางแม่ของเมธอด เมื่อคุณเรียกเมธอดโดยใช้การเขียนด้วยเครื่องหมายสองจุด คุณจะส่งตารางเองเป็นอาร์กิวเมนต์แรก คุณสามารถกำหนดพารามิเตอร์สำหรับเมธอดได้ แต่คุณต้องระบุพวกมันหลังจากพารามิเตอร์ self

ในตัวอย่างต่อไปนี้ ตาราง testButton มีเมธอดเป็นค่าของกุญแจ changeEnabled คุณสามารถตรวจสอบว่า self หมายถึงตารางแม่ของเมธอดโดยการพิมพ์ค่าของ self.enabled

local testButton = {
enabled = true,
changeEnabled = function(self, isEnabled)
self.enabled = isEnabled
print(self.enabled)
end
}
print(testButton.enabled) -- true
-- เรียกเมธอด
testButton:changeEnabled(false) -- false

Callback

Callback คือฟังก์ชันที่ทำงานเพื่อตอบสนองต่อฟังก์ชันหรือกระบวนการอื่น

Callback พื้นฐาน

ฟังก์ชันสามารถถูกส่งไปยังฟังก์ชันอื่นได้ ตัวอย่างเช่น ฟังก์ชัน anonymous สามารถใช้เพื่อดำเนินการ callback ที่ table.sort() จะใช้ในการจัดเรียงรายการของ Players จาก Players.GetPlayers()

local Players = game:GetService("Players")
local sortedPlayers = Players:GetPlayers()
table.sort(sortedPlayers, function(a, b)
-- ใช้ callback แบบ anonymous เพื่อจัดเรียงผู้เล่นตามชื่อ
return a.Name < b.Name
end)

ใน API ของ Roblox, callback หมายถึงสมาชิกฟังก์ชันที่เขียนได้เท่านั้น, callback จะหยุดทำงานจนกว่าจะส่งกลับ ฟังก์ชัน callback ที่ใช้บ่อยรวมถึง:

  • MarketplaceService.ProcessReceipt ซึ่งจัดการการซื้อผลิตภัณฑ์ของนักพัฒนา
  • BindableFunction.OnInvoke ซึ่งเรียกฟังก์ชันเมื่อสคริปต์เรียก BindableFunction:Invoke(...)
  • RemoteFunction.OnClientInvoke ซึ่งเรียกฟังก์ชันเมื่อเซิร์ฟเวอร์เรียก RemoteFunction:FireClient(player, ...) หรือ RemoteFunction:FireAllClients(...)
  • RemoteFunction.OnServerInvoke ซึ่งเรียกฟังก์ชันเมื่อไคลเอนต์เรียก RemoteFunction:InvokeServer(...)

ในการตั้งค่า callback ให้กำหนดฟังก์ชันให้กับมัน ตัวอย่างเช่น BindableFunction.OnInvoke เป็น callback ของ BindableFunction คุณสามารถตั้งค่าฟังก์ชันที่มีชื่อหรือ anonymous ให้กับมัน และคุณสามารถเรียก (invoke) ฟังก์ชันนั้นโดยการเรียกใช้เมธอด :Invoke() บน callback อาร์กิวเมนต์ที่คุณส่งไปยัง :Invoke() จะถูกส่งต่อไปยัง callback และค่าที่ส่งกลับจากฟังก์ชัน callback จะส่งกลับไปยังผู้เรียก :Invoke()

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

เทคนิคฟังก์ชัน

ตัวจัดการเหตุการณ์

คุณสามารถกำหนดฟังก์ชันที่เรียกว่า ตัวจัดการเหตุการณ์ เพื่อทำงานเมื่อเกิดเหตุการณ์ ตัวอย่างเช่น คุณสามารถสร้างฟังก์ชันที่เรียกว่า onPlayerAdded() สำหรับเหตุการณ์ Players.PlayerAdded เพื่อพิมพ์ชื่อของผู้เล่นที่เข้าร่วมเกม สำหรับข้อมูลเพิ่มเติม ดูที่ เหตุการณ์

local Players = game:GetService("Players")
local function onPlayerAdded(player)
print(player.Name .. " เข้าร่วมเกม!")
end
Players.PlayerAdded:Connect(onPlayerAdded)

ฟังก์ชัน anonymous

คุณสามารถสร้างฟังก์ชันที่ไม่มีชื่อ ซึ่งเรียกว่า ฟังก์ชัน anonymous เพื่อใช้เป็น callback และ ตัวจัดการเหตุการณ์ เช่นเดียวกับฟังก์ชันที่มีชื่อ ฟังก์ชัน anonymous ต้องเริ่มต้นและสิ้นสุดด้วยคำสำคัญ function และ end แต่คุณไม่จำเป็นต้องใช้คำสำคัญ local เพื่อระบุขอบเขตท้องถิ่นเพราะมันมีขอบเขตท้องถิ่นเสมอ

ในตัวอย่างต่อไปนี้ callback สำหรับฟังก์ชัน task.delay() และตัวจัดการเหตุการณ์สำหรับเหตุการณ์ Players.PlayerAdded เป็นฟังก์ชัน anonymous ทั้งคู่

-- ฟังก์ชัน anonymous ใน callback สำหรับ task.delay()
task.delay(2, function(exactTimeElapsed)
print(exactTimeElapsed) -- 2.0064592329945
end)
-- ฟังก์ชัน anonymous ในตัวจัดการเหตุการณ์
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
print(player.Name .. " เข้าร่วมเกม!")
end)

ฟังก์ชันในโมดูลสคริปต์

คุณสามารถนำฟังก์ชันมาใช้ซ้ำในหลายสคริปต์โดยการเก็บไว้ใน ModuleScripts ฟังก์ชันเป็นประเภทข้อมูล Luau ดังนั้นคุณสามารถเก็บไว้ในตารางพร้อมกับข้อมูลอื่น ๆ

ฟังก์ชัน variadic

ฟังก์ชัน variadic ยอมรับอาร์กิวเมนต์ได้ไม่จำกัดจำนวน ตัวอย่างเช่น Globals.LuaGlobals.print() เป็นฟังก์ชัน variadic

print(2, "+", 2, "=", 2 + 2) --2 + 2 = 4
print(string.format("เค้ก %s เป็น %s!", "เค้ก", "โกหก")) -- เค้กเป็นโกหก!
print(string.char(115, 101, 99, 114, 101, 116)) -- ความลับ

การกำหนดฟังก์ชัน variadic

ในการกำหนดฟังก์ชัน variadic คุณใช้โทเค็น ... เป็นพารามิเตอร์สุดท้ายหรือพารามิเตอร์เดียว (ไม่ควรสับสนกับ .., ตัวดำเนินการการเชื่อมต่อ operator) คุณสามารถใส่ค่า ... ลงในตารางเพื่อความสะดวกในการใช้งาน

local function variadic(named, ...)
local arguments = {...} -- บรรจุอาร์กิวเมนต์เพิ่มเติมลงในตาราง
print("อาร์กิวเมนต์ที่ตั้งชื่อ =", named)
for i, value in arguments do
print("หมายเลขอินพุต.", i, "=", value)
end
end
variadic(10, "สวัสดี", 20, "ฟังก์ชัน Variadic")
--[[ ผลลัพธ์ที่ได้:
อาร์กิวเมนต์ที่ตั้งชื่อ = 10
หมายเลขอินพุต. 1 = สวัสดี
หมายเลขอินพุต. 2 = 20
หมายเลขอินพุต. 3 = ฟังก์ชัน Variadic
]]

การส่งต่ออาร์กิวเมนต์

คุณสามารถกำหนดฟังก์ชัน variadic เป็น wrapper รอบฟังก์ชันอื่น ๆ เพื่อส่งต่ออาร์กิวเมนต์จาก wrapper ไปยังฟังก์ชันอื่น ๆ

local function printAround(functionToPrintAround, ...)
print("ก่อน")
functionToPrintAround(...)
print("หลัง")
end
local function addNumbers(x, y, z)
print("x =", x)
print("y + z =", y + z)
end
printAround(addNumbers, 1, 2, 3)
--[[ ผลลัพธ์ที่ได้:
ก่อน
x = 1
y + z = 5
หลัง
]]

เรียกฟังก์ชัน variadic ด้วยอาร์เรย์

หากคุณต้องการส่งอาร์เรย์ตารางของค่าไปยังฟังก์ชัน variadic ทั่วไป เช่น print() คุณสามารถใช้ฟังก์ชัน unpack() ของ global เพื่อส่งค่าของตารางแทนที่จะส่งตารางเอง

local squares = {1, 4, 9, 16, 25}
print("ตัวเลขสี่เหลี่ยม 5 ตัวแรกคือ:", unpack(squares))
-- ตัวเลขสี่เหลี่ยม 5 ตัวแรกคือ 1 4 9 16 25
©2026 Roblox Corporation. Roblox, โลโก้ Roblox และ Powering Imagination เป็นส่วนหนึ่งของเครื่องหมายการค้าที่จดทะเบียน และไม่ได้จดทะเบียนของเราในสหรัฐฯ และประเทศอื่นๆ