Luau と C# の比較

*このコンテンツは、ベータ版のAI(人工知能)を使用して翻訳されており、エラーが含まれている可能性があります。このページを英語で表示するには、 こちら をクリックしてください。

Roblox では Luau プログラミング言語を使用しています。以下のコードサンプルと表は、C# と Luau の構文の違いのいくつかを示しています。

行の終わり

Luau ではセミコロンは必要ありませんが、構文を壊すことはありません。

予約語

以下の表には、Luau の予約語とそれに対応する C# の予約語が示されています。すべての C# の予約語が示されているわけではないことに注意してください。

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

コメント

Luau のコメント

-- 1 行コメント
--[[ 出力結果:
ブロックコメント
--]]
C# のコメント

// 1 行コメント
/*
ブロックコメント
*/

文字列

Luau の文字列

-- 複数行の文字列
local multiLineString = [[これは文字列であり、
印刷されたときに
複数行に表示されます]]
-- 連結
local s1 = "これは文字列です "
local s2 = "2つの部分で構成されています。"
local endString = s1 .. s2
C# の文字列

// 複数行の文字列
string multiLineString1 = "これは文字列であり、\n印刷されたときに\n複数行に表示されます。";
string multiLineString2 = @"これは文字列であり、
印刷されたときに
複数行に表示されます。";
// 連結
string s1 = "これは文字列です ";
string s2 = "2つの部分で構成されています。";
string endString = s1 + s2;

テーブル

Luau におけるテーブルの詳細については、テーブルを参照してください。

辞書テーブル

C# と同様に、Luau のテーブルを辞書として使用できます。

Luau の辞書テーブル

local dictionary = {
val1 = "これ",
val2 = "は"
}
print(dictionary.val1) -- 'これ' を出力
print(dictionary["val1"]) -- 'これ' を出力
dictionary.val1 = nil -- テーブルから 'val1' を削除
dictionary["val3"] = "辞書" -- 'val3' を上書きするか、新しいキーと値のペアを設定
C# の辞書テーブル

Dictionary dictionary = new Dictionary()
{
{ "val1", "これ" },
{ "val2", "は" }
};
Console.WriteLine(dictionary["val1"]); // 'これ' を出力
dictionary.Remove("val1"); // 辞書から 'val1' を削除
dictionary["val3"] = "辞書"; // 'val3' を上書きするか、新しいキーと値のペアを設定
dictionary.Add("val3", "辞書"); // 新しいキーと値のペアを作成

数値インデックス付きテーブル

C# と同様に、Luau のテーブルを配列として使用できます。インデックスは Luau では 1 から、C# では 0 から始まります。

Luau の数値インデックス付きテーブル

local npcAttributes = {"強い", "賢い"}
print(npcAttributes[1]) -- '強い' を出力
print(#npcAttributes) -- リストのサイズを出力
-- リストに追加
table.insert(npcAttributes, "謙虚")
-- 別の方法...
npcAttributes[#npcAttributes+1] = "謙虚"
-- リストの先頭に挿入
table.insert(npcAttributes, 1, "勇敢")
-- 与えられたインデックスのアイテムを削除
table.remove(npcAttributes, 3)
C# の数値インデックス付きテーブル

List npcAttributes = new List{"強い", "賢い"};
Console.WriteLine(npcAttributes[0]); // '強い' を出力
Console.WriteLine(npcAttributes.Count); // リストのサイズを出力
// リストに追加
npcAttributes.Add("謙虚");
// 別の方法...
npcAttributes.Insert(npcAttributes.Count, "謙虚");
// リストの先頭に挿入
npcAttributes.Insert(0, "勇敢");
// 与えられたインデックスのアイテムを削除
npcAttributes.Remove(2);

演算子

条件演算子

演算子LuauC#
等しい====
より大きい>>
より小さい<<
以上>=>=
以下<=<=
等しくない~=!=
そしてand&&
またはor||

算術演算子

LuauC#
加算++
減算--
乗算**
除算//
剰余%%
べき乗^**

変数

Luau では、変数を宣言する際にその型を指定する必要はありません。Luau の変数にはアクセス修飾子がありませんが、可読性のために「private」変数にはアンダースコアを接頭辞として付けることができます。

Luau の変数

local stringVariable = "値"
-- "公開" 宣言
local variableName
-- "プライベート" 宣言 - 同じように解析されます
local _variableName
C# の変数

string stringVariable = "値";
// 公開宣言
public string variableName
// プライベート宣言
string variableName;

スコープ

Luau では、関数やクラスよりも狭いスコープで変数やロジックを書くことができ、doend キーワードでロジックをネストすることで、C# の中かっこ {} に似ています。詳細については、スコープを参照してください。

Luau のスコープ

local outerVar = '外部スコープのテキスト'
do
-- 'outerVar' を修正
outerVar = '内部スコープで修正されたテキスト'
-- ローカル変数を定義
local innerVar = '内部スコープのテキスト'
print('1: ' .. outerVar) -- "1: 内部スコープで修正されたテキスト" と表示される
print('2: ' .. innerVar) -- "2: 内部スコープのテキスト" と表示される
end
print('3: ' .. outerVar) -- "3: 内部スコープで修正されたテキスト" と表示される
-- ここで 'innerVar' を印刷しようとすると失敗します
C# のスコープ

var outerVar = "外部スコープのテキスト";
{
// 'outerVar' を修正
outerVar = "内部スコープで修正されたテキスト";
// ローカル変数を定義
var innerVar = "内部スコープのテキスト";
Console.WriteLine("1: " + outerVar); // "1: 内部スコープで修正されたテキスト" と表示される
Console.WriteLine("2: " + innerVar); // "2: 内部スコープのテキスト" と表示される
}
Console.WriteLine("3: " + outerVar); // "3: 内部スコープで修正されたテキスト" と表示される
// ここで 'innerVar' を印刷しようとすると失敗します

条件文

Luau の条件文

-- 1 つの条件
if boolExpression then
doSomething()
end
-- 複数の条件
if not boolExpression then
doSomething()
elseif otherBoolExpression then
doSomething()
else
doSomething()
end
C# の条件文

// 1 つの条件
if (boolExpression) {
doSomething();
}
// 複数の条件
if (!boolExpression) {
doSomething();
}
else if (otherBoolExpression) {
doSomething();
}
else {
doSomething();
}

条件演算子

Luau の条件演算子

local max = if x > y then x else y
C# の条件演算子

int max = (x > y) ? x : y;

ループ

Luau のループについて詳細を学ぶには、制御構造を参照してください。

while と repeat ループ

Luau の while と repeat ループ

while boolExpression do
doSomething()
end
repeat
doSomething()
until not boolExpression
C# の while と repeat ループ

while (boolExpression) {
doSomething();
}
do {
doSomething();
} while (boolExpression)

for ループ

Luau の汎用 for ループ

-- 前方ループ
for i = 1, 10 do
doSomething()
end
-- 逆向きループ
for i = 10, 1, -1 do
doSomething()
end
C# の汎用 for ループ

// 前方ループ
for (int i = 1; i <= 10; i++) {
doSomething();
}
// 逆向きループ
for (int i = 10; i >= 1; i--) {
doSomething();
}
Luau のテーブルに対する for ループ

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
C# のリストに対する for ループ

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 はまた、テーブルを扱う際にさらに簡素化する一般化されたイテレーションもサポートしています。

関数

Luau の関数について詳細を学ぶには、関数を参照してください。

汎用関数

Luau の汎用関数

-- 汎用関数
local function increment(number)
return number + 1
end
C# の汎用関数

// 汎用関数
int increment(int number) {
return number + 1;
}

可変引数

Luau の可変引数

-- 可変引数
local function variableArguments(...)
print(...)
end
C# の可変引数

// 可変引数
void variableArguments(params string[] inventoryItems) {
for (item in inventoryItems) {
Console.WriteLine(item);
}
}

名前付き引数

Luau の名前付き引数

-- 名前付き引数
local function namedArguments(args)
return args.name .. "の誕生日: " .. args.dob
end
namedArguments{name="ボブ", dob="4/1/2000"}
C# の名前付き引数

// 名前付き引数
string namedArguments(string name, string dob) {
return name + "の誕生日: " + dob;
}
namedArguments(name: "ボブ", dob: "4/1/2000");

try-catch 構造

Luau の try/catch 構造

local function fireWeapon()
if not weaponEquipped then
error("武器が装備されていません!")
end
-- 続行...
end
local success, errorMessage = pcall(fireWeapon)
if not success then
print(errorMessage)
end
C# の try/catch 構造

void fireWeapon() {
if (!weaponEquipped) {
// ユーザー定義の例外を使用
throw new InvalidWeaponException("武器が装備されていません!");
}
// 続行...
}
try {
fireWeapon();
} catch (InvalidWeaponException ex) {
// エラーが発生しました
}
©2026 Roblox Corporation。Roblox(ロブロックス)、RobloxロゴおよびPowering Imaginationは、米国並びにその他の国における登録商標および非登録商標です。