Roblox ใช้ภาษาโปรแกรม Luau ตัวอย่างโค้ดและตารางต่อไปนี้แสดงความแตกต่างบางประการระหว่างไวยากรณ์ของ C# และ Luau
การขึ้นบรรทัด
คุณไม่ต้องใช้เซมิโคลอนใน Luau แต่ก็ไม่ทำให้เกิดข้อผิดพลาดในไวยากรณ์
คำสำคัญที่สงวนไว้
ตารางต่อไปนี้แสดงคำสำคัญที่สงวนไว้ของ Luau ที่เปรียบเทียบกับคำที่เทียบเคียงได้ของ C# หมายเหตุว่าไม่แสดงคำสำคัญทั้งหมดของ C#
| Luau | C# |
|---|---|
| and | |
| break | break |
| do | do |
| if | if |
| else | else |
| elseif | else if |
| then | |
| end | |
| true | true |
| false | false |
| for | for หรือ foreach |
| function | |
| in | in |
| local | |
| nil | null |
| not | |
| or | |
| repeat | |
| return | return |
| until | |
| while | while |
ความคิดเห็น
-- ความคิดเห็นบรรทัดเดียว
--[[ ผลลัพธ์ที่ได้:
ความคิดเห็นหลายบรรทัด
--]]// ความคิดเห็นบรรทัดเดียว
/*
ความคิดเห็นหลายบรรทัด
*/สายอักขระ
-- สายอักขระหลายบรรทัด
local multiLineString = [[นี่คือสายอักขระที่,
เมื่อพิมพ์จะแสดง
อยู่ในหลายบรรทัด]]
-- การต่อสายอักขระ
local s1 = "นี่คือสายอักขระ "
local s2 = "สร้างด้วยสองส่วน."
local endString = s1 .. s2// สายอักขระหลายบรรทัด
string multiLineString1 = "นี่คือสายอักขระที่,\nเมื่อพิมพ์จะแสดง\nอยู่ในหลายบรรทัด.";
string multiLineString2 = @"นี่คือสายอักขระที่,
เมื่อพิมพ์จะแสดง
อยู่ในหลายบรรทัด";
// การต่อสายอักขระ
string s1 = "นี่คือสายอักขระ ";
string s2 = "สร้างด้วยสองส่วน.";
string endString = s1 + s2;ตาราง
หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับตารางใน Luau ให้ดูที่ ตาราง.
ตารางพจนานุกรม
คุณสามารถใช้ตารางใน Luau เป็นพจนานุกรมเหมือนกับใน C#.
local dictionary = {
val1 = "นี่",
val2 = "คือ"
}
print(dictionary.val1) -- แสดงผล 'นี่'
print(dictionary["val1"]) -- แสดงผล 'นี่'
dictionary.val1 = nil -- ลบ 'val1' ออกจากตาราง
dictionary["val3"] = "พจนานุกรม" -- เขียนทับ 'val3' หรือกำหนดคู่คีย์-ค่าใหม่Dictionary dictionary = new Dictionary()
{
{ "val1", "นี่" },
{ "val2", "คือ" }
};
Console.WriteLine(dictionary["val1"]); // แสดงผล 'นี่'
dictionary.Remove("val1"); // ลบ 'val1' ออกจากพจนานุกรม
dictionary["val3"] = "พจนานุกรม"; // เขียนทับ 'val3' หรือกำหนดคู่คีย์-ค่าใหม่
dictionary.Add("val3", "พจนานุกรม"); // สร้างคู่คีย์-ค่าใหม่ตารางหมายเลข
คุณสามารถใช้ตารางใน Luau เป็นอาเรย์เหมือนกับใน C#. ดัชนีเริ่มต้นที่ 1 ใน Luau และ 0 ใน C#.
local npcAttributes = {"แข็งแกร่ง", "ฉลาด"}
print(npcAttributes[1]) -- แสดงผล 'แข็งแกร่ง'
print(#npcAttributes) -- แสดงขนาดของรายการ
-- เพิ่มลงในรายการ
table.insert(npcAttributes, "อ่อนน้อม")
-- อีกวิธี...
npcAttributes[#npcAttributes+1] = "อ่อนน้อม"
-- แทรกที่จุดเริ่มต้นของรายการ
table.insert(npcAttributes, 1, "กล้าหาญ")
-- ลบรายการที่ดัชนีที่กำหนด
table.remove(npcAttributes, 3)List npcAttributes = new List{"แข็งแกร่ง", "ฉลาด"};
Console.WriteLine(npcAttributes[0]); // แสดงผล 'แข็งแกร่ง'
Console.WriteLine(npcAttributes.Count); // แสดงขนาดของรายการ
// เพิ่มลงในรายการ
npcAttributes.Add("อ่อนน้อม");
// อีกวิธี...
npcAttributes.Insert(npcAttributes.Count, "อ่อนน้อม");
// แทรกที่จุดเริ่มต้นของรายการ
npcAttributes.Insert(0, "กล้าหาญ");
// ลบรายการที่ดัชนีที่กำหนด
npcAttributes.Remove(2);ตัวดำเนินการ
ตัวดำเนินการเงื่อนไข
| ตัวดำเนินการ | Luau | C# |
|---|---|---|
| เท่ากัน | == | == |
| มากกว่า | > | > |
| น้อยกว่า | < | < |
| มากกว่าหรือเท่ากับ | >= | >= |
| น้อยกว่าหรือเท่ากับ | <= | <= |
| ไม่เท่ากัน | ~= | != |
| และ | and | && |
| หรือ | or | || |
ตัวดำเนินการทางคณิตศาสตร์
| Luau | C# | |
|---|---|---|
| การบวก | + | + |
| การลบ | - | - |
| การคูณ | * | * |
| การหาร | / | / |
| โมดูลัส | % | % |
| การยกกำลัง | ^ | ** |
ตัวแปร
ใน Luau ตัวแปรจะไม่ระบุประเภทเมื่อคุณประกาศไว้ ตัวแปรใน Luau ไม่มีตัวระบุการเข้าถึง แม้ว่าคุณอาจใช้สัญลักษณ์ขีดล่างนำหน้าตัวแปร "ส่วนตัว" เพื่อให้เข้าใจง่ายขึ้น
local stringVariable = "ค่า"
-- การประกาศ "สาธารณะ"
local variableName
-- การประกาศ "ส่วนตัว" - ประมวลผลในลักษณะเดียวกัน
local _variableNamestring stringVariable = "ค่า";
// การประกาศสาธารณะ
public string variableName
// การประกาศส่วนตัว
string variableName;ขอบเขต
ใน Luau คุณสามารถเขียนตัวแปรและตรรกะในขอบเขตที่แน่นกว่าฟังก์ชันหรือคลาสของพวกเขาโดยการซ้อนตรรกะภายใน do และ end คำสำคัญ ซึ่งคล้ายกับวงเล็บปีกกา {} ใน C# สำหรับรายละเอียดเพิ่มเติมโปรดดูที่ ขอบเขต.
local outerVar = 'ข้อความขอบเขตภายนอก'
do
-- แก้ไข 'outerVar'
outerVar = 'ข้อความขอบเขตภายในถูกแก้ไข'
-- แนะนำตัวแปรท้องถิ่น
local innerVar = 'ข้อความขอบเขตภายใน'
print('1: ' .. outerVar) -- แสดงผล "1: ข้อความขอบเขตภายในถูกแก้ไข"
print('2: ' .. innerVar) -- แสดงผล "2: ข้อความขอบเขตภายใน"
end
print('3: ' .. outerVar) -- แสดงผล "3: ข้อความขอบเขตภายในถูกแก้ไข"
// การพยายามพิมพ์ 'innerVar' ที่นี่จะล้มเหลวvar outerVar = "ข้อความขอบเขตภายนอก";
{
// แก้ไข 'outerVar'
outerVar = "ข้อความขอบเขตภายในถูกแก้ไข";
// แนะนำตัวแปรท้องถิ่น
var innerVar = "ข้อความขอบเขตภายใน";
Console.WriteLine("1: " + outerVar); // แสดงผล "1: ข้อความขอบเขตภายในถูกแก้ไข"
Console.WriteLine("2: " + innerVar); // แสดงผล "2: ข้อความขอบเขตภายใน"
}
Console.WriteLine("3: " + outerVar); // แสดงผล "3: ข้อความขอบเขตภายในถูกแก้ไข"
// การพยายามพิมพ์ 'innerVar' ที่นี่จะล้มเหลวคำสั่งเงื่อนไข
-- เงื่อนไขเดียว
if boolExpression then
doSomething()
end
-- หลายเงื่อนไข
if not boolExpression then
doSomething()
elseif otherBoolExpression then
doSomething()
else
doSomething()
end// เงื่อนไขเดียว
if (boolExpression) {
doSomething();
}
// หลายเงื่อนไข
if (!boolExpression) {
doSomething();
}
else if (otherBoolExpression) {
doSomething();
}
else {
doSomething();
}ตัวดำเนินการเงื่อนไข
local max = if x > y then x else yint max = (x > y) ? x : y;การวนรอบ
หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับการวนรอบใน Luau ให้ดูที่ โครงสร้างควบคุม.
วนรอบ while และ repeat
while boolExpression do
doSomething()
end
repeat
doSomething()
until not boolExpressionwhile (boolExpression) {
doSomething();
}
do {
doSomething();
} while (boolExpression)วนรอบ for
-- วนรอบไปข้างหน้า
for i = 1, 10 do
doSomething()
end
-- วนรอบย้อนกลับ
for i = 10, 1, -1 do
doSomething()
end// วนรอบไปข้างหน้า
for (int i = 1; i <= 10; i++) {
doSomething();
}
// วนรอบย้อนกลับ
for (int i = 10; i >= 1; i--) {
doSomething();
}local abcList = {"a", "b", "c"}
for i, v in ipairs(abcList) do
print(v)
end
local abcDictionary = { a=1, b=2, c=3 }
for k, v in pairs(abcDictionary) do
print(k, v)
endList<string> abcList = new List<string>{"a", "b", "c"};
foreach (string v in abcList) {
Console.WriteLine(v);
}
Dictionary<string, int> abcDictionary = new Dictionary<string, int>
{ {"a", 1}, {"b", 2}, {"c", 3} };
foreach (KeyValuePair<string, int> entry in abcDictionary) {
Console.WriteLine(entry.Key + " " + entry.Value);
}Luau ยังสนับสนุน การวนซ้ำทั่วไป ซึ่งช่วยให้ทำงานกับตารางได้ง่ายขึ้นอีก
ฟังก์ชัน
หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับฟังก์ชันใน Luau ให้ดูที่ ฟังก์ชัน.
ฟังก์ชันทั่วไป
-- ฟังก์ชันทั่วไป
local function increment(number)
return number + 1
end// ฟังก์ชันทั่วไป
int increment(int number) {
return number + 1;
}จำนวนตัวแปรอาร์กิวเมนต์
-- จำนวนตัวแปรอาร์กิวเมนต์
local function variableArguments(...)
print(...)
end// จำนวนตัวแปรอาร์กิวเมนต์
void variableArguments(params string[] inventoryItems) {
for (item in inventoryItems) {
Console.WriteLine(item);
}
}อาร์กิวเมนต์ที่ตั้งชื่อ
-- อาร์กิวเมนต์ที่ตั้งชื่อ
local function namedArguments(args)
return args.name .. "'s birthday: " .. args.dob
end
namedArguments{name="Bob", dob="4/1/2000"}// อาร์กิวเมนต์ที่ตั้งชื่อ
string namedArguments(string name, string dob) {
return name + "'s birthday: " + dob;
}
namedArguments(name: "Bob", dob: "4/1/2000");โครงสร้าง try-catch
local function fireWeapon()
if not weaponEquipped then
error("ไม่มีอาวุธติดตั้ง!")
end
-- ดำเนินการต่อ...
end
local success, errorMessage = pcall(fireWeapon)
if not success then
print(errorMessage)
endvoid fireWeapon() {
if (!weaponEquipped) {
// ใช้ข้อยกเว้นที่ผู้ใช้กำหนด
throw new InvalidWeaponException("ไม่มีอาวุธติดตั้ง!");
}
// ดำเนินการต่อ...
}
try {
fireWeapon();
} catch (InvalidWeaponException ex) {
// ยกเว้นถูกเรียกขึ้น
}