ภาษา Lua คืออะไร? ใช้ทำอะไร และ มีความน่าสนใจอย่างไร
ถ้าพูดถึงภาษาคอมพิวเตอร์ที่ได้รับความนิยมและถูกนำมาใช้งานในเกมต่าง ๆ ในตอนนี้ หลาย ๆ คนคงจะมีภาษา Lua เป็นหนึ่งภาษาที่อยู่ในความคิดขณะนี้ นอกจากจะเป็นที่นิยมด้านการสร้าง(และการโกง)เกมแล้วนั้น ภาษา Lua ยังสามารถใช้เป็นภาษาที่ใช้อธิบายข้อมูลได้อีกด้วย เนื่องจากอยู่ในรูปแบบภาษาสคริปต์ที่มีขนาดเล็ก ทำให้สามารถประมวลผลได้เร็ว ง่ายและยืดหยุ่น
ภาษา Lua คืออะไร?
ภาษา Lua หรือภาษาลูอา(สามารถอ่านว่าลัวได้)เป็นภาษาสคริปต์ที่สามารถเรียกให้ทำงานได้ทันทีทั้งจากการพิมพ์คำสั่งตรง ๆ หรือการเรียกไฟล์ชุดคำสั่งภาษา Lua โดยไม่ต้องแปลงเป็นไบนารีไฟล์ก่อนโดยเรียกใช้ผ่านคำสั่ง Lua หรืออธิบายได้อย่างง่ายว่า Lua เป็นภาษาโปรแกรมระดับสูงในรูปแบบแปลคำสั่งที่ทำงานเป็นบรรทัด ๆ ไป โดยไม่ต้องคอมไพล์และแปลให้เป็นภาษาเครื่อง จุดเด่นของภาษา Lua คือ ความรวดเร็วและกระชับในการทำงาน มีความยืดหยุ่นในการใช้งาน และสามารถศึกษาทำความเข้าใจได้โดยง่าย
ประวัติภาษา Lua
ภาษา Lua ถูกสร้างขึ้นในปี 1993 โดย Roberto Ierusalimschy, Luiz Henrique de Figueiredo และ Waldemar Celes สมาชิกของกลุ่มกราฟิกเทคโนโลยีคอมพิวเตอร์ (Tecgraf) โดยพัฒนาขึ้นมาจากภาษา C++ จึงทำให้การทำงานมีขนาดเล็ก เบา และรวดเร็ว เพราะเหตุนี้ภาษา Lua จึงถูกนำไปใช้ในการทำงานหลากหลายรูปแบบด้วยกัน ถ้าจะสามารถยกตัวอย่างได้ชัดเจนก็คงจะต้องพูดถึงเกม Roblox ที่สามารถเขียนภาษา Lua ในเกมได้เลย ถึงแม้ว่าภาษา Lua จะเป็นภาษาระดับสูงแต่น้อง ๆ สามารถทำความเข้าใจได้ง่ายในระดับเดียวกับภาษาพื้นฐานอย่าง Python เลยที่เดียว
โปรแกรมสำหรับการเขียนโค้ดในภาษา Lua
ภาษา Lua เป็นซอฟต์แวร์ประเภท Opensource (MIT license สำหรับเวอร์ชัน 5.x) ดังนั้น จึงสามารถใช้งานได้ฟรี และใช้ได้ในหลายแพลตฟอร์ม (multi-platform programming language) เช่น Windows, Linux, Mac OS X เป็นต้น
ภาษา Lua สามารถใช้งานกับบอร์ดไมโครโทรลเลอร์อย่างเช่น ESP8266/NodeMCU, WiFiMCU/EMW3165 ได้ นอกจากนี้ยังมีจุดเด่นอีกอย่างหนึ่งคือสามารถเรียกใช้คำสั่งจากภาษาอื่นได้ (embeddable) มีการนำไปใช้ในการพัฒนาเกมส์ หรือการพัฒนา Mobile Apps อย่างเช่น Corona SDK เป็นต้น
การเรียนรู้ Lua จากตัวอย่าง / Learning Lua by Examples
การเรียนรู้ในการใช้งานภาษา Lua ขั้นแรกเลยคือจะต้องรู้สิ่งจำเป็นที่ควรรู้ก่อนเริ่มเขียนโปรแกรมอย่างส่วนประกอบของภาษาโปรแกรมต่าง ๆ ก่อนที่จะเริ่ม ได่แก่
- ประเภทข้อมูล (Data type) เช่น ตัวเลข ตัวอักษร ตรรกะ(จริง, เท็จ) ชุดข้อมูล วัตถุ
- ตัวดำเนินการ (Operator) เช่น บวก ลบ คูณ หาร มากกว่า น้อยกว่า เท่ากับ และ หรือ ไม่
- ตัวแปร (Variable) คือชื่อที่ใช้อ้างถึงข้อมูลหนึ่ง ๆ เช่น x = 10 หมายถึงตัวแปรชื่อ x เก็บข้อมูลตัวเลขจำนวนเต็มที่มีค่าคือ 10
- โปรแกรมย่อย (Function, Procedure, Subroutine) เป็นการแบ่งส่วนการทำงานของโปรแกรมเป็นกลุ่มย่อยซึ่งสามารถเรียกใช้ซ้ำได้ ในการทำงานแบบ Imperative จะเริ่มทำงานทีละบรรทัดจากบนลงล่างถ้าในโปรแกรมของเรามีการทำงานบางอย่างบ่อย ๆ ก็ต้องมาเขียนคำสั่งเดิมซ้ำ ๆ ซึ่งการแยกส่วนที่ทำงานซ้ำออกมาเป็นโปรแกรมย่อยจะช่วยลดการซ้ำซ้อนตรงนี้ได้
- คำสั่ง (Statement) และ นิพจน์ (Expression) ตัวแรกคือคำสั่งหรือชุดของคำสั่งในโปรแกรมส่วนตัวหลังคือ Statement ประเภทหนึ่งที่ประกอบด้วย ข้อมูล และ ตัวดำเนินการ หรือ การเรียกใช้ฟังก์ชัน หรือจะเป็น ค่า (value) โดด ๆ ก็ได้ เช่น 1+2 หรือ sin(90) หรือ a<b หรือ 20
โดยทั่วไปการเรียนรู้ภาษาคอมพิวเตอร์ก็มักจะอาศัยโค้ดตัวอย่าง เริ่มจากที่มีความซับซ้อนจากน้อยไปหามาก และถ้ามีความรู้ภาษาคอมพิวเตอร์อื่นอยู่บ้างในระดับหนึ่ง ก็ควรศึกษาโดยเปรียบเทียบกับภาษาเดิมที่เคยรู้จักในขณะที่กำลังศึกษาภาษา Lua ซึ่งหัวข้อในการเรียนรู้ภาษา Lua ขั้นพื้นฐานได้แก่
- การเขียนคำอธิบายโค้ด (Code Comment)
- การใช้คำสั่งแสดงข้อความเป็นเอาต์พุตหรือรับจากอินพุตของโปรแกรม (Standard I/O)
- การประกาศใช้งานตัวแปร (Variable Declaration)
- คำสงวนในภาษา Lua (Reserved Words)
- ชนิดข้อมูลพื้นฐาน (Built-in Data Types)
- ชนิดข้อมูลที่เป็นตัวเลข (Numbers)
- ชนิดข้อมูลที่เป็นข้อความ (Strings)
- การเขียนนิพจน์และโอเปอเรเตอร์พื้นฐาน (Expressions & Operators)
- ประโยคที่ทำงานตามเงื่อนไข (Conditional Statements)
- ประโยคสำหรับการทำขั้นตอนซ้ำ (Loop Statements)
- ความแตกต่างระหว่างตัวแปรภายนอกและภายใน (Global & Local Variables)
- การสร้างฟังก์ชัน (Function Declarations)
- การใช้งานโครงสร้างข้อมูลแบบอาร์เรย์ (Array-based Data Structures)
- การใช้งานโครงสร้างข้อมูลแบบ Associative Array
- การใช้งานตัวแปรที่เก็บข้อมูลแบบ String
- การใช้ฟังก์ชันจากไลบรารี string ของ Lua
การแสดงข้อความออกทางช่องเอาต์พุตของโปรแกรม
คำสั่งที่ใช้ในการแสดงข้อความ (string) หรือข้อมูลชนิดอื่น ๆ ในภาษา Lua ให้เป็นข้อความทางช่องเอาต์พุตของโปรแกรม คือ print() หรือใช้คำสั่ง io.write() โดยระบุอาร์กิวเมนต์ (arguments) ป้อนให้คำสั่งเหล่านี้ ถ้ามีข้อความหรือตัวแปรมากกว่าหนึ่ง ก็เขียนอาร์กิวเมนต์แยกด้วยเครื่องหมาย comma (,) คำสั่ง print() เมื่อแสดงข้อความแล้วจะขึ้นบรรทัดใหม่ (newline) โดยอัตโนมัติซึ่งแตกต่างจากคำสั่ง io.write()
ชนิดข้อมูลที่เป็นข้อความ (String Data Type)
ในภาษา Lua ข้อความ (string) จะเริ่มต้นและจบท้ายด้วย ‘ … ‘ (single qoutes) หรือ ” … ” (double quotes) ถ้าจะนำข้อความมาต่อกัน (string concatenation) ก็ใช้โอเปอเรเตอร์ .. (double dots) จะได้เป็นข้อความใหม่ (new string object) ข้อความเมื่อถูกสร้างขึ้นมาแล้วและถูกอ้างอิงด้วยตัวแปร จะไม่สามารถเปลี่ยนแปลงข้อมูลภายในได้ (immutable string) ข้อความอาจมีตัวอักขระที่เรียกว่า Escape Character ซึ่งเริ่มต้นด้วยสัญลักษณ์ Backslash (\)
ตัวอย่าง Escape Characters
- \t หมายถึง การเว้นช่องว่างหรือ Tab,
- \n หมายถึง การขึ้นบรรทัดใหม่ (newline)
- \\ หมายถึง สัญลักษณ์ Backslash (\)
- \” หมายถึง สัญลักษณ์ Double Qoute (“)
- \xhh หมายถึง ตัวอักขระหนึ่งตัวตามรหัส ASCII โดยที่ hh ใช้แทนตัวเลขฐานสิบหกจำนวน 2 หลัก
ตัวแปรและประเภทของตัวแปร
ภาษา Lua เป็นภาษาที่ชนิดของข้อมูลสำหรับตัวแปรปรับเปลี่ยนได้ (Dynamically-typed language) ถึงแม้ว่าจะไม่มีชนิดของตัวแปรแน่ชั้ด แต่ภาษา Lua ก็มีการตั้งค่าให้แบบ global และ local เหมือนภาษาอื่น ๆ และยังสามารถตั้งค่าทั้งหมดในรวดเดียวได้เช่นกัน
คำสงวนที่ต้องระวังในภาษา Lua มีคำสงวนที่ต้องระวังในการใช้คือคำว่า nil ซึ่งหมายถึงทั้งตัวแปรที่ไม่ได้ตั้งค่า (undefined) และตัวแปรที่ไม่มีค่า (null) อีกคำสงวนคือ false และ true เวลาใช้ false ใน statement ควรตรวจเช็กให้ดี เพราะใน Lua มีแค่ 2 คำที่เท่ากับ false คือ nil กับ false ที่เหลือทั้งหมดคือ true
โอเปอเรเตอร์
- and or หรือ not สามารถใช้งานได้ตามเครื่องหมายสากล
- สัญลักษณ์ “ไม่เท่ากับ” คือ ~=
- .. ใช้เมื่อต้องการเชื่อม string
- ^ ใช้เมื่อต้องการป้อนคำสั่งยกกำลัง (ไม่ใช่ binary XOR)
- # ใช้เมื่อต้องการนับความยาวของ tables และ strings
Loop
- while
- i = 1
- while i <= 5 do
- i = i + 1
- print(i)
- end
- repeat
- i = 1
- repeat
- i = i + 1
- print(i)
- until i == 10
- for
- x = 1
- for i = 1, 10, 2 do
- x = x * i
- print(x)
- end
- การจบ loop
- while true do
- if condition then
- x = x ^ 2
- else
- break
- end
- end
- Functions
- function foo()
- local x, y = something(4, 5)
- return x ^ y
- end
- function something(arg1, arg2)
- local ret1 = (arg1 * arg2) ^ 2
- local ret2 = (arg1 – arg2) ^ 2
- return ret1 + ret2, ret1 * ret2
- end
ภาษา Lua และ Roblox
Roblox คือ แพลตฟอร์มเกมออนไลน์ที่เปิดให้ผู้ใช้งานสามารถใช้จินตนาการต่าง ๆ สร้างสรรค์เกมได้ด้วยตนเอง และเป็นพื้นที่ในการทำกิจกรรมร่วมกันกับผู้เล่นคนอื่น ๆ ซึ่งเป็นที่นิยมแพร่หลายอย่างมากในปัจจุบัน โดยการสร้างสรรค์ผลงานบนแพลตฟอร์ม Roblox นั้นจะต้องเขียนโปรแกรมหรือเขียนโค้ดโดยใช้ภาษา Lua ในการทำงาน
สรุป
ภาษา Lua คือภาษาคอมพิวเตอร์ในรูปแบบภาษาสคริปต์ที่มีตัวแปลคำสั่งของภาษา Lua (Lua Interpreter) ขนาดเล็ก ทำให้ง่ายและรวดเร็วต่อการประมวลผลโดยมีชนิดข้อมูลพื้นฐานคือ boolean (true,false), numbers (integer & double-precision floating point) และ string นอกจากนั้นภาษา Lua ยังมีโครงสร้างข้อมูล อย่างเช่น อาร์เรย์ (array) ตาราง (table) ซึ่งเป็น associative array และ เซต (set) และมีการจัดการหน่วยความจำ เช่น การจองและคืนหน่วยความจำในขณะทำงาน (automatic memory management & garbage collection) ด้วยความสามารถเหล่านี้ภาษา Lua จึงเป็นที่นิยมอย่างมากในปัจจุบัน