ภาพรวมชนิดข้อมูลของ 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)) -- nilnil: การไม่มีค่า
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") endnumber: จำนวนเต็มและจำนวนทศนิยม
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"]) -- 30function: ค่าแบบชั้นหนึ่ง
ฟังก์ชันใน 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, Luauserdata และ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ภาพรวมชนิดข้อมูลของ Lua
- การประกาศตัวแปรใน Lua
- ตัวดำเนินการเลขคณิตและความสัมพันธ์
- การบังคับและการแปลงชนิดข้อมูล