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
Commenti in Luau-- Commento su una sola riga--[[ Risultato dell'output:Commento su più righe--]]
Commenti in C#// Commento su una sola riga/*Commento su più righe*/
Stringhe
Stringhe in Luau-- Stringa su più righelocal multiLineString = [[Questa è una stringa che,quando stampata, apparesu più righe]]-- Concatenazionelocal s1 = "Questa è una stringa "local s2 = "composta da due parti."local endString = s1 .. s2
Stringhe in C#// Stringa su più righestring multiLineString1 = "Questa è una stringa che,\nquando stampata, appare\n su più righe.";string multiLineString2 = @"Questa è una stringa che,quando stampata, apparesu più righe";// Concatenazionestring 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#.
Tabelle Dizionario in Luaulocal dictionary = {val1 = "questo",val2 = "è"}print(dictionary.val1) -- Stampa 'questo'print(dictionary["val1"]) -- Stampa 'questo'dictionary.val1 = nil -- Rimuove 'val1' dalla tabelladictionary["val3"] = "un dizionario" -- Sovrascrive 'val3' o imposta un nuovo paio chiave-valore
Tabelle Dizionario in C#Dictionary dictionary = new Dictionary(){{ "val1", "questo" },{ "val2", "è" }};Console.WriteLine(dictionary["val1"]); // Stampa 'questo'dictionary.Remove("val1"); // Rimuove 'val1' dal dizionariodictionary["val3"] = "un dizionario"; // Sovrascrive 'val3' o imposta un nuovo paio chiave-valoredictionary.Add("val3", "un dizionario"); // Crea un nuovo paio chiave-valore
Tabelle 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#.
Tabelle Indicizzate Numericamente in Luaulocal npcAttributes = {"forte", "intelligente"}print(npcAttributes[1]) -- Stampa 'forte'print(#npcAttributes) -- Stampa la dimensione dell'elenco-- Aggiungi alla listatable.insert(npcAttributes, "umile")-- Un altro modo...npcAttributes[#npcAttributes+1] = "umile"-- Inserisci all'inizio della listatable.insert(npcAttributes, 1, "coraggioso")-- Rimuovi l'elemento a un dato indicetable.remove(npcAttributes, 3)
Tabelle Indicizzate Numericamente in C#List npcAttributes = new List{"forte", "intelligente"};Console.WriteLine(npcAttributes[0]); // Stampa 'forte'Console.WriteLine(npcAttributes.Count); // Stampa la dimensione dell'elenco// Aggiungi alla listanpcAttributes.Add("umile");// Un altro modo...npcAttributes.Insert(npcAttributes.Count, "umile");// Inserisci all'inizio della listanpcAttributes.Insert(0, "coraggioso");// Rimuovi l'elemento a un dato indicenpcAttributes.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à.
Variabili in Luaulocal stringVariable = "valore"-- Dichiarazione "Pubblica"local variableName-- Dichiarazione "Privata" - analizzata allo stesso modolocal _variableName
Variabili in C#string stringVariable = "valore";// Dichiarazione pubblicapublic string variableName;// Dichiarazione privatastring 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.
Scoping in Luaulocal outerVar = 'Testo di ambito esterno'do-- Modifica 'outerVar'outerVar = 'Testo modificato dell\'ambito interno'-- Introduci una variabile localelocal innerVar = 'Testo di ambito interno'print('1: ' .. outerVar) -- stampa "1: Testo modificato dell'ambito interno"print('2: ' .. innerVar) -- stampa "2: Testo di ambito interno"endprint('3: ' .. outerVar) -- stampa "3: "Testo modificato dell'ambito interno"-- Tentare di stampare 'innerVar' qui fallirebbe
Scoping in C#var outerVar = "Testo di ambito esterno";{// Modifica 'outerVar'outerVar = "Testo modificato dell'ambito interno";// Introduci una variabile localevar 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 fallirebbe
Dichiarazioni condizionali
Dichiarazioni Condizionali in Luau-- Una condizioneif boolExpression thendoSomething()end-- Più condizioniif not boolExpression thendoSomething()elseif otherBoolExpression thendoSomething()elsedoSomething()end
Dichiarazioni Condizionali in C#// Una condizioneif (boolExpression) {doSomething();}// Più condizioniif (!boolExpression) {doSomething();}else if (otherBoolExpression) {doSomething();}else {doSomething();}
Operatore condizionale
Operatore Condizionale in Luaulocal max = if x > y then x else y
Operatore Condizionale in C#int max = (x > y) ? x : y;
Cicli
Per saperne di più sui cicli in Luau, vedere Strutture di Controllo.
Cicli while e repeat
Cicli While e Repeat in Luauwhile boolExpression dodoSomething()endrepeatdoSomething()until not boolExpression
Cicli While e Repeat in C#while (boolExpression) {doSomething();}do {doSomething();} while (boolExpression)
Cicli for
Cicli For Generici in Luau-- Ciclo in avantifor i = 1, 10 dodoSomething()end-- Ciclo inversofor i = 10, 1, -1 dodoSomething()end
Cicli For Generici in C#// Ciclo in avantifor (int i = 1; i <= 10; i++) {doSomething();}// Ciclo inversofor (int i = 10; i >= 1; i--) {doSomething();}
Cicli For sulle Tabelle in Luaulocal abcList = {"a", "b", "c"}for i, v in ipairs(abcList) doprint(v)endlocal abcDictionary = { a=1, b=2, c=3 }for k, v in pairs(abcDictionary) doprint(k, v)end
Cicli For sulle Liste 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 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
Funzioni Generiche in Luau
-- Funzione generica
local function increment(number)
return number + 1
end
Funzioni Generiche in C#
// Funzione generica
int increment(int number) {
return number + 1;
}
Numero di argomenti variabili
Numero di Argomenti Variabili in Luau
-- Numero di argomenti variabili
local function variableArguments(...)
print(...)
end
Numero di Argomenti Variabili in C#
// Numero di argomenti variabili
void variableArguments(params string[] inventoryItems) {
for (item in inventoryItems) {
Console.WriteLine(item);
}
}
Argomenti nominativi
Argomenti Nominativi in Luau
-- Argomenti nominativi
local function namedArguments(args)
return args.name .. "'s compleanno: " .. args.dob
end
namedArguments{name="Bob", dob="1/4/2000"}
Argomenti Nominativi in C#
// Argomenti nominativi
string namedArguments(string name, string dob) {
return name + "'s compleanno: " + dob;
}
namedArguments(name: "Bob", dob: "1/4/2000");
Strutture try-catch
Strutture Try/Catch in Luau
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)
end
Strutture Try/Catch in C#
void 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
}