Porównanie Luau i C#

*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.

Roblox używa języka programowania Luau. Następujące przykłady kodu i tabele wskazują niektóre różnice między składniami C# i Luau.

Zakończenia linii

Nie musisz używać średników w Luau, ale one nie łamią składni.

Zarezerwowane słowa kluczowe

Następująca tabela zawiera zarezerwowane słowa kluczowe Luau w porównaniu do ich odpowiedników w C#. Zauważ, że nie pokazuje wszystkich słów kluczowych C#.

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

Komentarze

Komentarze w Luau

-- Komentarz jednolinijkowy
--[[ Wynik wyjścia:
Komentarz blokowy
--]]
Komentarze w C#

// Komentarz jednolinijkowy
/*
Komentarz blokowy
*/

Napisy

Napisy w Luau

-- Napis wieloliniowy
local multiLineString = [[To jest napis, który,
po wydrukowaniu, pojawia
się na wielu liniach]]
-- Konkatenacja
local s1 = "To jest napis "
local s2 = "utworzony z dwóch części."
local endString = s1 .. s2
Napisy w C#

// Napis wieloliniowy
string multiLineString1 = "To jest napis, który,\npo wydrukowaniu, pojawia\n się na wielu liniach.";
string multiLineString2 = @"To jest napis, który,
po wydrukowaniu, pojawia
się na wielu liniach";
// Konkatenacja
string s1 = "To jest napis ";
string s2 = "utworzony z dwóch części.";
string endString = s1 + s2;

Tabele

Aby dowiedzieć się więcej o tabelach w Luau, zapoznaj się z Tabelami.

Tabele słownikowe

Możesz używać tabel w Luau jako słowników, tak jak w C#.

Tabele słownikowe w Luau

local dictionary = {
val1 = "to",
val2 = "jest"
}
print(dictionary.val1) -- Wydaje 'to'
print(dictionary["val1"]) -- Wydaje 'to'
dictionary.val1 = nil -- Usuwa 'val1' z tabeli
dictionary["val3"] = "słownik" -- Zastępuje 'val3' lub ustawia nową parę klucz-wartość
Tabele słownikowe w C#

Dictionary dictionary = new Dictionary()
{
{ "val1", "to" },
{ "val2", "jest" }
};
Console.WriteLine(dictionary["val1"]); // Wydaje 'to'
dictionary.Remove("val1"); // Usuwa 'val1' ze słownika
dictionary["val3"] = "słownik"; // Zastępuje 'val3' lub ustawia nową parę klucz-wartość
dictionary.Add("val3", "słownik"); // Tworzy nową parę klucz-wartość

Tabele z indeksem numerycznym

Możesz używać tabel w Luau jako tablic, tak jak w C#. Indeksy zaczynają się od 1 w Luau i 0 w C#.

Tabele z indeksem numerycznym w Luau

local npcAttributes = {"silny", "inteligentny"}
print(npcAttributes[1]) -- Wydaje 'silny'
print(#npcAttributes) -- Wydaje rozmiar listy
-- Dodaj do listy
table.insert(npcAttributes, "pokorny")
-- Inny sposób...
npcAttributes[#npcAttributes+1] = "pokorny"
-- Wstaw na początku listy
table.insert(npcAttributes, 1, "odważny")
-- Usuń element pod danym indeksem
table.remove(npcAttributes, 3)
Tabele z indeksem numerycznym w C#

List npcAttributes = new List{"silny", "inteligentny"};
Console.WriteLine(npcAttributes[0]); // Wydaje 'silny'
Console.WriteLine(npcAttributes.Count); // Wydaje rozmiar listy
// Dodaj do listy
npcAttributes.Add("pokorny");
// Inny sposób...
npcAttributes.Insert(npcAttributes.Count, "pokorny");
// Wstaw na początku listy
npcAttributes.Insert(0, "odważny");
// Usuń element pod danym indeksem
npcAttributes.Remove(2);

Operatory

Operatory warunkowe

OperatorLuauC#
Równy====
Większy niż>>
Mniejszy niż<<
Większy lub równy>=>=
Mniejszy lub równy<=<=
Nie równy~=!=
Andand&&
Oror||

Operatory arytmetyczne

LuauC#
Dodawanie++
Odejmowanie--
Mnożenie**
Dzielenie//
Moduł%%
Potęgowanie^**

Zmienne

W Luau zmienne nie określają swojego typu, gdy je deklarujesz. Zmienne Luau nie mają modyfikatorów dostępu, chociaż możesz poprzedzać "prywatne" zmienne podkreślnikiem dla czytelności.

Zmienne w Luau

local stringVariable = "wartość"
-- Deklaracja "publiczna"
local variableName
-- Deklaracja "prywatna" - interpretowana w ten sam sposób
local _variableName
Zmienne w C#

string stringVariable = "wartość";
// Deklaracja publiczna
public string variableName
// Deklaracja prywatna
string variableName;

Zakres

W Luau możesz pisać zmienne i logikę w węższym zakresie niż ich funkcja lub klasa, zagnieżdżając logikę w słowach kluczowych do i end, podobnie jak w nawiasach klamrowych {} w C#. Aby uzyskać więcej szczegółów, zobacz Zakres.

Zakres w Luau

local outerVar = 'Tekst zewnętrznego zakresu'
do
-- Modyfikuj 'outerVar'
outerVar = 'Tekst wewnętrznego zakresu'
-- Wprowadzanie zmiennej lokalnej
local innerVar = 'Tekst wewnętrznego zakresu'
print('1: ' .. outerVar) -- wydrukuje "1: Tekst wewnętrznego zakresu"
print('2: ' .. innerVar) -- wydrukuje "2: Tekst wewnętrznego zakresu"
end
print('3: ' .. outerVar) -- wydrukuje "3: "Tekst wewnętrznego zakresu"
-- Próba wydrukowania 'innerVar' tutaj zakończyłaby się niepowodzeniem
Zakres w C#

var outerVar = "Tekst zewnętrznego zakresu";
{
// Modyfikuj 'outerVar'
outerVar = "Tekst wewnętrznego zakresu";
// Wprowadzanie zmiennej lokalnej
var innerVar = "Tekst wewnętrznego zakresu";
Console.WriteLine("1: " + outerVar); // wydrukuje "1: Tekst wewnętrznego zakresu"
Console.WriteLine("2: " + innerVar); // wydrukuje "2: Tekst wewnętrznego zakresu"
}
Console.WriteLine("3: " + outerVar); // wydrukuje "3: "Tekst wewnętrznego zakresu"
// Próba wydrukowania 'innerVar' tutaj zakończyłaby się niepowodzeniem

Instrukcje warunkowe

Instrukcje warunkowe w Luau

-- Jeden warunek
if boolExpression then
doSomething()
end
-- Wiele warunków
if not boolExpression then
doSomething()
elseif otherBoolExpression then
doSomething()
else
doSomething()
end
Instrukcje warunkowe w C#

// Jeden warunek
if (boolExpression) {
doSomething();
}
// Wiele warunków
if (!boolExpression) {
doSomething();
}
else if (otherBoolExpression) {
doSomething();
}
else {
doSomething();
}

Operator warunkowy

Operator warunkowy w Luau

local max = if x > y then x else y
Operator warunkowy w C#

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

Pętle

Aby dowiedzieć się więcej o pętlach w Luau, zapoznaj się z Struktura kontrolnymi.

Pętle while i repeat

Pętle While i Repeat w Luau

while boolExpression do
doSomething()
end
repeat
doSomething()
until not boolExpression
Pętle While i Repeat w C#

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

Pętle for

Ogólne pętle For w Luau

-- Pętla w przód
for i = 1, 10 do
doSomething()
end
-- Pętla w tył
for i = 10, 1, -1 do
doSomething()
end
Ogólne pętle For w C#

// Pętla w przód
for (int i = 1; i <= 10; i++) {
doSomething();
}
// Pętla w tył
for (int i = 10; i >= 1; i--) {
doSomething();
}
Pętle For po tabelach w 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
Pętle For po listach w 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 obsługuje także uproszczoną iterację, co dodatkowo upraszcza pracę z tabelami.

Funkcje

Aby dowiedzieć się więcej o funkcjach w Luau, zapoznaj się z Funkcjami.

Funkcje ogólne

Funkcje ogólne w Luau

-- Funkcja ogólna
local function increment(number)
return number + 1
end
Funkcje ogólne w C#

// Funkcja ogólna
int increment(int number) {
return number + 1;
}

Liczba argumentów zmiennych

Liczba argumentów zmiennych w Luau

-- Liczba argumentów zmiennych
local function variableArguments(...)
print(...)
end
Liczba argumentów zmiennych w C#

// Liczba argumentów zmiennych
void variableArguments(params string[] inventoryItems) {
for (item in inventoryItems) {
Console.WriteLine(item);
}
}

Argumenty nazwane

Argumenty nazwane w Luau

-- Argumenty nazwane
local function namedArguments(args)
return args.name .. "'s birthday: " .. args.dob
end
namedArguments{name="Bob", dob="4/1/2000"}
Argumenty nazwane w C#

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

Struktury try-catch

Struktury Try/Catch w Luau

local function fireWeapon()
if not weaponEquipped then
error("Nie ma broni!")
end
-- Kontynuuj...
end
local success, errorMessage = pcall(fireWeapon)
if not success then
print(errorMessage)
end
Struktury Try/Catch w C#

void fireWeapon() {
if (!weaponEquipped) {
// Użyj wyjątku zdefiniowanego przez użytkownika
throw new InvalidWeaponException("Nie ma broni!");
}
// Kontynuuj...
}
try {
fireWeapon();
} catch (InvalidWeaponException ex) {
// Wystąpił błąd
}
©2026 Roblox Corporation. Nazwa Roblox, logo Roblox oraz hasło „Powering Imagination” należą do naszych zarejestrowanych i niezarejestrowanych znaków towarowych na terenie Stanów Zjednoczonych oraz w innych krajach.