ภาษา Lua คืออะไร? ใช้ทำอะไร และ มีความน่าสนใจอย่างไร

ภาษา Lua คือ อะไร? เกี่ยวข้องกับโค้ดในเกม roblox อย่างไร? ทำไมภาษา Lua เป็นที่นิยมและถูกนำมาใช้ในวงการเกม?

Category :

lua

ภาษา 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
  1. i = 1
  2. while i <= 5 do
  3.     i = i + 1
  4.     print(i)
  5. end
  • repeat
  1. i = 1
  2. repeat
  3.     i = i + 1
  4.     print(i)
  5. until i == 10
  • for 
  1. x = 1
  2. for i = 1, 10, 2 do
  3.     x = x * i
  4.     print(x)
  5. end
  • การจบ loop
  1. while true do
  2.   if condition then
  3.     x = x ^ 2
  4.   else
  5.     break
  6.   end
  7. end
  • Functions
  1. function foo()
  2.   local x, y = something(4, 5)
  3.   return x ^ y
  4. end
  5. function something(arg1, arg2)
  6.   local ret1 = (arg1 * arg2) ^ 2
  7.   local ret2 = (arg1 – arg2) ^ 2
  8.   return ret1 + ret2, ret1 * ret2
  9. 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 จึงเป็นที่นิยมอย่างมากในปัจจุบัน

บทความที่เกี่ยวข้อง