if、elseif、else文
Luaのif/elseif/else構文で条件分岐のロジックを記述します。
「if、elseif、else文」はCoddyKit上の無料Lua Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLua Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Lua Academyコースには全4レッスンが含まれています。
基本的なif文
if文は条件を評価し、条件が真値の場合にそのブロックを実行します。Luaで偽値なのはfalseとnilだけです。0や""を含め、それ以外はすべて真値です。ブロックはendで終了します。
local score = 85
if score >= 90 then
print("A grade")
end
if score >= 60 then
print("Passing") -- prints
end
if 0 then
print("0 is truthy!") -- prints in Lua
endif/elseif/else
elseifで複数の条件を連結し、elseでフォールバックを指定します。Luaは条件を上から下へ評価し、最初に一致した分岐だけを実行します。他の言語のswitch/caseとは異なり、Luaのelseifは単一のキーワードです(else ifではありません)。
local score = 75
if score >= 90 then
print("A")
elseif score >= 80 then
print("B")
elseif score >= 70 then
print("C") -- prints
elseif score >= 60 then
print("D")
else
print("F")
end条件での論理演算子
Luaでは論理演算子としてand、or、notを使用します。これらは短絡評価を行います。andは最初の偽値、または最後の値を返し、orは最初の真値、または最後の値を返します。これにより、デフォルト値を指定するLuaらしいパターンを利用できます。
local age = 25
local hasID = true
if age >= 18 and hasID then
print("Entry allowed")
end
-- or for defaults
local name = nil
local display = name or "Guest"
print(display) -- Guestand/orによる三項演算子のイディオム
Luaには三項演算子はありませんが、and/orのパターンで近い動作を実現できます。condition and trueVal or falseValという形です。これはtrueValがfalseでもnilでもない場合に機能します。より安全な三項ロジックには、インラインif関数を使用してください。
local x = 10
local label = (x > 5) and "big" or "small"
print(label) -- big
-- Safe ternary function
local function ternary(cond, t, f)
if cond then return t else return f end
end
print(ternary(false, "yes", "no")) -- noネストしたif文
if文は他の分岐の中にネストできます。ネストした各ブロックには、それぞれ独自のendが必要です。深いネストは、早期リターンやガード節を使ってロジックを平坦化できる可能性を示していることがよくあります。
local loggedIn = true
local isAdmin = false
if loggedIn then
if isAdmin then
print("Admin dashboard")
else
print("User dashboard") -- prints
end
else
print("Login required")
endガード節
ガード節とは、関数の先頭で無効なケースや特殊なケースを処理する早期リターンのことです。これによりネストを減らせます。このパターンを使うと、「正常系」のコードがインデントされず、読みやすくなります。
local function processAge(age)
if type(age) ~= "number" then
return nil, "age must be a number"
end
if age < 0 then
return nil, "age cannot be negative"
end
-- happy path
return math.floor(age)
end
print(processAge(25.7)) -- 25
print(processAge(-1)) -- nil age cannot be negative値の比較
Luaの比較演算子には、==(等しい)、~=(等しくない)、<、>、<=、>=があります。~=はLuaの「等しくない」を表す演算子であり、!=ではない点に注意してください。文字列は辞書順で比較されます。文字列と数値を直接比較することはできません。
print(1 == 1) -- true
print(1 ~= 2) -- true
print("abc" < "abd") -- true (lexicographic)
print("10" == 10) -- false (different types)
-- Safe nil check
local val = nil
if val == nil then
print("no value")
end文字列の等価性
Luaでは、2つの文字列のバイト内容と長さが同じである場合に限り、それらは等しいと判定されます。Luaは文字列をインターンするため、等しい文字列は同じメモリを指すことが多く、==によるポインター比較を高速に行えます。文字列の比較にisや参照の等価性を使わないでください。==は常に値で比較します。
local s1 = "hello"
local s2 = "hel" .. "lo"
print(s1 == s2) -- true (same content)
print(s1 == "Hello") -- false (case sensitive)
-- Check for empty string
local name = ""
if name == "" or name == nil then
print("name is empty or nil")
endテーブルと関数の比較
テーブルと関数は内容ではなく参照で比較されます。同じ内容を持つ別々のテーブルリテラルは、同じオブジェクトでない限り等しくありません。__eqなどのメタメソッドを使うと、テーブルに独自の等価性を定義できます。
local t1 = {1, 2, 3}
local t2 = {1, 2, 3}
local t3 = t1
print(t1 == t2) -- false (different objects)
print(t1 == t3) -- true (same reference)
local f1 = function() end
local f2 = function() end
print(f1 == f2) -- false慣用的なパターン
条件分岐でよく使われるLuaのイディオムには、前提条件の検証にassert()を使う、短いデフォルト値の指定にand/orトリックを使う、任意の値をブール値に変換するために二重否定(not not x)を使わない、といったものがあります。
-- assert pattern
local function sqrt(n)
assert(n >= 0, "sqrt of negative")
return math.sqrt(n)
end
-- Convert to boolean
local val = 42
local boolVal = not not val
print(boolVal) -- true
-- Default parameter
local function greet(name)
name = name or "World"
print("Hello, " .. name)
end
greet() -- Hello, Worldクイックチェック
Luaで偽値になるのはどの値ですか?
復習: 条件分岐
まとめ:
if ... elseif ... else ... endは完全な分岐形式です- 偽値は
nilとfalseだけです and/orは短絡評価を行い、オペランドの値を返します- Luaで「等しくない」を表すのは
~=です(!=ではありません) - テーブルと関数は参照で、文字列は値で比較されます
- ネストを減らすにはガード節を使用します
よくある質問
「if、elseif、else文」レッスンは無料ですか?
はい。「if、elseif、else文」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Lua Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Lua Academyコースには全4レッスンが含まれています。
「if、elseif、else文」で何を学びますか?
Luaのif/elseif/else構文で条件分岐のロジックを記述します。 ブラウザで直接実行するハンズオンコードでLua Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Lua Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLua Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「if、elseif、else文」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLua Academyレッスンでコードを書いて実行できますか?
はい。すべてのLua Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- if、elseif、else文
- whileループとrepeat-untilループ
- 数値forループ
- ジェネリックforとbreak