Roblox sử dụng ngôn ngữ lập trình Luau. Các mẫu mã và bảng dưới đây chỉ ra một số điểm khác biệt giữa cú pháp của C# và Luau.
Kết thúc dòng
Bạn không cần dấu chấm phẩy trong Luau, nhưng chúng sẽ không phá vỡ cú pháp.
Từ khóa dự trữ
Bảng dưới đây có các từ khóa dự trữ của Luau được ánh xạ tới tương đương C# của chúng. Lưu ý rằng nó không hiển thị tất cả các từ khóa của C#.
| Luau | C# |
|---|---|
| and | |
| break | break |
| do | do |
| if | if |
| else | else |
| elseif | else if |
| then | |
| end | |
| true | true |
| false | false |
| for | for hoặc foreach |
| function | |
| in | in |
| local | |
| nil | null |
| not | |
| or | |
| repeat | |
| return | return |
| until | |
| while | while |
Nhận xét
-- Nhận xét một dòng
--[[ Đầu ra kết quả:
Nhận xét khối
--]]// Nhận xét một dòng
/*
Nhận xét khối
*/Chuỗi
-- Chuỗi đa dòng
local multiLineString = [[Đây là một chuỗi mà,
khi in ra, sẽ xuất hiện
trên nhiều dòng]]
-- Nối chuỗi
local s1 = "Đây là một chuỗi "
local s2 = "được tạo thành từ hai phần."
local endString = s1 .. s2// Chuỗi đa dòng
string multiLineString1 = "Đây là một chuỗi mà,\n khi in ra, sẽ xuất hiện\n trên nhiều dòng.";
string multiLineString2 = @"Đây là một chuỗi mà,
khi in ra, sẽ xuất hiện
trên nhiều dòng";
// Nối chuỗi
string s1 = "Đây là một chuỗi ";
string s2 = "được tạo thành từ hai phần.";
string endString = s1 + s2;Bảng
Để tìm hiểu thêm về bảng trong Luau, xem Bảng.
Bảng từ điển
Bạn có thể sử dụng bảng trong Luau như từ điển giống như trong C#.
local dictionary = {
val1 = "này",
val2 = "là"
}
print(dictionary.val1) -- Xuất 'này'
print(dictionary["val1"]) -- Xuất 'này'
dictionary.val1 = nil -- Xóa 'val1' khỏi bảng
dictionary["val3"] = "một từ điển" -- Ghi đè 'val3' hoặc thiết lập cặp khóa-giá trị mớiDictionary dictionary = new Dictionary()
{
{ "val1", "này" },
{ "val2", "là" }
};
Console.WriteLine(dictionary["val1"]); // Xuất 'này'
dictionary.Remove("val1"); // Xóa 'val1' khỏi từ điển
dictionary["val3"] = "một từ điển"; // Ghi đè 'val3' hoặc thiết lập cặp khóa-giá trị mới
dictionary.Add("val3", "một từ điển"); // Tạo một cặp khóa-giá trị mớiBảng được đánh chỉ số bằng số
Bạn có thể sử dụng bảng trong Luau như mảng giống như trong C#. Chỉ số bắt đầu từ 1 trong Luau và 0 trong C#.
local npcAttributes = {"mạnh", "thông minh"}
print(npcAttributes[1]) -- Xuất 'mạnh'
print(#npcAttributes) -- Xuất kích thước của danh sách
-- Thêm vào danh sách
table.insert(npcAttributes, "khiêm tốn")
-- Một cách khác...
npcAttributes[#npcAttributes+1] = "khiêm tốn"
-- Chèn vào đầu danh sách
table.insert(npcAttributes, 1, "dũng cảm")
-- Xóa phần tử tại một chỉ số nhất định
table.remove(npcAttributes, 3)List npcAttributes = new List{"mạnh", "thông minh"};
Console.WriteLine(npcAttributes[0]); // Xuất 'mạnh'
Console.WriteLine(npcAttributes.Count); // Xuất kích thước của danh sách
// Thêm vào danh sách
npcAttributes.Add("khiêm tốn");
// Một cách khác...
npcAttributes.Insert(npcAttributes.Count, "khiêm tốn");
// Chèn vào đầu danh sách
npcAttributes.Insert(0, "dũng cảm");
// Xóa phần tử tại một chỉ số nhất định
npcAttributes.Remove(2);Toán tử
Toán tử điều kiện
| Toán tử | Luau | C# |
|---|---|---|
| Bằng | == | == |
| Lớn hơn | > | > |
| Nhỏ hơn | < | < |
| Lớn hơn hoặc Bằng | >= | >= |
| Nhỏ hơn hoặc Bằng | <= | <= |
| Không Bằng | ~= | != |
| Và | and | && |
| Hoặc | or | || |
Toán tử số học
| Luau | C# | |
|---|---|---|
| Cộng | + | + |
| Trừ | - | - |
| Nhân | * | * |
| Chia | / | / |
| Phần dư | % | % |
| Lũy thừa | ^ | ** |
Biến
Trong Luau, các biến không chỉ rõ kiểu của chúng khi bạn khai báo. Biến Luau không có các bộ truy cập, mặc dù bạn có thể tiền tố các biến "riêng tư" bằng dấu gạch dưới để dễ đọc hơn.
local stringVariable = "giá trị"
-- Khai báo "công khai"
local variableName
-- Khai báo "riêng tư" - phân tích giống nhau
local _variableNamestring stringVariable = "giá trị";
// Khai báo công khai
public string variableName
// Khai báo riêng tư
string variableName;Phạm vi
Trong Luau, bạn có thể viết biến và logic trong một phạm vi chặt chẽ hơn so với hàm hoặc lớp của chúng bằng cách lồng logic bên trong các từ khóa do và end, tương tự như dấu ngoặc nhọn {} trong C#. Để biết thêm chi tiết, xem Phạm vi.
local outerVar = 'Văn bản phạm vi bên ngoài'
do
-- Chỉnh sửa 'outerVar'
outerVar = 'Văn bản phạm vi bên trong đã chỉnh sửa'
-- Giới thiệu một biến cục bộ
local innerVar = 'Văn bản phạm vi bên trong'
print('1: ' .. outerVar) -- in ra "1: Văn bản phạm vi bên trong đã chỉnh sửa"
print('2: ' .. innerVar) -- in ra "2: Văn bản phạm vi bên trong"
end
print('3: ' .. outerVar) -- in ra "3: "Văn bản phạm vi bên trong đã chỉnh sửa"
-- Cố gắng in 'innerVar' ở đây sẽ thất bạivar outerVar = "Văn bản phạm vi bên ngoài";
{
// Chỉnh sửa 'outerVar'
outerVar = "Văn bản phạm vi bên trong đã chỉnh sửa";
// Giới thiệu một biến cục bộ
var innerVar = "Văn bản phạm vi bên trong";
Console.WriteLine("1: " + outerVar); // in ra "1: Văn bản phạm vi bên trong đã chỉnh sửa"
Console.WriteLine("2: " + innerVar); // in ra "2: Văn bản phạm vi bên trong"
}
Console.WriteLine("3: " + outerVar); // in ra "3: "Văn bản phạm vi bên trong đã chỉnh sửa"
// Cố gắng in 'innerVar' ở đây sẽ thất bạiCâu lệnh điều kiện
-- Một điều kiện
if boolExpression then
doSomething()
end
-- Nhiều điều kiện
if not boolExpression then
doSomething()
elseif otherBoolExpression then
doSomething()
else
doSomething()
end// Một điều kiện
if (boolExpression) {
doSomething();
}
// Nhiều điều kiện
if (!boolExpression) {
doSomething();
}
else if (otherBoolExpression) {
doSomething();
}
else {
doSomething();
}Toán tử điều kiện
local max = if x > y then x else yint max = (x > y) ? x : y;Vòng lặp
Để tìm hiểu thêm về vòng lặp trong Luau, xem Cấu trúc điều khiển.
Vòng lặp While và Repeat
while boolExpression do
doSomething()
end
repeat
doSomething()
until not boolExpressionwhile (boolExpression) {
doSomething();
}
do {
doSomething();
} while (boolExpression)Vòng lặp For
-- Vòng lặp tiến
for i = 1, 10 do
doSomething()
end
-- Vòng lặp ngược
for i = 10, 1, -1 do
doSomething()
end// Vòng lặp tiến
for (int i = 1; i <= 10; i++) {
doSomething();
}
// Vòng lặp ngược
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 cũng hỗ trợ lặp lại tổng quát, điều này giúp việc làm việc với bảng trở nên dễ dàng hơn.
Hàm
Để tìm hiểu thêm về hàm trong Luau, xem Hàm.
Hàm tổng quát
-- Hàm tổng quát
local function increment(number)
return number + 1
end// Hàm tổng quát
int increment(int number) {
return number + 1;
}Số lượng tham số biến
-- Số lượng tham số biến
local function variableArguments(...)
print(...)
end// Số lượng tham số biến
void variableArguments(params string[] inventoryItems) {
for (item in inventoryItems) {
Console.WriteLine(item);
}
}Tham số theo tên
-- Tham số theo tên
local function namedArguments(args)
return args.name .. "'s birthday: " .. args.dob
end
namedArguments{name="Bob", dob="4/1/2000"}// Tham số theo tên
string namedArguments(string name, string dob) {
return name + "'s birthday: " + dob;
}
namedArguments(name: "Bob", dob: "4/1/2000");Cấu trúc try-catch
local function fireWeapon()
if not weaponEquipped then
error("Không có vũ khí nào được trang bị!")
end
-- Tiến hành...
end
local success, errorMessage = pcall(fireWeapon)
if not success then
print(errorMessage)
endvoid fireWeapon() {
if (!weaponEquipped) {
// Sử dụng một ngoại lệ do người dùng định nghĩa
throw new InvalidWeaponException("Không có vũ khí nào được trang bị!");
}
// Tiến hành...
}
try {
fireWeapon();
} catch (InvalidWeaponException ex) {
// Một lỗi đã được đưa ra
}