0Pricing
Lua Academy · บทเรียน

คำสั่ง if, elseif และ else

เขียนตรรกะการแตกแขนงตามเงื่อนไขด้วยไวยากรณ์ if/elseif/else ของ Lua

คำสั่ง if, elseif และ else เป็นบทเรียน Lua Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน 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 ในภาษาอื่น ตรงที่ elseif ของ Lua เป็นคำสำคัญคำเดียว (ไม่ใช่ 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 จะคืนค่าที่เป็นจริงตัวแรกหรือค่าตัวสุดท้าย จึงสามารถใช้สร้างรูปแบบการกำหนดค่าเริ่มต้นที่เป็นสำนวนได้

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 ก็ต่อเมื่อมีเนื้อหาเป็นไบต์เดียวกันและมีความยาวเท่ากัน 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” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Lua Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Lua Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “คำสั่ง if, elseif และ else”

เขียนตรรกะการแตกแขนงตามเงื่อนไขด้วยไวยากรณ์ if/elseif/else ของ Lua คุณปฏิบัติ Lua Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Lua Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Lua Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 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