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 |
ความคิดเห็น
ความคิดเห็นใน Luau-- ความคิดเห็นบรรทัดเดียว--[[ ผลลัพธ์ที่ได้:ความคิดเห็นหลายบรรทัด--]]
ความคิดเห็นใน C#// ความคิดเห็นบรรทัดเดียว/*ความคิดเห็นหลายบรรทัด*/
สายอักขระ
สายอักขระใน Luau-- สายอักขระหลายบรรทัดlocal multiLineString = [[นี่คือสายอักขระที่,เมื่อพิมพ์จะแสดงอยู่ในหลายบรรทัด]]-- การต่อสายอักขระlocal s1 = "นี่คือสายอักขระ "local s2 = "สร้างด้วยสองส่วน."local endString = s1 .. s2
สายอักขระใน C#// สายอักขระหลายบรรทัดstring multiLineString1 = "นี่คือสายอักขระที่,\nเมื่อพิมพ์จะแสดง\nอยู่ในหลายบรรทัด.";string multiLineString2 = @"นี่คือสายอักขระที่,เมื่อพิมพ์จะแสดงอยู่ในหลายบรรทัด";// การต่อสายอักขระstring s1 = "นี่คือสายอักขระ ";string s2 = "สร้างด้วยสองส่วน.";string endString = s1 + s2;
ตาราง
หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับตารางใน Luau ให้ดูที่ ตาราง.
ตารางพจนานุกรม
คุณสามารถใช้ตารางใน Luau เป็นพจนานุกรมเหมือนกับใน C#.
ตารางพจนานุกรมใน Luaulocal dictionary = {val1 = "นี่",val2 = "คือ"}print(dictionary.val1) -- แสดงผล 'นี่'print(dictionary["val1"]) -- แสดงผล 'นี่'dictionary.val1 = nil -- ลบ 'val1' ออกจากตารางdictionary["val3"] = "พจนานุกรม" -- เขียนทับ 'val3' หรือกำหนดคู่คีย์-ค่าใหม่
ตารางพจนานุกรมใน C#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#.
ตารางหมายเลขใน Luaulocal npcAttributes = {"แข็งแกร่ง", "ฉลาด"}print(npcAttributes[1]) -- แสดงผล 'แข็งแกร่ง'print(#npcAttributes) -- แสดงขนาดของรายการ-- เพิ่มลงในรายการtable.insert(npcAttributes, "อ่อนน้อม")-- อีกวิธี...npcAttributes[#npcAttributes+1] = "อ่อนน้อม"-- แทรกที่จุดเริ่มต้นของรายการtable.insert(npcAttributes, 1, "กล้าหาญ")-- ลบรายการที่ดัชนีที่กำหนดtable.remove(npcAttributes, 3)
ตารางหมายเลขใน C#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 ไม่มีตัวระบุการเข้าถึง แม้ว่าคุณอาจใช้สัญลักษณ์ขีดล่างนำหน้าตัวแปร "ส่วนตัว" เพื่อให้เข้าใจง่ายขึ้น
ตัวแปรใน Luaulocal stringVariable = "ค่า"-- การประกาศ "สาธารณะ"local variableName-- การประกาศ "ส่วนตัว" - ประมวลผลในลักษณะเดียวกันlocal _variableName
ตัวแปรใน C#string stringVariable = "ค่า";// การประกาศสาธารณะpublic string variableName// การประกาศส่วนตัวstring variableName;
ขอบเขต
ใน Luau คุณสามารถเขียนตัวแปรและตรรกะในขอบเขตที่แน่นกว่าฟังก์ชันหรือคลาสของพวกเขาโดยการซ้อนตรรกะภายใน do และ end คำสำคัญ ซึ่งคล้ายกับวงเล็บปีกกา {} ใน C# สำหรับรายละเอียดเพิ่มเติมโปรดดูที่ ขอบเขต.
การขอบเขตใน Luaulocal outerVar = 'ข้อความขอบเขตภายนอก'do-- แก้ไข 'outerVar'outerVar = 'ข้อความขอบเขตภายในถูกแก้ไข'-- แนะนำตัวแปรท้องถิ่นlocal innerVar = 'ข้อความขอบเขตภายใน'print('1: ' .. outerVar) -- แสดงผล "1: ข้อความขอบเขตภายในถูกแก้ไข"print('2: ' .. innerVar) -- แสดงผล "2: ข้อความขอบเขตภายใน"endprint('3: ' .. outerVar) -- แสดงผล "3: ข้อความขอบเขตภายในถูกแก้ไข"// การพยายามพิมพ์ 'innerVar' ที่นี่จะล้มเหลว
การขอบเขตใน C#var outerVar = "ข้อความขอบเขตภายนอก";{// แก้ไข 'outerVar'outerVar = "ข้อความขอบเขตภายในถูกแก้ไข";// แนะนำตัวแปรท้องถิ่นvar innerVar = "ข้อความขอบเขตภายใน";Console.WriteLine("1: " + outerVar); // แสดงผล "1: ข้อความขอบเขตภายในถูกแก้ไข"Console.WriteLine("2: " + innerVar); // แสดงผล "2: ข้อความขอบเขตภายใน"}Console.WriteLine("3: " + outerVar); // แสดงผล "3: ข้อความขอบเขตภายในถูกแก้ไข"// การพยายามพิมพ์ 'innerVar' ที่นี่จะล้มเหลว
คำสั่งเงื่อนไข
คำสั่งเงื่อนไขใน Luau-- เงื่อนไขเดียวif boolExpression thendoSomething()end-- หลายเงื่อนไขif not boolExpression thendoSomething()elseif otherBoolExpression thendoSomething()elsedoSomething()end
คำสั่งเงื่อนไขใน C#// เงื่อนไขเดียวif (boolExpression) {doSomething();}// หลายเงื่อนไขif (!boolExpression) {doSomething();}else if (otherBoolExpression) {doSomething();}else {doSomething();}
ตัวดำเนินการเงื่อนไข
ตัวดำเนินการเงื่อนไขใน Luaulocal max = if x > y then x else y
ตัวดำเนินการเงื่อนไขใน C#int max = (x > y) ? x : y;
การวนรอบ
หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับการวนรอบใน Luau ให้ดูที่ โครงสร้างควบคุม.
วนรอบ while และ repeat
วนรอบ While และ Repeat ใน Luauwhile boolExpression dodoSomething()endrepeatdoSomething()until not boolExpression
วนรอบ While และ Repeat ใน C#while (boolExpression) {doSomething();}do {doSomething();} while (boolExpression)
วนรอบ for
วนรอบ For ทั่วไปใน Luau-- วนรอบไปข้างหน้าfor i = 1, 10 dodoSomething()end-- วนรอบย้อนกลับfor i = 10, 1, -1 dodoSomething()end
วนรอบ For ทั่วไปใน C#// วนรอบไปข้างหน้าfor (int i = 1; i <= 10; i++) {doSomething();}// วนรอบย้อนกลับfor (int i = 10; i >= 1; i--) {doSomething();}
วนรอบ For บนตารางใน Luaulocal abcList = {"a", "b", "c"}for i, v in ipairs(abcList) doprint(v)endlocal abcDictionary = { a=1, b=2, c=3 }for k, v in pairs(abcDictionary) doprint(k, v)end
วนรอบ For บนรายการใน C#List<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 ให้ดูที่ ฟังก์ชัน.
ฟังก์ชันทั่วไป
ฟังก์ชันทั่วไปใน Luau
-- ฟังก์ชันทั่วไป
local function increment(number)
return number + 1
end
ฟังก์ชันทั่วไปใน C#
// ฟังก์ชันทั่วไป
int increment(int number) {
return number + 1;
}
จำนวนตัวแปรอาร์กิวเมนต์
จำนวนตัวแปรอาร์กิวเมนต์ใน Luau
-- จำนวนตัวแปรอาร์กิวเมนต์
local function variableArguments(...)
print(...)
end
จำนวนตัวแปรอาร์กิวเมนต์ใน C#
// จำนวนตัวแปรอาร์กิวเมนต์
void variableArguments(params string[] inventoryItems) {
for (item in inventoryItems) {
Console.WriteLine(item);
}
}
อาร์กิวเมนต์ที่ตั้งชื่อ
อาร์กิวเมนต์ที่ตั้งชื่อใน Luau
-- อาร์กิวเมนต์ที่ตั้งชื่อ
local function namedArguments(args)
return args.name .. "'s birthday: " .. args.dob
end
namedArguments{name="Bob", dob="4/1/2000"}
อาร์กิวเมนต์ที่ตั้งชื่อใน C#
// อาร์กิวเมนต์ที่ตั้งชื่อ
string namedArguments(string name, string dob) {
return name + "'s birthday: " + dob;
}
namedArguments(name: "Bob", dob: "4/1/2000");
โครงสร้าง try-catch
โครงสร้าง Try/Catch ใน Luau
local function fireWeapon()
if not weaponEquipped then
error("ไม่มีอาวุธติดตั้ง!")
end
-- ดำเนินการต่อ...
end
local success, errorMessage = pcall(fireWeapon)
if not success then
print(errorMessage)
end
โครงสร้าง Try/Catch ใน C#
void fireWeapon() {
if (!weaponEquipped) {
// ใช้ข้อยกเว้นที่ผู้ใช้กำหนด
throw new InvalidWeaponException("ไม่มีอาวุธติดตั้ง!");
}
// ดำเนินการต่อ...
}
try {
fireWeapon();
} catch (InvalidWeaponException ex) {
// ยกเว้นถูกเรียกขึ้น
}