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

ภาพรวมชนิดข้อมูลของ Lua

สำรวจชนิดข้อมูล nil, boolean, number, string, table, function และ userdata

ภาพรวมชนิดข้อมูลของ Lua เป็นบทเรียน Lua Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Lua Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Lua Academy มีบทเรียนทั้งหมด 4 บทเรียน

ยินดีต้อนรับสู่ Lua

Lua เป็นภาษาสคริปต์ที่มีขนาดเล็ก ทำงานรวดเร็ว และฝังรวมได้ ซึ่งใช้ในเอนจินเกม เว็บเซิร์ฟเวอร์ และระบบฝังตัว ก่อนเขียนโปรแกรมจริง คุณจำเป็นต้องเข้าใจก่อนว่า Lua แทนข้อมูลอย่างไร

Lua มี ชนิดข้อมูลพื้นฐาน 8 ชนิด: nil, boolean, number, string, table, function, userdata และ thread ค่าทุกค่าของ Lua จะอยู่ในชนิดใดชนิดหนึ่งจากชนิดเหล่านี้เท่านั้น

-- Check the type of any value with type()
print(type(42))        -- number
print(type("hello"))   -- string
print(type(true))      -- boolean
print(type(nil))       -- nil

nil: การไม่มีค่า

nil คือวิธีที่ Lua ใช้แทน ความว่างเปล่า หรือ การไม่มีค่า โดยเป็นค่าเดียวของชนิดนี้ ตัวแปรที่ไม่เคยถูกกำหนดค่าจะมีค่าเป็น nil โดยอัตโนมัติ

การกำหนด nil ให้ตัวแปรส่วนกลางจะเท่ากับการลบตัวแปรนั้น ในตาราง การกำหนดคีย์ให้เป็น nil จะลบรายการนั้นออกทั้งหมด

-- Unassigned variables are nil
print(x)          -- nil

x = 10
print(x)          -- 10

x = nil
print(x)          -- nil (variable is gone)

boolean: true และ false

ชนิด boolean มีค่าพอดีสองค่า ได้แก่ true และ false กฎค่าความจริงของ Lua เรียบง่ายแต่สำคัญ: มีเพียง nil และ false เท่านั้นที่ถือเป็นเท็จ ส่วนค่าอื่นทั้งหมด — รวมถึงเลข 0 และสตริงว่าง "" — ถือเป็นจริง

เรื่องนี้แตกต่างจากหลายภาษา ซึ่งถือว่า 0 หรือ "" เป็นเท็จ

-- Lua truthiness examples
if 0 then print("0 is truthy!") end       -- prints!
if "" then print("empty str is truthy!") end -- prints!
if nil then print("nil") else print("nil is falsy") end
if false then print("false") else print("false is falsy") end

number: จำนวนเต็มและจำนวนทศนิยม

Lua 5.3 ขึ้นไปมีชนิดย่อยของ number สองชนิด ได้แก่ จำนวนเต็ม และ จำนวนทศนิยม จำนวนเต็มเป็นค่าขนาด 64 บิตที่แม่นยำ ส่วนจำนวนทศนิยมเป็นเลขทศนิยมความละเอียดสองเท่าตามมาตรฐาน IEEE 754 ใน Lua 5.1/5.2 จำนวนทั้งหมดเป็นเลขทศนิยมแบบสองเท่า

ฟังก์ชัน math.type() ใช้แยกชนิดย่อยทั้งสองได้ การหารด้วย / จะคืนค่าเป็นจำนวนทศนิยมเสมอ ส่วน // (การหารปัดลง) จะคืนค่าเป็นจำนวนเต็มเมื่อ ตัวถูกดำเนินการทั้งสองเป็นจำนวนเต็ม

print(type(10))       -- number
print(type(10.5))     -- number
print(math.type(10))  -- integer
print(math.type(10.5))-- float
print(10 / 3)         -- 3.3333...
print(10 // 3)        -- 3  (floor division)

string: ข้อความใน Lua

สตริงใน Lua เป็นลำดับไบต์ที่เปลี่ยนแปลงไม่ได้ คุณสามารถกำหนดขอบเขตสตริงด้วยอัญประกาศเดี่ยว อัญประกาศคู่ หรือ วงเล็บเหลี่ยมแบบยาว [[...]] สำหรับสตริงหลายบรรทัด สตริงในวงเล็บเหลี่ยมแบบยาวจะละเว้นขึ้นบรรทัดใหม่ครั้งแรก และคงทุกอย่างที่เหลือไว้ตามตัวอักษร

สตริงของ Lua ถูกจัดเก็บแบบใช้ค่าร่วมกัน ดังนั้นสตริงที่เหมือนกันจึงใช้หน่วยความจำร่วมกัน ตัวดำเนินการหาความยาว # จะคืนค่าจำนวนไบต์

local s1 = 'single quotes'
local s2 = "double quotes"
local s3 = [[multi-line
long string]]

print(#s1)           -- 13
print(type(s1))      -- string
print(s1 .. " works") -- concatenation with ..

table: ภาชนะอเนกประสงค์

ชนิด table เป็นโครงสร้างข้อมูลแบบประกอบเพียงชนิดเดียวของ Lua แต่มีความสามารถมากพอที่จะใช้สร้างอาร์เรย์ พจนานุกรม ออบเจ็กต์ เซต และอื่น ๆ ตารางเป็นอาร์เรย์เชิงสัมพันธ์ที่จับคู่คีย์กับค่า โดยคีย์จะเป็นค่าใดก็ได้ที่ไม่ใช่ nil และไม่ใช่ NaN

ตารางสร้างขึ้นด้วยวงเล็บปีกกา {} ตารางแบบอาร์เรย์จะใช้คีย์จำนวนเต็มที่เริ่มจาก 1

-- Array style
local fruits = {"apple", "banana", "cherry"}
print(fruits[1])   -- apple (1-indexed!)

-- Dictionary style
local person = {name = "Alice", age = 30}
print(person.name) -- Alice
print(person["age"]) -- 30

function: ค่าแบบชั้นหนึ่ง

ฟังก์ชันใน Lua เป็นค่าแบบชั้นหนึ่งที่มีชนิดเป็น function สามารถเก็บไว้ในตัวแปร ส่งเป็นอาร์กิวเมนต์ และคืนค่าจากฟังก์ชันอื่นได้ คุณสมบัตินี้ทำให้ Lua เหมาะกับรูปแบบการเขียนโปรแกรมเชิงฟังก์ชันโดยธรรมชาติ

คุณสามารถกำหนดฟังก์ชันด้วยคีย์เวิร์ด function หรือกำหนดฟังก์ชันนิรนามให้ตัวแปร ทั้งสองรูปแบบมีความหมายเทียบเท่ากัน

-- Two equivalent ways to define a function
function greet(name)
  return "Hello, " .. name
end

local greet2 = function(name)
  return "Hello, " .. name
end

print(type(greet))   -- function
print(greet("Lua"))  -- Hello, Lua

userdata และ thread

userdata ใช้แทนข้อมูล C ใด ๆ ที่แอปพลิเคชันโฮสต์เป็นผู้จัดการ คุณไม่สามารถสร้าง userdata ด้วย Lua ล้วน ๆ ได้ — ค่านี้มาจากส่วนขยาย C หรือสภาพแวดล้อมที่ฝัง Lua เช่นเอนจินเกม ทำให้โค้ด C สามารถเปิดเผยออบเจ็กต์ให้สคริปต์ Lua ใช้งานได้

thread ใช้แทนคอร์รูทีน — เธรดการทำงานอิสระที่มีสแตกของตนเอง เราจะศึกษาคอร์รูทีนในบทเรียนเฉพาะต่อไป สำหรับตอนนี้ โปรดทราบว่า coroutine.create() จะคืนค่าชนิด thread

-- thread type via coroutine
local co = coroutine.create(function()
  print("coroutine body")
end)

print(type(co))  -- thread

-- userdata comes from C, not creatable in pure Lua
-- type(io.stdin) == "file" is a userdata variant

ใช้ type() ตรวจสอบค่า

ฟังก์ชันในตัว type() จะคืนค่าเป็น สตริง ที่ระบุชนิดของอาร์กิวเมนต์เสมอ ฟังก์ชันนี้มีประโยชน์สำหรับการเขียนโปรแกรมเชิงป้องกันและการแก้ไขข้อบกพร่อง คุณสามารถเปรียบเทียบผลลัพธ์กับสตริงชื่อชนิดได้โดยตรง

โปรดสังเกตว่า type(nil) จะคืนสตริง "nil" ไม่ใช่ค่า nil เอง จึงช่วยให้ตรวจสอบได้อย่างปลอดภัยว่าตัวแปรมีค่า nil หรือไม่โดยไม่เกิดข้อผิดพลาด

local values = {42, "hi", true, nil, {}, function() end}

-- Note: nil in table stops ipairs early
for i = 1, 3 do
  print(i, type(values[i]))
end
-- 1  number
-- 2  string
-- 3  boolean

ความแตกต่างของชนิดข้อมูลจากภาษาอื่น

หากคุณเคยใช้ JavaScript, Python หรือ Java กฎชนิดข้อมูลบางอย่างของ Lua อาจทำให้ประหลาดใจ Lua ไม่มีชนิดจำนวนเต็มแยกต่างหากที่ type() มองเห็นได้ — ทั้งจำนวนเต็มและจำนวนทศนิยมจะคืนค่าเป็น "number" อาร์เรย์ก็ไม่มีชนิดของตัวเอง — เป็นเพียงตารางเท่านั้น ไม่มีคลาสใน Lua — ออบเจ็กต์คือตารางที่มีเมตาตาราง

การเข้าใจความแตกต่างเหล่านี้ช่วยป้องกันข้อผิดพลาดที่พบบ่อยเมื่อย้ายไปมาระหว่างภาษา

-- No separate array type
local arr = {1, 2, 3}
print(type(arr))      -- table (not array!)

-- No separate integer type visible
print(type(1))        -- number
print(type(1.0))      -- number

-- math.type distinguishes
print(math.type(1))   -- integer
print(math.type(1.0)) -- float

ตรวจสอบอย่างรวดเร็ว

type(0) คืนค่าอะไรใน Lua

สรุป: ภาพรวมชนิดข้อมูลของ Lua

คุณได้เรียนรู้ชนิดข้อมูลทั้ง 8 ชนิดของ Lua แล้ว:

  • nil — การไม่มีค่า; ถือเป็นเท็จ
  • boolean — true/false; มีเพียง nil และ false ที่ถือเป็นเท็จ
  • number — จำนวนเต็มหรือจำนวนทศนิยม; ใช้ math.type() เพื่อแยกชนิด
  • string — ลำดับไบต์ที่เปลี่ยนแปลงไม่ได้; ใช้ .. เพื่อเชื่อมสตริง
  • table — ภาชนะอเนกประสงค์สำหรับอาร์เรย์และพจนานุกรม
  • function — ค่าแบบชั้นหนึ่งที่เก็บในตัวแปรได้
  • userdata — ข้อมูล C ที่เปิดให้ Lua ใช้งาน
  • thread — ตัวจัดการคอร์รูทีน

ถัดไป: การประกาศตัวแปร — ขอบเขตส่วนกลางเทียบกับขอบเขตเฉพาะที่

คำถามที่พบบ่อย

บทเรียน “ภาพรวมชนิดข้อมูลของ Lua” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “ภาพรวมชนิดข้อมูลของ Lua”

สำรวจชนิดข้อมูล nil, boolean, number, string, table, function และ userdata คุณปฏิบัติ Lua Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

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

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

บทเรียน “ภาพรวมชนิดข้อมูลของ Lua” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Lua Academy นี้ได้ไหม

ได้ บทเรียน Lua Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ภาพรวมชนิดข้อมูลของ Lua
  2. การประกาศตัวแปรใน Lua
  3. ตัวดำเนินการเลขคณิตและความสัมพันธ์
  4. การบังคับและการแปลงชนิดข้อมูล
← กลับไปที่ Lua Academy