/ BasicKnowledge

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

หลายๆ คนที่เริ่มศึกษาการเขียนโปรแกรม ก็อาจจะรู้จัก หรือเคยได้ยิน คำว่า “ตัวแปร” แต่ไม่ว่าจะเคยได้ยินหรือไม่ เรามาดูกันเลยดีกว่าว่ามันคืออะไร แล้วมีไว้ทำไม


ตัวแปร

เราน่าจะเคยได้ยินคำว่า “ตัวแปร” กันมาก่อนแล้วในวิชาคณิตศาสตร์ หรือในวิชาวิทยาศาสตร์ โดยเราใช้มันในความหมายว่า

ตัวแปร (variable) คือ ค่าหรือข้อมูลใดๆ ที่สามารถเปลี่ยนแปลงได้

คำว่าตัวแปรในภาษาอังกฤษคือ variable ซึ่งมาจากคำว่า vary ที่แปลว่า เปลี่ยนแปลง หรือผันแปร กับคำว่า able ที่ให้ความหมายประมาณว่า ทำได้ พอรวมกันแล้ว ก็จะหมายถึง สิ่งที่สามารถเปลี่ยนแปลงได้

Alt equation

จากภาพสมการข้างต้น คือตัวอย่างของตัวแปรในคณิตศาสร์ เราจะเห็นตัว x ที่อยู่หลังเลข 4 เราเรียกตัว x นั้นว่าตัวแปร x และเราสามารถแทนค่าใดๆ ใน x เพื่อให้สมการเป็นจริงหรือเป็นเท็จได้

ศัพท์อื่นๆ ในภาพ

Coefficient หรือ ค่าสัมประสิทธิ์ คือค่าคงที่ใดๆ ที่คูฯอยู่กับตัวแปร

Operator หรือ ตัวดำเนินการ เป็นสัญลักษณ์ทางคณิตศาสตร์ ที่ใช้เพื่อแทนการกระทำบางอย่างกับข้อมูล

Constant คือ ค่าคงที่ คือจำนวนหรือข้อมูลใดๆ ที่ถูกกำหนดมาตั้งแต่ต้นและไม่สามารถเปลี่ยนแปลงได้

*ศัพท์ทุกคำในภาพที่ได้เห็นกันไปนั้น ถูกนำมาใช้ในภาษาโปรแกรมด้วยเช่นกัน และมีความหมายเดียวกันอีกด้วย

ตัวแปรในภาษาโปรแกรม

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

Strongly typed คือภาษาโปรแกรมที่มีการระบุชนิดของตัวแปรใดๆ และไม่สามารถใช้ตัวแปรชนิดหนึ่งเก็บข้อมูลอีกชนิดหนึ่งได้

Weakly typed คือภาษาโปรแกรมที่ไม่มีการระบุชนิดที่แน่นอนของตัวแปร ทำให้สามารถเก็บค่าใดๆ ในตัวแปรใดๆก็ไดๆ

โดยปกติแล้วเราจะเริ่มเรียนจากภาษาโปรแกรมประเภท Strongly typed ก่อน เพราะมันง่ายสำหรับการตรวจความถูกต้อง โดยทั่วไปแล้วการใช้ตัวแปรในภาษาเหล่านี้ จะต้องมีการประกาศให้ทราบก่อนว่าจะมีตัวแปรนี้เกิดขึ้น การประกาศนั้นจะมีรูปแบบคล้ายๆ กัน ดังนี้

ชนิดของตัวแปร ชื่อของตัวแปร = ค่าของตัวแปร

การใช้งานตัวแปรในภาษาแบบ Strongly typed

ตัวอย่างการคำนวณค่าไอโฟน

int iPhonePrice = 23900; //ราคาไอโฟน 1 เครื่อง
int count = 3; //จำนวนไอโฟนที่ต้องการซื้อ
int total = iPhonePrice * count; //เงินที่ต้องจ่าย

จากตัวอย่าง จะพบว่ามีการประกาศตัวแปร 3 ตัว คือ iPhonePrice count และ total ทั้ง 3 ตัวมีชนิดเป็น int หรือ จำนวนเต็ม โดย 2 ตัวแรกถูกระบุค่าไว้ด้วยจำนวนเต็มปกติ แต่ตัวสุดท้าย total ถูกระบุให้มีค่าเท่ากับค่าของ iPhonePrice คูณกับ count ดังนั้นถ้าเราเปลี่ยนค่า count ข้างบน ค่าของ total ก็จะเปลี่ยน (ทุกครั้งที่เปลี่ยน ต้องสั่งให้คำนวณค่า total ใหม่เอง)

ตัวอย่างการคำนวณค่าไอโฟน

int iPhonePrice = 23900; //ราคาไอโฟน 1 เครื่อง 
int count = 3; //จำนวนไอโฟนที่ต้องการซื้อ 
int total = iPhonePrice * count; //เงินที่ต้องจ่าย 	
Console.WriteLine(total); //จะพิมพ์ค่า 71700 ออกมา 
count = 4; 	
Console.WriteLine(total); //จะพิมพ์ค่า 71700 ออกมา เพราะยังไม่ได้คำนวนใหม่ 
total = iPhonePrice * count; 
Console.WriteLine(total); //จะพิมพ์ค่า 95600 ออกมา

จากตัวอย่าง จะเห็นว่าในบรรทัดที่ 4 มีการพิมพ์ค่าผลลัพธ์ เป็น 71700 แล้วหลังจากนั้นสั่งเปลี่ยนค่า count เป็น 4 (การเปลี่ยนค่าตัวแปรใดๆที่ประกาศแล้ว ไม่ต้องระบุ type) เมื่อพิมพ์ค่าของ total ก็ยังได้เท่าเดิมอยู่ หลังจากนั้นเมื่อสั่งให้คำนวณใหม่อีกครั้ง total จึงได้ค่าใหม่ที่ถูกต้อง

ตัวอย่างการคำนวณค่าไอโฟน

int iPhonePrice = 23900; //ราคาไอโฟน 1 เครื่อง 
int count = 3; //จำนวนไอโฟนที่ต้องการซื้อ 
int total = iPhonePrice * count; //เงินที่ต้องจ่าย 
Console.WriteLine(total); //จะพิมพ์ค่า 71700 ออกมา 
count = 4; Console.WriteLine(total); //จะพิมพ์ค่า 71700 ออกมา เพราะยังไม่ได้คำนวนใหม่ 
total = iPhonePrice * count; 
Console.WriteLine(total); //จะพิมพ์ค่า 95600 ออกมา 
total = total + "บาท"; //ไม่สามารถทำได้ เพราะคำว่า บาท ไม่ใช่จำนวนเต็ม(int) String totalString = total + "บาท"; //ทำได้เพราะเก็บลงในตัวแปรชนิดสายอักษรแทน

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

การใช้งานตัวแปรในภาษาแบบ Weakly typed

ตัวอย่างการคำนวณค่าไอโฟน

$iPhonePrice = 23900; //ราคาไอโฟน 1 เครื่อง
$count = 3; //จำนวนไอโฟนที่ต้องการซื้อ
$total = $iPhonePrice * $count; //เงินที่ต้องจ่าย

ตัวอย่างเดียวกันกับของ Strongly typed แต่เปลี่ยนไปใช้ภาษาตระกูลที่เป็น Weakly typed คือ PHP จะเห็นว่าในภาษา PHP จะมีการใช้เครื่องหมาย $ นำหน้าชื่อตัวแปรและไม่มีการระบุชนิดใดๆ

ตัวอย่างการคำนวณค่าไอโฟน

$iPhonePrice = 23900; //ราคาไอโฟน 1 เครื่อง
$count = 3; //จำนวนไอโฟนที่ต้องการซื้อ
$total = $iPhonePrice * $count; //เงินที่ต้องจ่าย
echo $total; //จะพิมพ์ค่า 71700 ออกมา
$count = 4;
echo $total;  //จะพิมพ์ค่า 71700 ออกมา เพราะยังไม่ได้คำนวนใหม่
$total = $iPhonePrice * $count; //เงินที่ต้องจ่าย
echo $total; //จะพิมพ์ค่า 95600 ออกมา

ตัวอย่างนี้ยังคงทำงานได้เหมือนกับตัวอย่างก่อนหน้า และไม่มีอะไรแตกต่างกันแม้แต่น้อย

ตัวอย่างการคำนวณค่าไอโฟน

$iPhonePrice = 23900; //ราคาไอโฟน 1 เครื่อง
$count = 3; //จำนวนไอโฟนที่ต้องการซื้อ
$total = $iPhonePrice * $count; //เงินที่ต้องจ่าย
echo $total; //จะพิมพ์ค่า 71700 ออกมา
$count = 4;
echo $total;  //จะพิมพ์ค่า 71700 ออกมา เพราะยังไม่ได้คำนวนใหม่
$total = $iPhonePrice * $count; //เงินที่ต้องจ่าย
echo $total; //จะพิมพ์ค่า 95600 ออกมา
$total = $total . "บาท"; //สามารถทำได้ (ใน PHP ใช้ . ในการต่อ สายอักษรแทนเครื่องหมาย +)

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

*ในหลายๆ ภาษาโปรแกรมเริ่มมีความสามารถทั้งแบบ Strongly typed และ Weakly typed พร้อมกัน เนื่องจากทั้งสองลักษณะนั้นมีข้อดีข้อเสียต่างกัน

ทิ้งท้าย

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