Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[สอนสร้างเกม] เรียนสร้างเกมกับมิกิจัง : บทที่ 4 นิพจน์ (Expression)
#1
ติดตามเราได้ที่ Facebook ชื่อเพจ Planila Game Developer


จากบทที่แล้ว บทที่ 3 อัลกอรึทึม (Algorithm) เราได้เรียนรู้วิธีการเขียนอัลกอริทึมแบบต่าง ๆ กันไปแล้ว การเขียนอัลกอริทึมส่วนใหญ่นั้นจะต้องมีการคำนวณเกิดขึ้นด้วย ดังนั้นในบทนี้เราจะมาเรียนวิธีการดำเนินการต่าง ๆ ทางคณิตศาสตร์เพื่อใช้ในการเขียนอัลกอริทึมกัน



ตัวแปรคืออะไร?

ตัวแปร (Variable) หมายถึงค่าที่ถูกเก็บไว้ในหน่วยความจำของอุปกรณ์ สามารถเปลี่ยนแปลงได้ตามที่เราต้องการ ตัวแปรสามารถใช้ประโยชน์ได้หลายอย่าง เช่น นับจำนวนครั้งที่วนลูป, คำนวณเลข, รับข้อมูลจากคีย์บอร์ด, เก็บคะแนนของผู้เล่น เป็นต้น การที่เราจะใช้ตัวแปรได้นั้นเราจะต้องประกาศตัวแปรก่อน การประกาศตัวแปร (Variable Declaration) เราต้องตั้งชื่อที่จะใช้เรียกและกำหนดประเภทของตัวแปรนั้น กฎการตั้งชื่อตัวแปรมีคร่าว ๆ ดังนี้
  • ต้องไม่ซ้ำกับชื่อตัวแปรหรือชื่อเฉพาะอย่างอื่นที่มีอยู่ก่อนแล้ว
  • ต้องไม่ซ้ำกับคำสงวน (Reserved Word) ของภาษาอุปกรณ์หรือเกมเอนจินนั้น
  • ต้องขึ้นต้นด้วยตัวอักษรเท่านั้น (A-Z, a-z) นอกจากนั้นจะเป็นตัวอักษร ตัวเลข หรือสัญประกาศ (_) ก็ได้ แต่ต้องไม่ใช่เครื่องหมายวรรคตอนใด ๆ ยกเว้นสัญประกาศ (กฎข้อนี้อาจแตกต่างไปในแต่ละภาษาอุปกรณ์หรือเกมเอนจิน)
  • ต้องไม่มีการเว้นวรรคใด ๆ
  • ควรใช้ภาษาอังกฤษในการตั้งชื่อตัวแปร
  • ควรตั้งชื่อตัวแปรที่สื่อความหมาย


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

ชื่อตัวแปรที่ดีควรสื่อความหมายในตัวเอง เช่น User_Name, answer, Time เป็นต้น ไม่ควรตั้งชื่อตัวแปรมั่ว ๆ อย่าง xyz หรือ GTC3HA1 เนื่องจากตัวเราเองอาจลืมว่าตัวแปรนั้นไว้ใช้ทำอะไรเมื่อเวลาผ่านไป การตั้งชื่อตัวแปรเป็นภาษาอังกฤษมีเรื่องที่ต้องระวังอยู่อย่างหนึ่งคือเรื่องตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก ภาษาอุปกรณ์และเกมเอนจินส่วนใหญ่มักมองว่าตัวพิมพ์ใหญ่และตัวพิมพ์เล็กนั้นแตกต่างกัน (Case Sensitive) เช่น hello, Hello, HELLO โปรแกรมจะมองสามชื่อนี้เป็นคนละชื่อกัน และหมายถึงตัวแปรคนละตัวกัน แต่ก็พอมีบางภาษาอุปกรณ์และเกมเอนจินที่มองตัวพิมพ์ใหญ่และตัวพิมพ์เล็กเป็นตัวเดียวกัน (Case Insensitive) โดยมองว่า world, World, WORLD เป็นชื่อเดียวกันและหมายถึงตัวแปรตัวเดียวกัน



ประเภทของตัวแปรมีอะไรบ้าง?

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

1. ตัวแปรเก็บจำนวนเต็ม (Integer Variable) ใช้เก็บจำนวนเต็มเท่านั้น มีการแบ่งย่อยอีกว่าเป็นแบบเก็บได้เฉพาะจำนวนเต็มบวกกับจำนวนเต็มศูนย์ (จำนวนเต็มตั้งแต่ศูนย์ขึ้นไป) หรือเป็นแบบเก็บจำนวนเต็มได้ทั้งหมด (รวมทั้งจำนวนเต็มลบด้วย) นอกจากนี้ยังมีการแบ่งตัวแปรประเภทนี้เป็นหลายขนาดตามขอบเขตที่สามารถเก็บได้อีกด้วย ยิ่งตัวแปรมีขนาดใหญ่มากเท่าไรก็ยิ่งเก็บค่าที่มีจำนวนหลักได้มากเท่านั้น ถ้านำตัวแปรประเภทนี้มาหารกัน ผลลัพธ์ที่ได้จะเป็นจำนวนเต็มเสมอ เช่น 11 หารด้วย 4 จะได้ผลลัพธ์เป็น 3 เนื่องจากตัวแปรประเภทนี้จะไม่คิดทศนิยม และจะปัดเศษลงเสมอ (เพราะไม่คิดทศนิยมเลยไม่รู้ว่าทศนิยมเป็นเท่าไร จึงปัดลงไว้ก่อน)

2. ตัวแปรเก็บจำนวนจริง (Floating Point Variable) ตัวแปรประเภทนี้จะสามารถเก็บข้อมูลได้มากกว่าตัวแปรประเภทแรก เพราะสามารถเก็บจำนวนที่มีทศนิยมได้ แต่ก็ต้องแลกมากับขนาดของตัวแปรที่ใหญ่มากขึ้นด้วย

3. ตัวแปรเก็บตัวอักษร (Character Variable) ใช้เก็บตัวอักษรใด ๆ ก็ได้ 1 ตัวอักษร ถ้าใช้ตัวแปรประเภทนี้เก็บค่าที่เป็นตัวเลข โปรแกรมจะมองว่าตัวเลขตัวนั้นเป็นเพียงตัวอักษรตัวหนึ่ง ไม่สามารถนำมาดำเนินการใด ๆ ทางคณิตศาสตร์ได้

4. ตัวแปรเก็บข้อความ (String Variable) ใช้เก็บตัวอักษรใด ๆ ก็ได้ ไม่จำกัดจำนวนตัวอักษร บางภาษาอุปกรณ์หรือเกมเอนจินอาจไม่มีตัวแปรประเภทนี้ เนื่องจากตัวแปรประเภทนี้ไม่ได้เป็นตัวแปรแบบเก็บค่าจริง ๆ (Value Variable) แต่เป็นตัวแปรแบบอ้างอิงค่าอื่น (Reference Variable) ตัวแปรประเภทนี้เกิดจากการนำตัวแปรเก็บตัวอักษรมาสร้างเป็นอาร์เรย์ (Array) (เป็นการนำตัวแปรประเภทที่ 3 มาเรียงต่อกันเป็นชุด ไม่ได้เป็นตัวแปรประเภทใหม่จริง ๆ)

5. ตัวแปรเก็บค่าความจริง (Boolean Variable) ใช้เก็บค่าความจริงทางตรรกศาสตร์ ค่าที่เก็บได้มีอยู่ 2 ค่าคือ "จริง (True)" และ "เท็จ (False)" เท่านั้น ตัวแปรประเภทนี้มีอยู่แบบเดียว ไม่สามารถแบ่งประเภทย่อยได้อีก ตัวแปรประเภทนี้มีเพียงขนาดเดียวคือมีขนาด 1 bit ในทุก ๆ ภาษาอุปกรณ์และเกมเอนจิน



นิพจน์คืออะไร?

นิพจน์ (Expression) หมายถึงข้อความทางคณิตศาสตร์ ประกอบไปด้วยค่าคงที่ ตัวแปร และตัวดำเนินการ นิพจน์เรียกเป็นภาษาไทยได้อีกอย่างว่า "ประโยคสัญลักษณ์" ตัวอย่างนิพจน์ เช่น 42 ÷ 7 = 6, 3n + 2 = 1 , x² + 4x + 7 < 0 เป็นต้น

นิพจน์ในทางอุปกรณ์จะมีลักษณะแตกต่างจากนิพจน์ในทางคณิตศาสตร์อยู่นิดหน่อย อย่างที่ได้เกริ่นไปแล้วในบทที่ 3 นิพจน์ในทางอุปกรณ์ที่มีเครื่องหมายเท่ากับ (=) จะเป็นการนำค่าที่อยู่ฝั่งขวาของเครื่องหมายเท่ากับมาไว้ในค่าที่อยู่ฝั่งซ้ายของเครื่องหมายเท่ากับ เช่น AuthorName = "Mikichan" หมายความว่าให้ตัวแปร AuthorName มีค่าเท่ากับข้อความ "Mikichan", A = B หมายความว่าให้ตัวแปร A มีค่าเท่ากับตัวแปร B โดยที่ตัวแปร B มีค่าเท่าเดิม, N = N + 1 (ปัญหาโลกแตกสำหรับมือใหม่!!!) หมายความว่าให้ตัวแปร N ค่าใหม่มีค่าเท่ากับตัวแปร N ค่าเดิมบวกด้วย 1 แล้วเก็บตัวแปร N ค่าใหม่ในหน่วยความจำ และลบตัวแปร N ค่าเดิมออกจากหน่วยความจำ (เนื่องจากตัวแปร N ค่าเดิมถูกตัวแปร N ค่าใหม่เขียนทับ) ยกตัวอย่างเช่น ตอนแรกให้ N = 3 พอถึงคำสั่ง N = N + 1 โปรแกรมจะมองว่า N = 3 + 1 ดังนั้นเมื่อโปรแกรมทำคำสั่งนี้เสร็จแล้ว ตัวแปร N ก็จะมีค่าเท่ากับ 4

จากตัวอย่างด้านบนจะสังเกตได้ว่า ค่าที่อยู่ฝั่งซ้ายของเครื่องหมายเท่ากับจะต้องเป็นตัวแปรเสมอ และจะมีตัวแปรเพียงตัวเดียวเท่านั้น เนื่องจากเครื่องหมายเท่ากับคือการนำค่าฝั่งขวามาไว้ในค่าฝั่งซ้าย ดังนั้นค่าที่อยู่ฝั่งซ้ายจะต้องเป็นค่าที่สามารถเปลี่ยนแปลงเพื่อรับข้อมูลได้ ซึ่งค่าที่เปลี่ยนแปลงได้ก็คือตัวแปรนั่นเอง และสาเหตุที่ฝั่งซ้ายมีตัวแปรได้เพียงตัวเดียวก็เพื่อให้เก็บค่าลงตัวแปรได้อย่างถูกต้อง สมมติว่ามีนิพจน์หนึ่งคือ A + B = 104 ปัญหาคือโปรแกรมจะเลือกเก็บค่า 104 ไว้ที่ตัวแปร A หรือตัวแปร B ดีล่ะ ในเมื่อมีตัวแปรอยู่ฝั่งซ้ายตั้งสองตัว โปรแกรมโดยทั่วไปจะไม่เก็บค่าไว้ครึ่ง ๆ กลาง ๆ โดยยังติดตัวแปรไว้หลายตัวอย่างให้ A + B เก็บค่าเท่ากับ 104 ถ้าจะเก็บค่าก็ต้องเลือกว่าจะเก็บค่าที่ตัวแปรใดตัวแปรหนึ่งไปเลย ดังนั้นฝั่งซ้ายของเครื่องหมายเท่ากับจึงมีตัวแปรได้เพียงตัวเดียวเท่านั้น



ตัวดำเนินการคืออะไร?


......

นี่เพิ่งแค่ 35% ของบทความนี้เท่านั้น บทความฉบับเต็มมีเยอะกว่านี้อีก!


เนื่องจากติดปัญหาเรื่องนโยบายการเผยแพร่บทความ ทำให้เราไม่สามารถเผยแพร่บทความฉบับเต็มลงในเว็บนี้ได้ อ่านฉบับเต็มได้ที่บทความต้นฉบับ (ไม่มีค่าใช้จ่าย)

บทความต้นฉบับ https://planila.blogspot.com/2017/04/4-expression.html

[Image: %25E0%25B8%259A%25E0%25B8%2597%25E0%25B8...9%2588.png]
ติดตามเราได้ที่ Facebook ชื่อเพจ Planila Game Developer
อ่านบทความสอนสร้างเกมได้ที่ https://planila.blogspot.com

[Image: banner-ads.png]
[-] The following 2 users say Thank You to Mikichan for this post:
  • dreamknight, slost
Reply
#2
เนื้อหาเดิมถูกลบ

......

เนื่องจากติดปัญหาเรื่องนโยบายการเผยแพร่บทความ ทำให้เราไม่สามารถเผยบทความฉบับเต็มลงในเว็บนี้ได้ อ่านฉบับเต็มได้ที่บทความต้นฉบับ (ไม่มีค่าใช้จ่าย)

[Image: %25E0%25B8%259A%25E0%25B8%2597%25E0%25B8...9%2588.png]
ติดตามเราได้ที่ Facebook ชื่อเพจ Planila Game Developer
อ่านบทความสอนสร้างเกมได้ที่ https://planila.blogspot.com

[Image: banner-ads.png]
[-] The following 4 users say Thank You to Mikichan for this post:
  • dreamknight, hengmana, Ivan_GilDong, slost
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)