Roblox utilizza il linguaggio di programmazione Luau. I seguenti esempi di codice e tabelle indicano alcune delle differenze tra le sintassi per C# e Luau.
Fine riga
Non hai bisogno di punti e virgola in Luau, ma non rompono la sintassi.
Parole riservate
La seguente tabella mostra le parole riservate di Luau mappate ai loro equivalenti in C#. Nota che non mostra tutte le parole chiave di C#.
| Luau | C# |
|---|---|
| and | |
| break | break |
| do | do |
| if | if |
| else | else |
| elseif | else if |
| then | |
| end | |
| true | true |
| false | false |
| for | for o foreach |
| function | |
| in | in |
| local | |
| nil | null |
| not | |
| or | |
| repeat | |
| return | return |
| until | |
| while | while |
Commenti
-- Commento su una sola riga
--[[ Risultato dell'output:
Commento su più righe
--]]// Commento su una sola riga
/*
Commento su più righe
*/Stringhe
-- Stringa su più righe
local multiLineString = [[Questa è una stringa che,
quando stampata, appare
su più righe]]
-- Concatenazione
local s1 = "Questa è una stringa "
local s2 = "composta da due parti."
local endString = s1 .. s2// Stringa su più righe
string multiLineString1 = "Questa è una stringa che,\nquando stampata, appare\n su più righe.";
string multiLineString2 = @"Questa è una stringa che,
quando stampata, appare
su più righe";
// Concatenazione
string s1 = "Questa è una stringa ";
string s2 = "composta da due parti.";
string endString = s1 + s2;Tabelle
Per saperne di più sulle tabelle in Luau, vedere Tabelle.
Tabelle dizionario
Puoi usare le tabelle in Luau come dizionari proprio come in C#.
local dictionary = {
val1 = "questo",
val2 = "è"
}
print(dictionary.val1) -- Stampa 'questo'
print(dictionary["val1"]) -- Stampa 'questo'
dictionary.val1 = nil -- Rimuove 'val1' dalla tabella
dictionary["val3"] = "un dizionario" -- Sovrascrive 'val3' o imposta un nuovo paio chiave-valoreDictionary dictionary = new Dictionary()
{
{ "val1", "questo" },
{ "val2", "è" }
};
Console.WriteLine(dictionary["val1"]); // Stampa 'questo'
dictionary.Remove("val1"); // Rimuove 'val1' dal dizionario
dictionary["val3"] = "un dizionario"; // Sovrascrive 'val3' o imposta un nuovo paio chiave-valore
dictionary.Add("val3", "un dizionario"); // Crea un nuovo paio chiave-valoreTabelle indicizzate numericamente
Puoi usare le tabelle in Luau come array proprio come in C#. Gli indici partono da 1 in Luau e 0 in C#.
local npcAttributes = {"forte", "intelligente"}
print(npcAttributes[1]) -- Stampa 'forte'
print(#npcAttributes) -- Stampa la dimensione dell'elenco
-- Aggiungi alla lista
table.insert(npcAttributes, "umile")
-- Un altro modo...
npcAttributes[#npcAttributes+1] = "umile"
-- Inserisci all'inizio della lista
table.insert(npcAttributes, 1, "coraggioso")
-- Rimuovi l'elemento a un dato indice
table.remove(npcAttributes, 3)List npcAttributes = new List{"forte", "intelligente"};
Console.WriteLine(npcAttributes[0]); // Stampa 'forte'
Console.WriteLine(npcAttributes.Count); // Stampa la dimensione dell'elenco
// Aggiungi alla lista
npcAttributes.Add("umile");
// Un altro modo...
npcAttributes.Insert(npcAttributes.Count, "umile");
// Inserisci all'inizio della lista
npcAttributes.Insert(0, "coraggioso");
// Rimuovi l'elemento a un dato indice
npcAttributes.Remove(2);Operatori
Operatori condizionali
| Operatore | Luau | C# |
|---|---|---|
| Uguale a | == | == |
| Maggiore di | > | > |
| Minore di | < | < |
| Maggiore o uguale a | >= | >= |
| Minore o uguale a | <= | <= |
| Non uguale a | ~= | != |
| E | and | && |
| O | or | || |
Operatori aritmetici
| Luau | C# | |
|---|---|---|
| Somma | + | + |
| Soutrazione | - | - |
| Moltiplicazione | * | * |
| Divisione | / | / |
| Modulo | % | % |
| Esponenziazione | ^ | ** |
Variabili
In Luau, le variabili non specificano il loro tipo quando le dichiari. Le variabili Luau non hanno modificatori di accesso, anche se puoi anteporre "private" alle variabili con un underscore per leggibilità.
local stringVariable = "valore"
-- Dichiarazione "Pubblica"
local variableName
-- Dichiarazione "Privata" - analizzata allo stesso modo
local _variableNamestring stringVariable = "valore";
// Dichiarazione pubblica
public string variableName;
// Dichiarazione privata
string variableName;Scopo
In Luau, puoi scrivere variabili e logica in uno scopo più ristretto rispetto alla loro funzione o classe annidando la logica all'interno delle parole chiave do e end, simile alle parentesi graffe {} in C#. Per ulteriori dettagli, vedere Scopo.
local outerVar = 'Testo di ambito esterno'
do
-- Modifica 'outerVar'
outerVar = 'Testo modificato dell\'ambito interno'
-- Introduci una variabile locale
local innerVar = 'Testo di ambito interno'
print('1: ' .. outerVar) -- stampa "1: Testo modificato dell'ambito interno"
print('2: ' .. innerVar) -- stampa "2: Testo di ambito interno"
end
print('3: ' .. outerVar) -- stampa "3: "Testo modificato dell'ambito interno"
-- Tentare di stampare 'innerVar' qui fallirebbevar outerVar = "Testo di ambito esterno";
{
// Modifica 'outerVar'
outerVar = "Testo modificato dell'ambito interno";
// Introduci una variabile locale
var innerVar = "Testo di ambito interno";
Console.WriteLine("1: " + outerVar); // stampa "1: Testo modificato dell'ambito interno"
Console.WriteLine("2: " + innerVar); // stampa "2: Testo di ambito interno"
}
Console.WriteLine("3: " + outerVar); // stampa "3: "Testo modificato dell'ambito interno"
// Tentare di stampare 'innerVar' qui fallirebbeDichiarazioni condizionali
-- Una condizione
if boolExpression then
doSomething()
end
-- Più condizioni
if not boolExpression then
doSomething()
elseif otherBoolExpression then
doSomething()
else
doSomething()
end// Una condizione
if (boolExpression) {
doSomething();
}
// Più condizioni
if (!boolExpression) {
doSomething();
}
else if (otherBoolExpression) {
doSomething();
}
else {
doSomething();
}Operatore condizionale
local max = if x > y then x else yint max = (x > y) ? x : y;Cicli
Per saperne di più sui cicli in Luau, vedere Strutture di Controllo.
Cicli while e repeat
while boolExpression do
doSomething()
end
repeat
doSomething()
until not boolExpressionwhile (boolExpression) {
doSomething();
}
do {
doSomething();
} while (boolExpression)Cicli for
-- Ciclo in avanti
for i = 1, 10 do
doSomething()
end
-- Ciclo inverso
for i = 10, 1, -1 do
doSomething()
end// Ciclo in avanti
for (int i = 1; i <= 10; i++) {
doSomething();
}
// Ciclo inverso
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 supporta anche iterazione generalizzata, che semplifica ulteriormente il lavoro con le tabelle.
Funzioni
Per saperne di più sulle funzioni in Luau, vedere Funzioni.
Funzioni generiche
-- Funzione generica
local function increment(number)
return number + 1
end// Funzione generica
int increment(int number) {
return number + 1;
}Numero di argomenti variabili
-- Numero di argomenti variabili
local function variableArguments(...)
print(...)
end// Numero di argomenti variabili
void variableArguments(params string[] inventoryItems) {
for (item in inventoryItems) {
Console.WriteLine(item);
}
}Argomenti nominativi
-- Argomenti nominativi
local function namedArguments(args)
return args.name .. "'s compleanno: " .. args.dob
end
namedArguments{name="Bob", dob="1/4/2000"}// Argomenti nominativi
string namedArguments(string name, string dob) {
return name + "'s compleanno: " + dob;
}
namedArguments(name: "Bob", dob: "1/4/2000");Strutture try-catch
local function fireWeapon()
if not weaponEquipped then
error("Nessuna arma equipaggiata!")
end
-- Procedi...
end
local success, errorMessage = pcall(fireWeapon)
if not success then
print(errorMessage)
endvoid fireWeapon() {
if (!weaponEquipped) {
// Usa un'eccezione definita dall'utente
throw new InvalidWeaponException("Nessuna arma equipaggiata!");
}
// Procedi...
}
try {
fireWeapon();
} catch (InvalidWeaponException ex) {
// Si è verificato un errore
}