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#.
| Luau | C# |
|---|---|
| and | |
| break | break |
| do | do |
| if | if |
| else | else |
| elseif | else if |
| then | |
| end | |
| true | true |
| false | false |
| for | for lub foreach |
| function | |
| in | in |
| local | |
| nil | null |
| not | |
| or | |
| repeat | |
| return | return |
| until | |
| while | while |
Komentarze
-- Komentarz jednolinijkowy
--[[ Wynik wyjścia:
Komentarz blokowy
--]]// Komentarz jednolinijkowy
/*
Komentarz blokowy
*/Napisy
-- 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// 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#.
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ść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#.
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)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
| Operator | Luau | C# |
|---|---|---|
| Równy | == | == |
| Większy niż | > | > |
| Mniejszy niż | < | < |
| Większy lub równy | >= | >= |
| Mniejszy lub równy | <= | <= |
| Nie równy | ~= | != |
| And | and | && |
| Or | or | || |
Operatory arytmetyczne
| Luau | C# | |
|---|---|---|
| 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.
local stringVariable = "wartość"
-- Deklaracja "publiczna"
local variableName
-- Deklaracja "prywatna" - interpretowana w ten sam sposób
local _variableNamestring 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.
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ę niepowodzeniemvar 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ę niepowodzeniemInstrukcje warunkowe
-- Jeden warunek
if boolExpression then
doSomething()
end
-- Wiele warunków
if not boolExpression then
doSomething()
elseif otherBoolExpression then
doSomething()
else
doSomething()
end// Jeden warunek
if (boolExpression) {
doSomething();
}
// Wiele warunków
if (!boolExpression) {
doSomething();
}
else if (otherBoolExpression) {
doSomething();
}
else {
doSomething();
}Operator warunkowy
local max = if x > y then x else yint 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
while boolExpression do
doSomething()
end
repeat
doSomething()
until not boolExpressionwhile (boolExpression) {
doSomething();
}
do {
doSomething();
} while (boolExpression)Pętle for
-- Pętla w przód
for i = 1, 10 do
doSomething()
end
-- Pętla w tył
for i = 10, 1, -1 do
doSomething()
end// 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();
}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 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
-- Funkcja ogólna
local function increment(number)
return number + 1
end// Funkcja ogólna
int increment(int number) {
return number + 1;
}Liczba argumentów zmiennych
-- Liczba argumentów zmiennych
local function variableArguments(...)
print(...)
end// Liczba argumentów zmiennych
void variableArguments(params string[] inventoryItems) {
for (item in inventoryItems) {
Console.WriteLine(item);
}
}Argumenty nazwane
-- Argumenty nazwane
local function namedArguments(args)
return args.name .. "'s birthday: " .. args.dob
end
namedArguments{name="Bob", dob="4/1/2000"}// Argumenty nazwane
string namedArguments(string name, string dob) {
return name + "'s birthday: " + dob;
}
namedArguments(name: "Bob", dob: "4/1/2000");Struktury try-catch
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)
endvoid 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
}