บทนำ
การเรียนภาษาโปรแกรมใหม่สามารถสนุกได้ ทุกครั้งที่ผมลองเรียนภาษาใหม่ ผมโฟกัสที่การกำหนด variables, การเขียน statements, และการประเมิน expressions เมื่อผมเข้าใจแนวคิดเหล่านี้ทั่วไป ผมมักจะจัดการส่วนที่เหลือได้เอง ภาษาโปรแกรมส่วนใหญ่มีความคล้ายคลึงกัน ดังนั้นเมื่อคุณรู้ภาษาหนึ่ง การเรียนภาษาถัดไปเป็นเรื่องของการหา nuances และความแตกต่างที่เฉพาะตัว
เพื่อช่วยฝึกฝนภาษาโปรแกรมใหม่ ผมชอบเขียน test programs ไปสักโปรแกรมหนึ่งที่ผมเขียนบ่อยคือโปรแกรม "เดาตัวเลข" เรียบง่าย ที่คอมพิวเตอร์สุ่มตัวเลขระหว่าง 1 ถึง 100 และขอให้ผมเดา โปรแกรมจะ loop จนกว่าผมจะเดาถูก
โปรแกรม "เดาตัวเลข" ทดสอบหลายแนวคิดในภาษาโปรแกรม: การกำหนดค่าให้ variables, การเขียน statements, และการทำ conditional evaluation และ loops นี่เป็นทดลองปฏิบัติที่ยอดเยี่ยมสำหรับการเรียนภาษาโปรแกรมใหม่
เดาตัวเลขใน Bash
Bash เป็น standard shell สำหรับระบบ Linux ส่วนใหญ่ นอกจากให้ rich command-line user interface แล้ว Bash ยังรองรับภาษาโปรแกรมครบวงจรในรูปของ scripts
หากคุณไม่คุ้นเคยกับ Bash ผมแนะนำบทนำเหล่านี้:
- What is Bash?
- Get started with Bash programming
- Get started with Bash scripting for sysadmins
- How to write functions in Bash
- Read more about Bash
คุณสามารถสำรวจ Bash โดยเขียนเวอร์ชันของเกม "เดาตัวเลข" นี่คือการ implement ของผม:
#!/bin/bash number=$(( $RANDOM % 100 + 1 )) echo "Guess a number between 1 and 100" guess=0 while [ "0$guess" -ne $number ] ; do read guess [ "0$guess" -lt $number ] && echo "Too low" [ "0$guess" -gt $number ] && echo "Too high" done echo "That's right!" exit 0
การวิเคราะห์สคริปต์
บรรทัดแรกในสคริปต์ #!/bin/bash บอก Linux ให้รันสคริปต์นี้ด้วย Bash shell ทุกสคริปต์เริ่มต้นด้วยคู่ตัวอักษร #! ซึ่งบอกว่านี่คือ shell script สิ่งที่ตาม #! ทันทีคือ shell ที่จะรัน ในกรณีนี้ /bin/bash คือ Bash shell
เพื่อกำหนดค่าให้ variable ให้ระบุชื่อ variable ตามด้วยเครื่องหมาย = ตัวอย่าง คำสั่ง guess=0 กำหนดค่าเป็นศูนย์ให้ variable guess
คุณยังสามารถพรอมต์ให้ผู้ใช้ป้อนค่าได้ด้วยคำสั่ง read หากคุณเขียน read guess Bash จะรอผู้ใช้ป้อนข้อความ แล้วเก็บค่านั้นใน variable guess
เพื่ออ้างอิงค่าของ variable ใช้ $ นำหน้าชื่อ variable ดังนั้นหลังจากเก็บค่าใน variable guess คุณสามารถเรียกค่าได้ด้วย $guess
คุณสามารถใช้ชื่อใดๆ สำหรับ variables แต Bash สำรองชื่อ variable พิเศษบางตัวไว้เอง ตัวแปรพิเศษหนึ่งคือ RANDOM ซึ่งสร้างตัวเลขสุ่มใหญ่มากทุกครั้งที่คุณอ้างอิงมัน
หากคุณต้องการดำเนินการคำนวณพร้อมกับเก็บค่า คุณต้องล้อมคำสั่งด้วย brackets พิเศษ นี่บอก Bash ให้รันคำสั่งนั้นก่อน และ = จะเก็บค่าผลลัพธ์ใน variable ในการประเมินนิพจน์คณิตศาสตร์ ใช้ $(( )) ล้อมรอบคำสั่งของคุณ วงเล็บคู่บ่งชี้ arithmetic expression ในตัวอย่างของผม number=$(( $RANDOM % 100 + 1 )) ประเมินนิพจน์ $RANDOM % 100 + 1 แล้วเก็บค่าใน variable number
Standard arithmetic operators เช่น + (บวก), - (ลบ), * (คูณ), / (หาร), และ % (modulo) ใช้ได้
นั่นหมายความว่า คำสั่ง number=$(( $RANDOM % 100 + 1 )) สร้างตัวเลขสุ่มระหว่าง 1 ถึง 100 Modulo operator (%) คืนค่า เศษ หลังจากหารสองตัวเลข ในกรณีนี้ Bash หารตัวเลขสุ่มด้วย 100 เหลือเศษในช่วง 0 ถึง 99 ด้วยการบวก 1 เข้าไป คุณได้ตัวเลขสุ่มระหว่าง 1 ถึง 100
Bash รองรับ conditional expressions และ flow control เช่น loops ในเกม "เดาตัวเลข" Bash จะ loop ตราบใดที่ค่าใน guess ไม่เท่ากับ number หากเดาต่ำกว่าตัวเลขสุ่ม Bash พิมพ์ "Too low" และหากเดาสูงกว่า Bash พิมพ์ "Too high"
วิธีการทำงาน
ตอนนี้ที่คุณเขียน Bash script แล้ว คุณสามารถรันมันเพื่อเล่นเกม "เดาตัวเลข" ต่อเนื่องเดาจนกว่าจะได้ตัวเลขที่ถูกต้อง:
Guess a number between 1 and 100 50 Too high 30 Too high 20 Too high 10 Too low 15 Too high 13 Too low 14 That's right!
ทุกครั้งที่คุณรันสคริปต์ Bash จะสุ่มตัวเลขที่ต่างกัน
เกม "เดาตัวเลข" นี้เป็นโปรแกรมแนะนำที่ยอดเยี่ยมเมื่อเรียนภาษาโปรแกรมใหม่ เพราะมันทดสอบแนวคิดการเขียนโปรแกรมทั่วไปหลายอย่างในวิธีที่ตรงไปตรงมา ด้วยการ implement เกมง่ายนี้ในภาษาโปรแกรมต่างๆ คุณสามารถสาธิตแนวคิดหลักและเปรียบเทียบรายละเอียดในแต่ละภาษา
คุณมีภาษาโปรแกรมโปรดไหม? คุณจะเขียนเกม "เดาตัวเลข" ในมันอย่างไร? ติดตามซีรีส์บทความนี้เพื่อดูตัวอย่างภาษาโปรแกรมอื่นๆ ที่อาจน่าสนใจคุณ