ตัวแปร (ภาษาอังกฤษ: Variable) นั้นเป็นสิ่งที่สำคัญมากในการเขียนโปรแกรม ถ้ายังจำตอนเรียนคณิตศาสตร์ชั้นมัธยมได้ เราจะรู้จักกับตัวแปรในรูปแบบ x
, y
, z
และสมการเชิงเส้นต่างๆ (นึกถึงความหลัง 😂)
แต่ในเชิงของการเขียนโปรแกรม และในภาษา Ruby ตัวแปรคือสิ่งที่เก็บข้อมูลอะไรก็ได้ เพื่อนำไปใช้ประโยชน์ต่อไป ถ้าในทางคณิตศาสตร์ตัวแปรจะเอาไว้แทนตัวเลขอย่างเดียว
ถ้าจะอธิบายเป็นภาษาชาวบ้าน ตัวแปรก็เป็นแค่กล่องเก็บของนั่นเอง 📦
การสร้างตัวแปร (บ้างอาจเรียก การ "ประกาศ" ตัวแปร) ทำได้โดยการตั้งชื่อของตัวแปร ตามด้วยเครื่องหมายเท่ากับ =
แล้วตามด้วยค่าของข้อมูลทางด้านขวา
{% embed url="https://repl.it/@narze/variables-declare?lite=true" caption="" %}
จากตัวอย่างด้านบน เป็นการประกาศตัวแปร 3 ตัว ได้แก่ :
- ชื่อ
x
ให้มีค่าเท่ากับ 1 - ชื่อ
sum
มีค่าเป็น1 + 2 + 3 + 4 + 5
ซึ่งก็คือ15
- ชื่อ
hello_world
มีค่าเป็นสตริง"สวัสดี ชาวโลก"
👽
{% hint style="info" %}
สำหรับผู้ที่เคยเขียนโปรแกรมภาษาอื่นๆ ที่การสร้างตัวแปรอาจจะต้องมีคีย์เวิร์ด var
หรือ let
และอาจต้องกำหนดประเภทของตัวแปร เช่น int
หรือ string
จะสังเกตได้ว่า ภาษา Ruby นั้นไม่ต้องมีทั้งคีย์เวิร์ดและประเภทของตัวแปรเลย ซึ่งมีข้อดีคือเขียนได้ง่ายและเร็ว
{% endhint %}
{% hint style="info" %}
การตั้งชื่อตัวแปรในภาษา Ruby นิยมตั้งชื่อแบบ snake_case
นั่นคือเป็นตัวพิมพ์เล็กทั้งหมด และถ้ามีมากกว่า 1 คำ ให้คั่นด้วยขีดล่าง_
(Underscore)
{% endhint %}
เมื่อเราประกาศตัวแปรเสร็จแล้ว ลองใช้คำสั่ง puts
กับตัวแปรเหล่านี้ดู
{% embed url="https://repl.it/@narze/variables-puts?lite=true" caption="" %}
นอกจากนี้ เรายังนำตัวแปรมาใช้ซำ้ได้ เช่นการใช้ตัวแปรมาบวกเลขกัน หรือเรียกเมธอดกับตัวแปรสตริง เป็นต้น
{% embed url="https://repl.it/@narze/variables-methods?lite=true" caption="" %}
จากตัวอย่างด้านบน เป็นการใช้งานตัวแปร ได้แก่ :
x + sum
โดยที่x
เป็น1
และsum
เป็น15
จึงได้ค่าออกมาเป็น16
sum * 2
โดยที่sum
เป็น15
จึงได้ค่าออกมาเป็น30
- สังเกตได้ว่า ค่าของตัวแปรต่างๆ จะยังเป็นค่าเดิม ไม่เปลี่ยนแปลง
hello_world.reverse
คือการนำค่าสตริงในตัวแปรhello_world
มากลับด้าน ทำให้ได้ค่าออกมาเป็นกลโวาช ีดสัวส
hello_world + x
บรรทัดนี้จะทำให้โปรแกรมเกิดข้อผิดพลาดหรือ Error ขึ้น เพราะว่าเป็นการบวกกันของสตริง และตัวเลขเข้าด้วยกัน
{% hint style="info" %} เราลองมาดู Error ที่เกิดขึ้น
`Traceback (most recent call last): `
```1: from main.rb:8:in``'`
main.rb:8:in
+': no implicit conversion of Integer into String (TypeError) exit status 1
แปลว่า :
จากโปรแกรม main.rb
บรรทัดที่ 8 ในเมธอดการบวก +
ไม่สามารถแปลงจำนวนเต็ม (ในที่นี้หมายถึงตัวแปร x
ที่มีค่าเป็นเลขจำนวนเต็ม 1
) ให้เป็นสตริง เพื่อไปบวกกับตัวแปร hello_world
ที่เป็นสตริงได้นั่นเอง
{% endhint %}
ซึ่งถ้าจะแก้ไขปัญหาของโค้ดส่วนนี้ จะต้องทำการแปลงค่า x
ให้เป็นสตริงก่อน ด้วยเมธอดการแปลงค่าเป็นสตริง .to_s
ซึ่งเมื่อเราแปลงแล้ว การบวกสตริงสองตัวเข้าด้วยกัน จะนับเป็นการเอาคำมาต่อท้ายนั่นเอง
{% embed url="https://repl.it/@narze/variables-methods-fix?lite=true" caption="" %}
{% hint style="info" %}
การแปลงประเภทข้อมูลในภาษา Ruby จะเป็นเมธอดที่นิยมตั้งชื่อเป็นรูปแบบของ .to_*
เช่น
- แปลงเป็นสตริง (To String) ใช้
.to_s
- แปลงเป็นตัวเลขแบบจำนวนเต็ม (To Integer) ใช้
.to_i
- แปลงเป็นตัวเลขแบบทศนิยม (To Float) ใช้
.to_f
{% endhint %}
จากตัวอย่างก่อนหน้านี้ จะเห็นว่าเมื่อประกาศตัวแปรไปแล้ว ค่าจะเป็นเท่าเดิมเสมอแม้ว่าจะมีการใช้ซำ้ในหลายๆ บรรทัดก็ตาม
แต่ถ้าเราทำการประกาศตัวแปรโดยใช้ชื่อเดิม จะถือว่าเป็นการล้างค่าตัวแปรเดิมไปเลย ตามตัวอย่างโค้ดด้านล่างนี้
{% embed url="https://repl.it/@narze/variables-methods-redeclare?lite=true" caption="" %}
เมื่อถึงบรรทัด puts x
จะได้ค่าออกมาเป็น 3
เพราะเราทำการประกาศซำ้หลายครั้ง ทำให้ค่าเดิมถูกล้างไป และครั้งสุดท้ายที่ประกาศคือ x = 3
นอกจากนี้เรายังสามารถใช้ค่าจากตัวแปรเดิมในทางด้านขวา เพื่อกำหนดค่าใหม่ได้อีกด้วย
{% embed url="https://repl.it/@narze/variables-methods-redeclare-1?lite=true" caption="" %}
เมื่อถึงบรรทัด puts x
จะได้ค่าออกมาเป็น 6
ถ้าเราแจกแจงแต่ละบรรทัด x
จะถูกเปลี่ยนค่าดังนี้
x = 1
ทำให้x
มีค่าเป็น1
x = x + 2
เป็นการประกาศx
ใหม่ แต่จากบรรทัดที่แล้วx
มีค่า1
ทำให้ในบรรทัดนี้x
มีค่าเป็น1 + 2
เท่ากับ3
x = x + 3
เป็นการประกาศx
ใหม่อีกครั้ง แต่จากบรรทัดที่แล้วx
มีค่า3
ทำให้ในบรรทัดนี้x
มีค่าเป็น3 + 3
เท่ากับ6
โจทย์ : มีตะกร้าผลไม้ทั้งหมด 5
ใบ ใบหนึ่งมีแอปเปิล 4
ลูก แต่มีแอปเปิลเสียไป 3
ลูกจากทั้งหมด จงหาว่าเหลือแอปเปิลที่ยังไม่เสียกี่ลูก ให้โปรแกรมตอบว่า เหลือแอปเปิล 17 ลูก
โค้ดที่ให้จะยังมี Error อยู่ จงแก้โค้ดให้ทำงานได้และตอบคำถามได้ถูกต้อง โดยการสร้างตัวแปร a, b, c และ d
{% embed url="https://repl.it/@narze/variables-practice?lite=true" caption="" %}
ดูเฉลยได้ในบทถัดไป