Comparação entre Luau e C#

*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.

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#.

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

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 linhas
local multiLineString = [[Esta é uma string que,
quando impressa, aparece
em várias linhas]]
-- Concatenação
local s1 = "Esta é uma string "
local s2 = "feita com duas partes."
local endString = s1 .. s2
Strings em C#

// String de várias linhas
string multiLineString1 = "Esta é uma string que,\nquando impressa, aparece\n em várias linhas.";
string multiLineString2 = @"Esta é uma string que,
quando impressa, aparece
em várias linhas";
// Concatenação
string 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 Luau

local dictionary = {
val1 = "isto",
val2 = "é"
}
print(dictionary.val1) -- Saída 'isto'
print(dictionary["val1"]) -- Saída 'isto'
dictionary.val1 = nil -- Remove 'val1' da tabela
dictionary["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ário
dictionary["val3"] = "um dicionário"; // Sobrescreve 'val3' ou define um novo par chave-valor
dictionary.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 Luau

local npcAttributes = {"forte", "inteligente"}
print(npcAttributes[1]) -- Saída 'forte'
print(#npcAttributes) -- Saída do tamanho da lista
-- Adicionando à lista
table.insert(npcAttributes, "humilde")
-- Outra forma...
npcAttributes[#npcAttributes+1] = "humilde"
-- Inserindo no início da lista
table.insert(npcAttributes, 1, "corajoso")
-- Remover item em um índice dado
table.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 à lista
npcAttributes.Add("humilde");
// Outra forma...
npcAttributes.Insert(npcAttributes.Count, "humilde");
// Inserindo no início da lista
npcAttributes.Insert(0, "corajoso");
// Remover item em um índice dado
npcAttributes.RemoveAt(2);

Operadores

Operadores condicionais

OperadorLuauC#
Igual a====
Maior que>>
Menor que<<
Maior ou igual a>=>=
Menor ou igual a<=<=
Diferente~=!=
Eand&&
Ouor||

Operadores aritméticos

LuauC#
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 Luau

local stringVariable = "valor"
-- Declaração "Pública"
local variableName
-- Declaração "Privada" - interpretada da mesma forma
local _variableName
Variáveis em C#

string stringVariable = "valor";
// Declaração pública
public string variableName;
// Declaração privada
string 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 Luau

local outerVar = 'Texto de escopo externo'
do
-- Modifica 'outerVar'
outerVar = 'Texto modificado de escopo interno'
-- Introduz uma variável local
local innerVar = 'Texto de escopo interno'
print('1: ' .. outerVar) -- imprime "1: Texto modificado de escopo interno"
print('2: ' .. innerVar) -- imprime "2: Texto de escopo interno"
end
print('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 local
var 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ção
if boolExpression then
doSomething()
end
-- Múltiplas condições
if not boolExpression then
doSomething()
elseif otherBoolExpression then
doSomething()
else
doSomething()
end
Declarações Condicionais em C#

// Uma condição
if (boolExpression) {
doSomething();
}
// Múltiplas condições
if (!boolExpression) {
doSomething();
}
else if (otherBoolExpression) {
doSomething();
}
else {
doSomething();
}

Operador condicional

Operador Condicional em Luau

local 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 Luau

while boolExpression do
doSomething()
end
repeat
doSomething()
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 frente
for i = 1, 10 do
doSomething()
end
-- Laço reverso
for i = 10, 1, -1 do
doSomething()
end
Laços For Genéricos em C#

// Laço para frente
for (int i = 1; i <= 10; i++) {
doSomething();
}
// Laço reverso
for (int i = 10; i >= 1; i--) {
doSomething();
}
Laços For Sobre Tabelas em 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
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
}
©2026 Roblox Corporation, Roblox, o logotipo Roblox e Powering Imagination estão entre nossas marcas registradas e não registradas nos EUA e em outros países.