เรียนเขียนโปรแกรมภาษา Lua ด้วยตัวเอง ตอนที่ 1 IDE, print and Comments

เรียนเขียนโปรแกรมภาษา Lua ด้วยตัวเอง ตอนที่ 1 IDE, print and Comments

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

ผมหาหนังสือสอนภาษา Lua ออนไลน์อ่านแล้วส่วนใหญ่จะเป็นการสอนว่าตัวภาษาทำอะไรได้บ้าง แต่มีตัวอย่างของการใช้งานจริงน้อย เปรียบได้กับการสอนว่าเครื่องยนต์ทำงานอย่างไร ลูกสูบทำงานอย่างไร หัวฉีดน้ำมันทำงานอย่างไร แต่ตัวอย่างการนำชิ้นส่วนต่าง ๆ มาประกอบกันให้ได้รถยนต์นั้นมีน้อยมาก

จนกระทั่งผมได้ค้นพบแบบฝึกที่ผู้เขียนบทความตั้งใจให้เป็นแบบฝึกสำหรับผู้ที่ต้องการเรียนผ่านแบบฝึกหัดที่ชื่อว่า Learn Lua the Hard Way (http://www.phailed.me/2011/02/learn-lua-the-hard-way-1/) โดย Lee (http://failboat.me) แปลเป็นไทยก็คือ “เรียนรู้ Lua แบบยาก ๆ” ผมเข้าใจว่าตัวผู้เขียนบทความต้องการเสียดสีชื่อหนังสือและบทความที่มักจะชักจูงผู้อ่านว่า “Learn ___ the Easy Way” ซึ่งพบได้บ่อยในหนังสือสอนเขียนโปรแกรมต่าง ๆ

ตัวผมเองเมื่อต้องการเรียนรู้ก็อยากจะรู้ให้ละเอียด และการอ่านหนังสือว่าอะไรทำอะไรได้ไม่ช่วยให้ผมแก้ปัญหา กลับเป็นแบบฝึกหัดที่สอนผมว่า “ทำอะไรแล้วจะเกิดอะไรขึ้น” ต่างหากที่ทำให้ผมเข้าใจในการเขียนโปรแกรมอย่างแท้จริง

เตรียมเครื่องมือ

ผมเริ่มต้นการเรียนเขียนโปรแกรมภาษา Lua ด้วยการติดตั้ง ZeroBrane Studio (http://studio.zerobrane.com/) ตัว ZeroBrane Studio คือ IDE (integrated development environment) พูดกันง่าย ๆ ก็คือโปรแกรมที่ช่วยเหลือในการเขียนโปรแกรมภาษา Lua ของเรา ตัว IDE นี้จะมี Text Editor สำหรับเขียนโค้ดซึ่งจะสนับสนุนการเขียนโค้ดภาษา Lua ด้วยการแสดงรายการคำสั่งหรือฟังก์ชันที่ใช้บ่อยในภาษาต่าง ๆ ทำให้เราไม่ต้องเสียเวลาพิมพ์ชื่อฟังก์ชันทั้งหมด นอกจากนั้นยังช่วยเหลือในการอ้างถึงตัวแปรหรือ Argument, Parameter ต่าง ๆ ในการเขียนโปรแกรมของเรา ช่วยลดความผิดพลาดในการเขียนโปรแกรมได้มาก

เมื่อติดตั้ง ZeroBrane Studio เราก็จะได้ตัว Lua ติดมาด้วยเลยเนื่องจาก Lua ขนาดเล็กมาก เป็นข้อดีอย่างหนึ่งของ Lua

บทความที่ผมจะเขียนต่อไปนี้จะอ้างอิงถึงการเรียนภาษา Lua ด้วยตัวเอง โดยมี ZeroBrane Studio เป็น IDE และใช้ Lua 5.2 เป็นเวอร์ชันหลัก คำสั่ง Shortcut ต่าง ๆ จะอ้างอิงกับ ZeroBrane Studio เป็นหลัก คำสั่งเหล่านี้จะแตกต่างกันไปตาม IDE แต่ละตัว
ผมเองไม่ใช่นักเขียนโปรแกรม เป็นเพียงคนที่ต้องการเรียนเขียนโปรแกรมด้วยตัวเอง ดังนั้นสิ่งที่ผมทำจึงไม่ใช่สิ่งที่ถูกต้องตามแนวทาง แต่เป็นสิ่งที่ผมเห็นว่าสามารถแก้ปัญหาตามโจทย์ได้สำเร็จ เปรียได้กับสะพานไม้ที่ไม่สวยงามแต่ใช้ข้ามแม่น้ำได้ ขอให้ท่านที่ได้เข้ามาอ่านบทความนี้เข้าใจด้วยครับ

แบบฝึกหัดแรก “print”

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

      print("Hello World")
      print("Hi again")

แต่ผมเบื่อ Hello World เต็มที ดังนั้นผมจึงใช้ Hello Jelly แทน

      print("Hello Jelly")
      print("Jelly Mimi")

save เป็นไฟล์ ex1.lua แล้วรันด้วยการกด f6 ได้ผลออกมาดังภาพข้างล่าง

01-01

เป็นคำสั่งพื้น ๆ ที่ไม่มีอะไรพิเศษ เพียงแค่พิมพ์ตัวอักษรที่อยู่ใน (” “) ออกมาบนจอ ต่างบรรทัดกัน ถึงตอนนี้ผมสงสัยว่าถ้าพิมพ์คำสั่งทั้งสองบรรทัดเป็นบรรทัดเดียวผลจะออกมาเหมือนกันหรือไม่ ผลก็คือตัว IDE ค้างไปประมาณ 8 วินาทีก่อนที่จะแสดงผลออกมาเหมือนกัน สรุปว่าแยกบรรทัดออกจากกันน่าจะดีกว่า

หลังจากสอนผมเรื่องการพิมพ์ตัวหนังสือลงบนหน้าจอแล้วผมก็ได้รับแบบฝึกแปดข้อดังนี้

1. Make the program display another line containing “Hi from Lua” หมายความว่าให้ผมเขียนโปรแกรมอีกหนึ่งบรรทัดเพื่อแสดงผล “Hi from Lua” ผมเปลี่ยนจาก Hi from Lua เป็น Hi from Jelly King

     print("Hello Jelly")
     print("Jelly Mimi")
     print("Hi from Jelly King")

2. Print another line of text of your choosing. ให้ผมพิมพ์ข้อความอื่นที่ผมเลือกเอง บังเอิญว่าผมทำไปแล้วในแบบฝึกข้อแรก ดังนั้นผมจึงไม่ต้องทำข้อนี้อีก

3. Put — at the beginning of the first line, what do you see? ให้ผมใส่ — ไว้ตรงหน้าคำสั่ง นี่เป็นการ comment หรือลงหมายเหตุเอาไว้ในตอนที่เราเขียนโปรแกรม เพราะเมื่อโปรแกรมมีขนาดใหญ่มาก ๆ เราจะจำไม่ได้ว่าโปรแกรมส่วนนี้บรรทัดนี้มีความหมายอย่างไร คำสั่งหลัง — จะไม่ถูกเรียกใช้งานในโปรแกรม

4 What if you delete one of the double-quotes? What will happen? ถามผมว่าจะเกิดอะไรขึ้นถ้าลบเครื่องหมาย “ ออกหนึ่งตัว ผลก็คือตัว IDE แจ้งให้ทราบว่ามีปัญหาเกิดขึ้น “ ตัวหน้าและ “ ตัวหลังจะให้ข้อผิดพลาดต่างกัน แต่โปรแกรมจะไม่รันในทั้งสองกรณี

5 What if you replaced all of the double-quotes with single-quotes? what will happen? จะเกิดอะไรขึ้นถ้าผมเปลี่ยน “ ทั้งหมดเป็น ’ แทน ผลก็คือตัวโปรแกรมยังทำงานได้เป็นอย่างดี การแสดงผลถูกต้องไม่มีผิดพลาด

6 How can you print out “I have a quote in front of me? ถามผมว่าจะพิมพ์ตัวหนังสือ มี”อยู่ในประโยคนี้ ได้อย่างไร ถึงจุดนี้ผมยอมรับว่าเกิดความสับสน ถ้าผมใช้ “ “ ครอบทับ “ เอาไว้ ตัวโปรแกรมจะเกิดความผิดพลาดและไม่ทำงาน แต่ผมได้เรียนรู้จากข้อ 5 ว่า ‘ สามารถใช้แสดงผลตัวหนังสือได้เช่นเดียวกับ “ ดังนั้นผมจึงเขียนโปรแกรมออกมาโดยให้ ‘ แสดงผล “ ดังนี้

      print('Hello Jelly')
      print('Jelly Mimi')
      print('Hi from Jelly King')
      -- print("This is a comment")
      print('I have " in this')

ซึ่งผลก็ได้ออกมาตามที่ผมต้องการ ถือว่ายอดเยี่ยม

  1. What will happen if you just get rid of all of the parenthesis? จะเกิดอะไรขึ้นถ้าผมลบเอาวงเล็บออกทั้งหมด ผลก็คือโปรแกรมยังทำงานได้ดีเช่นเดิม … ผมคิดในใจว่าภาษา Lua นี่มันจะทำออกมาตามใจชอบมากเกินไปหรือเปล่า
  2. What happens when you type in print(“Hello”,”World”)? จะเกิดอะไรขึ้นถ้าผมพิมพ์ว่า print(“Hello”,”World”) สิ่งแรกที่ผมสังเกตเห็นก็คือการแยกสองคำออกจากกันโดยมี “ “ ครอบในแต่ละคำและมี , คั่นระหว่าทั้งสอง “ “ ด้วยความอยากรู้ผมจึงลองทันที

ผลที่ได้ก็คือการแสดงผล Hello World ที่มีช่องว่าระหว่าง Hello และ World มากกว่าการใช้ print(“Hello World”) ผมไม่ทราบว่ามันหมายถึงอะไรและมีรูปแบบวิธีการทำงานอย่างไร ตัวแบบฝึกก็ไม่ได้อธิบายเอาไว้ บางทีผมคงต้องไปเปิดหนังสืออ่านเพิ่มเติมเอาเอง

Comments

อย่างที่ผมกล่าวไปแล้ว Comments มีไว้เพื่ออธิบายว่าโค้ดในส่วนต่าง ๆ มีไว้เพื่ออะไร ทำงานเกี่ยวข้องกับอะไร ถ้าเราเขียนโปรแกรมเล็ก ๆ เราอาจจะจำได้ทุกอย่างไม่มีผิดพลาด แต่การเขียนโปรแกรมที่มีขนาดใหญ่ขึ้นเราจะลืมว่าโปรแกรมส่วนนี้เขียนไว้เพื่ออะไร มีหน้าที่อะไร ในภาษา Lua การใส่ Comments จะอยู่หลังสองขีด (–) ในบรรทัดเดียวกัน (ไม่กด enter)

ด้านล่างนี้คือตัวอย่างที่ผมได้รับจากบทความ

       -- Here's a piece of comment that describes what the program does.
       -- The following line of code prints out some text
       print("Some random text...")
       -- Two dashes found in a print text are not comments
       print("-- This will still print")

       print("There's a comment after this") -- Comments can also come after the code.

       -- In fact, everything that comes after -- in code not inside of text are comments.

แปลไทยและตัดแปลง

       -- นี่คือหมายเหตุ (Comments) ที่มีไว้เพื่ออธิบายว่าโปรแกรมนี้เอาไว้ทำอะไร
       -- โค้ดด้านล่างมีไว้เพื่อพิมพ์ “Jelly King”
       print("Jelly King")
       -- สองขีดด้านล่างนี้ไม่ใช่หมายเหตุ (Comments)
       print("-- This will still print")

print(“There’s a comment after this”) — หมายเหตุสามารถใส่ไว้หลังโค้ดได้

— ทุกอย่างที่พิมพ์ตามหลัง — ถือว่าเป็นหมายเหตุ (Comments) ทั้งหมด
ในบทความมีแบบฝึกเพิ่มเติมสามข้อ

  1. If you type in print (– “hello there”), what will happen?
  2. Can you explain why 1. throws an error
  3. What about print — (“Hello World!”)?

ซึ่งทุกข้อแสดง Error ทั้งหมด ที่เป็นเช่นนั้นก็เพราะว่าคำสั่งหลัง — ถูกยกเว้นไม่นำมาปฏิบัติ ทำให้โค้ดไม่สมบูรณ์และเกิดความผิดพลาดขึ้น

.

ผมได้เขียนบล็อกนี้มาได้เกือบสองชั่วโมงแล้วและคิดว่าจะพักเอาไว้แค่นี้ ผมจะทบทวนบล็อกและทำแบบฝึกต่อในวันพรุ่งนี้ วันนี้ถือว่าได้เรียนรู้มากพอสมควรแล้ว แล้วเจอกันครับ

01-02

  • Harder

    ขอบคุณมากครับ ติดตามอยู่นะ

    • originalbluesin

      ผมยังไม่มีโครงการจะกลับมาหัด LUA ต่อเลยครับ ตอนนี้มีงานอย่างอื่นที่ต้องทำครับ … แต่ผมจะพยายามกลับมาหัด LUA ต่อครับ

      • Kitsada Maninet

        กลับมาเลยครับ ผมอยากจะเรียนวิธีทำมาก จะเอามาทำระบบเกม mtasa-com

        • originalbluesin

          ผมยังไม่มีเวลาเลยครับ ตอนนี้ทำงานหนังสืออยู่ งานท่วมหัวครับ

Comments are closed.