So sánh 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 ví dụ mã và bảng sau đây cho thấy một số khác biệt giữa các ngôn ngữ lập trình cho C# và Luau.

Các kết thúc dòng

Bạn không cần dấu chấm câu trong Luau, nhưng chúng không phá vỡ ngữ pháp.

Từ khóa đã được réo

Bảng sau đây có các từ khóa mà Luau đã đặt tên riêng cho chúng. Hãy lưu ý rằng nó không hiển thị tất cả các từ khóa C#.

Tiếng ViệtC#
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

Bình luận trong Luau

-- Nhận xét dòng bình luận
--[[ Kết quả ra:
Block comment
--]]
Comments in C#

// Single line comment
/*
Block comment
*/

Chuỗi

Chuỗi ở Luau

-- Chuỗi nhiều chuỗi
local multiLineString = [[This is a string that,
when printed, appears
on multiple lines]]
-- Hợp nhất
local s1 = "This is a string "
local s2 = "made with two parts."
local endString = s1 .. s2
Strings in C#

// Multi-line string
string multiLineString1 = "This is a string that,\nwhen printed, appears\n on multiple lines.";
string multiLineString2 = @"This is a string that,
when printed, appears
on multiple lines";
// Concatenation
string s1 = "This is a string ";
string s2 = "made with two parts.";
string endString = s1 + s2;

Bảng

Để tìm hiểu thêm về các bảng trong Luau, xem Bảng .

Bảng Từ Điển

Bạn có thể sử dụng bảng trong Luau như các từ điển giống như trong C#.

Bảng Từ Điển trong Luau

local dictionary = {
val1 = "this",
val2 = "is"
}
print(dictionary.val1) -- Hiển thị 'this'
print(dictionary["val1"]) -- Hiển thị 'this'
dictionary.val1 = nil -- Loại bỏ 'val1' khỏi bảng
dictionary["val3"] = "a dictionary" -- Overwrites 'val3' or sets new key-value pair
Dictionary Tables in C#

Dictionary dictionary = new Dictionary()
{
{ "val1", "this" },
{ "val2", "is" }
};
Console.WriteLine(dictionary["val1"]); // Outputs 'this'
dictionary.Remove("val1"); // Removes 'val1' from dictionary
dictionary["val3"] = "a dictionary"; // Overwrites 'val3' or sets new key-value pair
dictionary.Add("val3", "a dictionary"); // Creates a new key-value pair

Bảng đếm được dùng chỉ số

Bạn có thể sử dụng các bảng trong Luau như một dàn trùng giống như trong C#. Các chỉ số bắt đầu tại 1 trong Luau và 0 trong C#.

Bảng Tính Toán trong Luau

local npcAttributes = {"strong", "intelligent"}
print(npcAttributes[1]) -- Hiển thị 'mạnh mẽ'
print(#npcAttributes) -- Hiển thị kích thước của danh sách
-- Thêm vào danh sách
table.insert(npcAttributes, "humble")
-- Cách khác ...
npcAttributes[#npcAttributes+1] = "humble"
-- Nhúc vào đầu danh sách
table.insert(npcAttributes, 1, "brave")
-- Loại bỏ một mục tại một chỉ mục cụ thể
table.remove(npcAttributes, 3)
Numerically-Indexed Tables in C#

List npcAttributes = new List{"strong", "intelligent"};
Console.WriteLine(npcAttributes[0]); // Outputs 'strong'
Console.WriteLine(npcAttributes.Count); // Outputs the size of the list
// Append to the list
npcAttributes.Add("humble");
// Another way...
npcAttributes.Insert(npcAttributes.Count, "humble");
// Insert at the beginning of the list
npcAttributes.Insert(0, "brave");
// Remove item at a given index
npcAttributes.Remove(2);

Người vận hành

Các Operator Điều Kiện

Người vận hànhTiếng ViệtC#
Bằng====
Lớn hơn>>
Dưới<<
Lớn hơn hoặc bằng>=>=
Dưới hay Bằng<=<=
Không bằng~=!=
and&&
Hoặcor||

Các Operator Toán Học

Tiếng ViệtC#
Thêm++
Tách--
Tăng tốc**
Sư đoàn//
Hệ%%
Biểu tượng^**

Biến

Ở Luau, các biến không định loại của họ khi bạn tuyên bố chúng. Các biến Luau không có modifier truy cập, mặc dù bạn có thể kết hợp " riêng tư"变体 với dấu chấm câu cho đọc.

Biến trong Luau

local stringVariable = "value"
-- Tuyên bố "công khai"
local variableName
-- Tuyên bố "riêng tư" - đã phân tích theo cùng một cách
local _variableName
Variables in C#

string stringVariable = "value";
// Public declaration
public string variableName
// Private declaration
string variableName;

Tầm nhìn

Ở Luau, bạn có thể viết biến và logic trong một phạm vi chặt chẽ hơn chức năng hoặc lớp của chúng bằng cách ghép nhúc nhích trong các thẻ doend tương tự như các dấu chấm câu {} trong C#. Để biết thêm chi

Lập trình trong Luau

local outerVar = 'Outer scope text'
do
-- Điều chỉnh 'outerVar'
outerVar = 'Inner scope modified text'
-- Giới thiệu một biến đổi địa phương
local innerVar = 'Inner scope text'
print('1: ' .. outerVar) -- prints "1: Inner scope modified text"
print('2: ' .. innerVar) -- prints "2: Inner scope text"
end
print('3: ' .. outerVar) -- prints "3: "Văn bản chỉnh sửa phạm vi nội bên"
-- Attempting to print 'innerVar' here would fail
Scoping in C#

var outerVar = "Outer scope text";
{
// Modify 'outerVar'
outerVar = "Inner scope modified text";
// Introduce a local variable
var innerVar = "Inner scope text";
Console.WriteLine("1: " + outerVar); // prints "1: Inner scope modified text"
Console.WriteLine("2: " + innerVar); // prints "2: Inner scope text"
}
Console.WriteLine("3: " + outerVar); // prints "3: "Inner scope modified text"
// Attempting to print 'innerVar' here would fail

Những tuyên bố điều kiện

Các biểu tượng điều kiện ở 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
Conditional Statements in C#

// One condition
if (boolExpression) {
doSomething();
}
// Multiple conditions
if (!boolExpression) {
doSomething();
}
else if (otherBoolExpression) {
doSomething();
}
else {
doSomething();
}

Người Operator Điều Kiện

Người dùng điều kiện trong Luau

local max = if x > y then x else y
Conditional Operator in C#

int max = (x > y) ? x : y;

Vòng lặp

Để tìm hiểu thêm về các lỗ hổng trong Luau, xem Cấu trúc điều khiển .

Khi và lặp lại các lỗ

Lặp lại và Lặp lại while và loop trong Luau

while boolExpression do
doSomething()
end
repeat
doSomething()
until not boolExpression
While and Repeat Loops in C#

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

Đối với các lỗ

Thông thường cho vòng lặp trong Luau

-- Vòng lặp tiếp theo
for i = 1, 10 do
doSomething()
end
-- Đảo ngược lại
for i = 10, 1, -1 do
doSomething()
end
Generic For Loops in C#

// Forward loop
for (int i = 1; i <= 10; i++) {
doSomething();
}
// Reverse loop
for (int i = 10; i >= 1; i--) {
doSomething();
}
Đối với các lỗ trên 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
For Loops Over Lists in 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ợ iteration generalized, làm cho công việc với các bảng đơn giản hơn.

Hàm

Để tìm hiểu thêm về các hàm trong Luau, xem Hàm .

Hàm chung vui vẻ

Các chức năng genéric trong Luau

-- Hàm chung
local function increment(number)
return number + 1
end
Generic Functions in C#

// Generic function
int increment(int number) {
return number + 1;
}

Số lượng biến đổi

Biến Số Dữ Liệu Biến Số trong Luau

-- Số lượng biến đổi
local function variableArguments(...)
print(...)
end
Variable Argument Number in C#

// Variable argument number
void variableArguments(params string[] inventoryItems) {
for (item in inventoryItems) {
Console.WriteLine(item);
}
}

Các biến được đặt tên

Các biến đổi có tên trong Luau

-- Các biến tên
local function namedArguments(args)
return args.name .. "'s birthday: " .. args.dob
end
namedArguments{name="Bob", dob="4/1/2000"}
Named Arguments in C#

// Named arguments
string namedArguments(string name, string dob) {
return name + "'s birthday: " + dob;
}
namedArguments(name: "Bob", dob: "4/1/2000");

Các Cấu hình Cố gắng-Lấy

Thử nghiệm/bắt bẻ Cơ sở dữ liệu trong Luau

local function fireWeapon()
if not weaponEquipped then
error("No weapon equipped!")
end
-- Tiến hành...
end
local success, errorMessage = pcall(fireWeapon)
if not success then
print(errorMessage)
end
Try/Catch Structures in C#

void fireWeapon() {
if (!weaponEquipped) {
// Use a user-defined exception
throw new InvalidWeaponException("No weapon equipped!");
}
// Proceed...
}
try {
fireWeapon();
} catch (InvalidWeaponException ex) {
// An error was raised
}