บทที่ 3: การสร้างฟังก์ชั่น


จากบทที่ 2 ที่มีการเลี้ยวซ้าย มาทดลองสร้างฟังก์ชัน turn_right()

ตัวอย่างโปรแกรม: FirstKarel

แม้ว่าโปรแกรม FirstKarel ข้างต้น แสดงให้เห็นว่าเป็นไปได้ที่จะใช้ตัวดำเนินการที่จะให้หุ่นยนต์คาเรลเลี้ยวขวา turn_right() โดยใช้คำสั่งที่หุ่นยนต์ Karel มีเท่านั้น ซึ่งกรอบแนวคิดในการออกแบบโปรแกรมอาจจะยังไม่ดีเท่าที่ควร เพราะว่าเราต้องใช้คำสั่งเพื่อทำให้หุ่นยนต์คาเรล เลี้ยวซ้ายถึง 3 คำสั่ง ถึงจะทำให้ เลี้ยวขวาได้ เป็นไปได้หรือไม่ที่เราจะออกแบบโปรแกรมให้หุ่นยนต์คาเรลรู้จักคำสั่ง turn_right() เพราะมันจะทำให้เขียนโปรแกรมได้ง่ายขึ้น สั้นลง และอ่านเข้าใจได้ง่าย

เริ่มต้นสร้างคำสั่งใหม่ให้กับหุ่นยนต์คาเรล

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

   def name():
commands that make up the body of the function

ดังนั้น ผู้ใช้จะสามารถสร้างฟังก์ชัน turn_right() ได้ด้วยการประกาศฟังก์ชัน turn_right() แล้วใส่คำสั่ง turn_left() ไว้ในฟังก์ชัน turn_right() 3 ครั้ง

   def turn_right():
turn_left()
turn_left()
turn_left()

ในกรณีเดียวกัน ถ้าต้องการสร้างฟังก์ชันเพื่อให้หุ่นยนต์คาเรลสามารถ หันกลับหลัง เราสามารถสร้างฟังก์ชัน turn_around() ได้โดยใส่คำสั่งทำการเลี้ยวซ้าย 2 ครั้งไว้ในฟังก์ชัน turn_around

   def turn_around():
turn_left()
turn_left()

เราสามารถที่จะใช้ชื่อของฟังก์ชันใหม่ ที่เราได้สร้างขึ้นในขั้นตอนก่อนหน้ามาใช้ในส่วนของการเขียนโปรแกรมได้ ยกตัวอย่างเช่น เราสามารถใช้คำสั่ง turn_right() เพียงบรรทัดเดียว แทนการใช้คำสั่ง turn_left() 3 ครั้ง ซึ่งจะช่วยให้ผู้อ่านเข้าใจง่าย และส่วนของโปรแกรมสั้นลง สามารถดูตัวอย่างของโปรแกรมได้ดังตัวอย่างด้านล่าง

เขียนฟังก์ชันให้อยู่ในกรอบ

ภาษาไพธอนใช้การย่อหน้า (Indent) ในการจัดกลุ่มคำสั่งเป็นกลุ่มๆ ซึ่งกลุ่มของคำสั่งที่ถูกย่อหน้าเรียงตรงกันจะนับเป็น Code Block ด้วยโครงสร้างของภาษาไพธอน ไม่อนุญาตให้ประกาศฟังก์ชันใหม่ภายในฟังก์ชันอื่นๆ ได้


บทถัดไป