0Pricing
Lua Academy · レッスン

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
end

if/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)   -- Guest

and/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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. if、elseif、else文
  2. whileループとrepeat-untilループ
  3. 数値forループ
  4. ジェネリックforとbreak
← Lua Academyに戻る