หัดเขียนโปรแกรมแบบบ้านๆ ตอนที่ 1

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

ภาษาเขียนโปรแกรม ภาษาเครื่อง และตัวแปลภาษา

ถ้าเปรียบเครื่องคอมพิวเตอร์เป็นชาวต่างประเทศสมมุติว่าเป็นชนพื้นเมืองประเทศหนึ่งแล้วกัน ภาษาเครื่องก็คือภาษาถิ่น แต่เนื่องจากเป็นภาษาที่ยากเราจึงใช้ภาษากลางที่ง่ายกว่าในการสื่อสารแทนเช่นภาษาอังกฤษ, ฝรั่งเศษ, ญี่ปุ่น เป็นต้นซึ่งก็เปรียบได้กับภาษาเขียนโปรแกรม แต่..แต่ก็ยังไม่สามารถสื่อสารกันได้เนื่องจากอีกฝ่ายไม่เข้าใจภาษากลางที่ใช้จึงต้องใช้ล่ามซึ่งก็คือตัวแปลภาษาในการแปลงภาษากลาง ( ภาษาเขียนโปรแกรม ) ไปเป็นภาษาถิ่น ( ภาษาเครื่อง ) เพื่อสั่งงานชนพื้นเมือง ( คอมพิวเตอร์ ) อีกที


กระบวนทัศน์ของภาษาโปรแกรม

กระบวนทัศน์ ( Paradigm ) ก็คือกรอบหรือชุดของแนวความคิด ซึ่งก็มีหลากหลายแนวทางมากเช่น Imperative, Declarative, Functional, Object-oriented, Logical, Procedural, Even-driven, etc. ซึ่งในภาษาสมัยใหม่หลายตัวก็มักจะมีหลายกระบวนทัศน์ในตัวเองบางอย่างอาจเอามาแค่บางส่วนหรือทั้งหมด รวมถึงภาษาเก่าและลูกหลานบางตัวก็มีการปรับปรุงและเพิ่มความสามารถใหม่ที่เอามาจากกระบวนทัศน์อื่นเข้ามาในตัวภาษาด้วย ก่อนที่เราจะงงกันไปมากว่านี้เราจะโฟกัสไปที่กระบวนทัศน์ที่น่าจะเข้าใจง่ายที่สุดก่อนนั่นก็คือ

การเขียนโปรแกรมเชิงคำสั่ง ( Imperative programming )

ซึ่งเป็นการเขียนโปรแกรมที่มีการบอกลำดับขั้นตอนการทำงานที่ชัดเจนเช่นการอุ่นเบอร์เกอร์ใน 7-11
  1. ฉีกปลายบรรจุภัณฑ์เล็กน้อย
  2. เปิดฝาเครื่องไมโครเวฟ
  3. ใส่สินค้าในเครื่อง
  4. ปิดฝาแล้วกดปุ่มเลข 2
  5. รอจนสัญญาณดัง
  6. เปิดฝานำสินค้าใส่ถุง
การทำงานตามลำดับในคอมพิวเตอร์จะทำจากบนลงล่างจากซ้ายไปขวาเหมือนการอ่านหนังสือยกเว้นการทำงานบางอย่างจะมีข้อยกเว้น
  • ระดับความสำคัญของตัวดำเนินการ เช่น ตัวคูณ ( * ) กับหาร ( / ) จะทำก่อนตัวบวก ( + ) กับลบ ( - ) หรือตัวกำหนดค่า ( = ) จะทำงานในฝั่งขวาก่อนจะกำหนดค่าให้ตัวแปรฝั่งซ้าย
  • การทำงานแบบทางเลือกหรือเงื่อนไขจะเลือกทำงานส่วนที่ตรงกับเงื่อนไขและข้ามการทำงานส่วนที่ไม่ตรงกับเงื่อนไข
  • การทำงานแบบวนรอบจะทำงานวนกลับไปทำซ้ำเดิมจนกว่าจะครบกำหนดหรือตรงตามเงื่อนไขจึงจะหยุดและไปทำงานในส่วนถัดไปได้ เหมือนกับการอ่านหนังสือทบทวนหน้าที่ไม่เข้าใจพอเข้าใจแล้วก็อ่านหน้าถัดไป
  • บางภาษาอาจมีคำสั่งพิเศษให้กระโดดจากจุดที่ทำงานอยู่ไปยังส่วนที่กำหนด เหมือนกับการข้ามไปอ่านบทอื่น
ในภาษา Lua ที่เราจะเริ่มเรีัยนกันในตอนต่อไปเป็นภาษาแบบ multi paradigm คือสามารถเขียนเป็น imperative ก็ได้หรือเขียนแบบ procedural ( เป็นกระบวนทัศน์ย่อยของ imperative โดยใช้การสร้างเป็นโปรแกรมย่อยหลายๆ ตัวแล้วเรียกใช้เพื่อลดความซ้ำซ้อนในการเขียนโปรแกรม ในบทความชุดนี้จะเขียนตามกระบวนทัศน์นี้เป็นหลัก ) หรือแม้แต่การเขีียนแบบ functional ก็ได้เช่นกัน

สิ่งที่ควรรู้ก่อนเริ่มเขียนโปรแกรม

ส่วนประกอบของภาษาโปรแกรมต่างๆ ได้แก่
  • ประเภทข้อมูล ( Data type ) เช่น ตัวเลข ตัวอักษร ตรรกะ(จริง, เท็จ) ชุดข้อมูล วัตถุ
  • ตัวดำเนินการ ( Operator ) เช่น บวก ลบ คูณ หาร มากกว่า น้อยกว่า เท่ากับ และ หรือ ไม่
  • ตัวแปร ( Variable ) คือชื่อที่ใช้อ้างถึงข้อมูลหนึ่งๆ เช่น x = 10 หมายถึงตัวแปรชื่อ x เก็บข้อมูลตัวเลขจำนวนเต็มที่มีค่าคือ 10
  • โปรแกรมย่อย ( Function, Procedure, Subroutine ) เป็นการแบ่งส่วนการทำงานของโปรแกรมเป็นกลุ่มย่อยซึ่งสามารถเรียกใช้ซ้ำได้ ในการทำงานแบบ Imperative จะเริ่มทำงานทีละบรรทัดจากบนลงล่างถ้าในโปรแกรมของเรามีการทำงานบางอย่างบ่อยๆ ก็ต้องมาเขียนคำสั่งเดิมซ้ำๆ ซึ่งการแยกส่วนที่ทำงานซ้ำออกมาเป็นโปรแกรมย่อยจะช่วยลดการซ้ำซ้อนตรงนี้ได้
  • คำสั่ง ( Statement ) และ นิพจน์ ( Expression ) ตัวแรกคือคำสั่งหรือชุดของคำสั่งในโปรแกรมส่วนตัวหลังคือ Statement ประเภทหนึ่งที่ประกอบด้วย ข้อมูล และ ตัวดำเนินการ หรือ การเรียกใช้ฟังก์ชั่น หรือจะเป็น ค่า ( value ) โดดๆ ก็ได้ เช่น 1+2 หรือ sin(90) หรือ a<b หรือ 20

ส่งท้ายก่อนจบตอนแรก

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

บทความถัดไป

ความคิดเห็น