Menu
CoddyTech

スコープとブロック

CoddyのLuaジャーニー「基礎」セクションの一部。レッスン 86/90。

Luaでは、do...endブロックを使って、コード内のどこにでも新しいスコープを作成できます。これらのブロックを使うと、ローカル変数にアクセスできる場所を正確に制御でき、変数のスコープを細かく管理できます。

do...endブロックを使って新しいスコープを作成する方法は次のとおりです。

local outerVar = "I'm outside"

do
    local innerVar = "I'm inside"
    print(outerVar)  -- これは動作します
    print(innerVar)  -- これも動作します
end

print(outerVar)  -- これは動作します
print(innerVar)  -- nil が出力されます: innerVar はブロック内にしか存在しません

スコープの強力な点は、異なるブロック内で同じ名前のローカル変数を使うことができ、それぞれが完全に独立していることです。

local name = "Alice"

do
    local name = "Bob"  -- 別の変数!
    print(name)  -- "Bob"を出力する
end

print(name)  -- "Alice"を出力する

各do...endブロックは、ローカル変数のための独立した環境を作成します。ブロック内で宣言された変数は外側のスコープに出ることはできませんが、外側のスコープの変数には内側のブロックからアクセスできます。

challenge icon

チャレンジ

簡単

スコープの異なる場所で同じ名前のローカル変数が完全に別々に扱われることを示すため、入れ子になった do...end ブロックを作成します。

まず、外側のスコープで playerLevel という名前のローカル変数を値 10 で作成し、出力します。

次に、do...end ブロックを作成し、その中で次の操作を行います。

  • playerLevel という名前の新しいローカル変数を値 25 で宣言します
  • この内側の playerLevel を出力します

内側のブロックが終わった後、外側の playerLevel をもう一度出力し、値が変わっていないことを示します。

これにより、異なるスコープにある同じ名前のローカル変数は完全に独立しており、内側の変数が外側の変数に影響しないことがわかります。

自分で試してみよう

-- TODO: ここにコードを書いてください
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

基礎のすべてのレッスン

自分で練習してみよう: Luaオンラインコンパイラ