So sánh giữa Luau và C#

*Nội dung này được dịch bằng AI (Beta) và có thể có lỗi. Để xem trang này bằng tiếng Anh, hãy nhấp vào đây.

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#.

LuauC#
and
breakbreak
dodo
ifif
elseelse
elseifelse if
then
end
truetrue
falsefalse
forfor hoặc foreach
function
inin
local
nilnull
not
or
repeat
returnreturn
until
whilewhile

Nhận xét

Nhận xét trong Luau

-- Nhận xét một dòng
--[[ Đầu ra kết quả:
Nhận xét khối
--]]
Nhận xét trong C#

// Nhận xét một dòng
/*
Nhận xét khối
*/

Chuỗi

Chuỗi trong Luau

-- 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 trong C#

// 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#.

Bảng Từ Điển trong Luau

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ới
Bảng Từ Điển trong C#

Dictionary 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ới

Bả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#.

Bảng Được Đánh Chỉ Số Bằng Số trong Luau

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)
Bảng Được Đánh Chỉ Số Bằng Số trong C#

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ửLuauC#
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~=!=
and&&
Hoặcor||

Toán tử số học

LuauC#
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.

Biến trong Luau

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 _variableName
Biến trong C#

string 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 doend, tương tự như dấu ngoặc nhọn {} trong C#. Để biết thêm chi tiết, xem Phạm vi.

Phạm vi trong Luau

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ại
Phạm vi trong C#

var 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ại

Câu lệnh điều kiện

Câu Lệnh Điều Kiện trong Luau

-- 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
Câu Lệnh Điều Kiện trong C#

// 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

Toán Tử Điều Kiện trong Luau

local max = if x > y then x else y
Toán Tử Điều Kiện trong C#

int 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

Vòng Lặp While và Repeat trong Luau

while boolExpression do
doSomething()
end
repeat
doSomething()
until not boolExpression
Vòng Lặp While và Repeat trong C#

while (boolExpression) {
doSomething();
}
do {
doSomething();
} while (boolExpression)

Vòng lặp For

Vòng Lặp For Chung trong Luau

-- 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 For Chung trong C#

// 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();
}
Vòng Lặp For Qua Các Bảng trong Luau

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)
end
Vòng Lặp For Qua Các Danh Sách trong 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 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 trong Luau

-- Hàm tổng quát
local function increment(number)
return number + 1
end
Hàm Tổng Quát trong C#

// 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 trong Luau

-- Số lượng tham số biến
local function variableArguments(...)
print(...)
end
Số Lượng Tham Số Biến trong C#

// 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 trong Luau

-- 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 trong C#

// 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

Cấu Trúc Try/Catch trong Luau

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)
end
Cấu Trúc Try/Catch trong C#

void 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
}
©2026 Roblox Corporation. Roblox, logo Roblox và Powering Imagination là các nhãn hiệu đã đăng ký và chưa đăng ký của chúng tôi tại Hoa Kỳ và các quốc gia khác.