Roblox usa a linguagem de programação Luau. Os seguintes exemplos de código e tabelas indicam algumas das diferenças entre as sintaxes do C# e do Luau.
Quebras de linha
Você não precisa de ponto e vírgula no Luau, mas eles não quebram a sintaxe.
Palavras-chave reservadas
A tabela a seguir possui as palavras-chave reservadas do Luau mapeadas para suas equivalentes em C#. Observe que ela não mostra todas as palavras-chave do C#.
| Luau | C# |
|---|---|
| and | |
| break | break |
| do | do |
| if | if |
| else | else |
| elseif | else if |
| then | |
| end | |
| true | true |
| false | false |
| for | for ou foreach |
| function | |
| in | in |
| local | |
| nil | null |
| not | |
| or | |
| repeat | |
| return | return |
| until | |
| while | while |
Comentários
Comentários em Luau-- Comentário de uma linha--[[ Saída resultante:Comentário de bloco--]]
Comentários em C#// Comentário de uma linha/*Comentário de bloco*/
Strings
Strings em Luau-- String de várias linhaslocal multiLineString = [[Esta é uma string que,quando impressa, apareceem várias linhas]]-- Concatenaçãolocal s1 = "Esta é uma string "local s2 = "feita com duas partes."local endString = s1 .. s2
Strings em C#// String de várias linhasstring multiLineString1 = "Esta é uma string que,\nquando impressa, aparece\n em várias linhas.";string multiLineString2 = @"Esta é uma string que,quando impressa, apareceem várias linhas";// Concatenaçãostring s1 = "Esta é uma string ";string s2 = "feita com duas partes.";string endString = s1 + s2;
Tabelas
Para saber mais sobre tabelas em Luau, veja Tabelas.
Tabelas de dicionário
Você pode usar tabelas no Luau como dicionários, assim como no C#.
Tabelas de Dicionário em Luaulocal dictionary = {val1 = "isto",val2 = "é"}print(dictionary.val1) -- Saída 'isto'print(dictionary["val1"]) -- Saída 'isto'dictionary.val1 = nil -- Remove 'val1' da tabeladictionary["val3"] = "um dicionário" -- Sobrescreve 'val3' ou define um novo par chave-valor
Tabelas de Dicionário em C#Dictionary<string, string> dictionary = new Dictionary<string, string>(){{ "val1", "isto" },{ "val2", "é" }};Console.WriteLine(dictionary["val1"]); // Saída 'isto'dictionary.Remove("val1"); // Remove 'val1' do dicionáriodictionary["val3"] = "um dicionário"; // Sobrescreve 'val3' ou define um novo par chave-valordictionary.Add("val3", "um dicionário"); // Cria um novo par chave-valor
Tabelas indexadas numericamente
Você pode usar tabelas no Luau como arrays, assim como no C#. Os índices começam em 1 no Luau e 0 no C#.
Tabelas Indexadas Numericamente em Luaulocal npcAttributes = {"forte", "inteligente"}print(npcAttributes[1]) -- Saída 'forte'print(#npcAttributes) -- Saída do tamanho da lista-- Adicionando à listatable.insert(npcAttributes, "humilde")-- Outra forma...npcAttributes[#npcAttributes+1] = "humilde"-- Inserindo no início da listatable.insert(npcAttributes, 1, "corajoso")-- Remover item em um índice dadotable.remove(npcAttributes, 3)
Tabelas Indexadas Numericamente em C#List<string> npcAttributes = new List<string>{"forte", "inteligente"};Console.WriteLine(npcAttributes[0]); // Saída 'forte'Console.WriteLine(npcAttributes.Count); // Saída do tamanho da lista// Adicionando à listanpcAttributes.Add("humilde");// Outra forma...npcAttributes.Insert(npcAttributes.Count, "humilde");// Inserindo no início da listanpcAttributes.Insert(0, "corajoso");// Remover item em um índice dadonpcAttributes.RemoveAt(2);
Operadores
Operadores condicionais
| Operador | Luau | C# |
|---|---|---|
| Igual a | == | == |
| Maior que | > | > |
| Menor que | < | < |
| Maior ou igual a | >= | >= |
| Menor ou igual a | <= | <= |
| Diferente | ~= | != |
| E | and | && |
| Ou | or | || |
Operadores aritméticos
| Luau | C# | |
|---|---|---|
| Adição | + | + |
| Subtração | - | - |
| Multiplicação | * | * |
| Divisão | / | / |
| Módulo | % | % |
| Exponenciação | ^ | ** |
Variáveis
No Luau, as variáveis não especificam seu tipo quando você as declara. Variáveis do Luau não têm modificadores de acesso, embora você possa prefixar variáveis "privadas" com um sublinhado para legibilidade.
Variáveis em Luaulocal stringVariable = "valor"-- Declaração "Pública"local variableName-- Declaração "Privada" - interpretada da mesma formalocal _variableName
Variáveis em C#string stringVariable = "valor";// Declaração públicapublic string variableName;// Declaração privadastring variableName;
Escopo
No Luau, você pode escrever variáveis e lógica em um escopo mais restrito do que sua função ou classe, aninhando a lógica dentro das palavras-chave do e end, semelhante às chaves {} no C#. Para mais detalhes, veja Escopo.
Escopo em Luaulocal outerVar = 'Texto de escopo externo'do-- Modifica 'outerVar'outerVar = 'Texto modificado de escopo interno'-- Introduz uma variável locallocal innerVar = 'Texto de escopo interno'print('1: ' .. outerVar) -- imprime "1: Texto modificado de escopo interno"print('2: ' .. innerVar) -- imprime "2: Texto de escopo interno"endprint('3: ' .. outerVar) -- imprime "3: Texto modificado de escopo interno"// Tentar imprimir 'innerVar' aqui falharia
Escopo em C#var outerVar = "Texto de escopo externo";{// Modifica 'outerVar'outerVar = "Texto modificado de escopo interno";// Introduz uma variável localvar innerVar = "Texto de escopo interno";Console.WriteLine("1: " + outerVar); // imprime "1: Texto modificado de escopo interno"Console.WriteLine("2: " + innerVar); // imprime "2: Texto de escopo interno"}Console.WriteLine("3: " + outerVar); // imprime "3: Texto modificado de escopo interno"// Tentar imprimir 'innerVar' aqui falharia
Declarações condicionais
Declarações Condicionais em Luau-- Uma condiçãoif boolExpression thendoSomething()end-- Múltiplas condiçõesif not boolExpression thendoSomething()elseif otherBoolExpression thendoSomething()elsedoSomething()end
Declarações Condicionais em C#// Uma condiçãoif (boolExpression) {doSomething();}// Múltiplas condiçõesif (!boolExpression) {doSomething();}else if (otherBoolExpression) {doSomething();}else {doSomething();}
Operador condicional
Operador Condicional em Luaulocal max = if x > y then x else y
Operador Condicional em C#int max = (x > y) ? x : y;
Laços
Para saber mais sobre laços em Luau, veja Estruturas de Controle.
Laços enquanto e repetir
Laços Enquanto e Repetir em Luauwhile boolExpression dodoSomething()endrepeatdoSomething()until not boolExpression
Laços Enquanto e Repetir em C#while (boolExpression) {doSomething();}do {doSomething();} while (boolExpression);
Laços para
Laços For Genéricos em Luau-- Laço para frentefor i = 1, 10 dodoSomething()end-- Laço reversofor i = 10, 1, -1 dodoSomething()end
Laços For Genéricos em C#// Laço para frentefor (int i = 1; i <= 10; i++) {doSomething();}// Laço reversofor (int i = 10; i >= 1; i--) {doSomething();}
Laços For Sobre Tabelas em 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
Laços For Sobre Listas em 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 também suporta iteração generalizada, o que simplifica ainda mais o trabalho com tabelas.
Funções
Para saber mais sobre funções em Luau, veja Funções.
Funções genéricas
Funções Genéricas em Luau
-- Função genérica
local function increment(number)
return number + 1
end
Funções Genéricas em C#
// Função genérica
int increment(int number) {
return number + 1;
}
Número de argumentos variáveis
Número de Argumentos Variáveis em Luau
-- Número de argumentos variáveis
local function variableArguments(...)
print(...)
end
Número de Argumentos Variáveis em C#
// Número de argumentos variáveis
void variableArguments(params string[] inventoryItems) {
foreach (string item in inventoryItems) {
Console.WriteLine(item);
}
}
Argumentos nomeados
Argumentos Nomeados em Luau
-- Argumentos nomeados
local function namedArguments(args)
return args.name .. "'s birthday: " .. args.dob
end
namedArguments{name="Bob", dob="1/4/2000"}
Argumentos Nomeados em C#
// Argumentos nomeados
string namedArguments(string name, string dob) {
return name + "'s birthday: " + dob;
}
namedArguments(name: "Bob", dob: "1/4/2000");
Estruturas try-catch
Estruturas Try/Catch em Luau
local function fireWeapon()
if not weaponEquipped then
error("Nenhuma arma equipada!")
end
-- Prosseguir...
end
local success, errorMessage = pcall(fireWeapon)
if not success then
print(errorMessage)
end
Estruturas Try/Catch em C#
void fireWeapon() {
if (!weaponEquipped) {
// Usar uma exceção definida pelo usuário
throw new InvalidWeaponException("Nenhuma arma equipada!");
}
// Prosseguir...
}
try {
fireWeapon();
} catch (InvalidWeaponException ex) {
// Um erro foi levantado
}