เมื่อคุณเขียนโปรแกรม คุณกำลังกำหนดขั้นตอนตามตัวอักษร หรือ งานประจำ คุณต้องการให้คอมพิวเตอร์ทำงาน การเปรียบเทียบง่ายๆ เปรียบเทียบการเขียนโปรแกรมคอมพิวเตอร์กับการอบขนมปัง:คุณระบุส่วนผสมในครั้งเดียวเพื่อสร้างสภาพแวดล้อมการทำงาน จากนั้นคุณระบุขั้นตอนที่คุณต้องทำเพื่อให้ได้ขนมปังก้อนหนึ่ง ทั้งในการเขียนโปรแกรมและการอบ บางขั้นตอนต้องทำซ้ำในช่วงเวลาต่างๆ ตัวอย่างเช่น ในการอบขนมปัง อาจเป็นกระบวนการป้อนอาหารเปรี้ยว:
STIR=100
SNOOZE=86400
function feed_culture {
remove_from(pantry)
add(flour, water)
stir($STIR)
sleep($SNOOZE)
}
และต่อมาก็นวดแป้งและพิสูจน์แป้ง:
KNEAD=600
SNOOZE=7200
function process_dough {
remove_from(proofing_drawer)
knead($KNEAD)
return_to_drawer($SNOOZE)
}
ในการเขียนโปรแกรม รูทีนย่อยเหล่านี้สามารถแสดงเป็น ฟังก์ชัน . ฟังก์ชันมีความสำคัญสำหรับโปรแกรมเมอร์ เนื่องจากช่วยลดความซ้ำซ้อนในโค้ด ซึ่งจะช่วยลดปริมาณการบำรุงรักษาที่จำเป็น ตัวอย่างเช่น ในสถานการณ์สมมติของการอบขนมปังแบบเป็นโปรแกรม หากคุณต้องการเปลี่ยนระยะเวลาในการพิสูจน์แป้ง ตราบใดที่คุณเคยใช้ฟังก์ชันมาก่อน คุณเพียงแค่ต้องเปลี่ยนค่าของวินาทีหนึ่งครั้ง ไม่ว่าจะโดย โดยใช้ตัวแปร (เรียกว่า SNOOZE ในโค้ดตัวอย่าง) หรือโดยตรงในรูทีนย่อยที่ประมวลผลโด วิธีนี้ช่วยคุณประหยัดเวลาได้มาก เพราะคุณไม่จำเป็นต้องค้นหา codebase ทุกครั้งที่พูดถึงแป้งโดว์ที่เพิ่มขึ้น ไม่ต้องกังวลว่าจะพลาดอะไรไปมาก ข้อบกพร่องหลายอย่างเกิดจากค่าที่ไม่ได้รับซึ่งไม่ได้รับการเปลี่ยนแปลงหรือโดย sed
ที่ดำเนินการไม่ดี ออกคำสั่งโดยหวังว่าจะจับทุกนัดสุดท้ายโดยไม่ต้องออกล่าด้วยตนเอง
ใน Bash การกำหนดฟังก์ชันนั้นง่ายพอๆ กับการตั้งค่าในไฟล์สคริปต์ที่คุณกำลังเขียนหรือในไฟล์แยกต่างหาก หากคุณบันทึกฟังก์ชันลงในไฟล์เฉพาะ คุณสามารถ source
ลงในสคริปต์ของคุณเหมือนกับที่คุณจะ include
ไลบรารีในภาษา C หรือ C++ หรือ import
โมดูลใน Python ในการสร้างฟังก์ชัน Bash ให้ใช้คำหลัก function
:
function foo {
# code here
}
นี่เป็นตัวอย่างง่ายๆ (และค่อนข้างวางแผน เนื่องจากอาจทำให้ง่ายขึ้น) ตัวอย่างการทำงานของฟังก์ชันที่มีอาร์กิวเมนต์:
#!/usr/bin/env bash
ARG=$1
function mimic {
if [[ -z $ARG ]]; then
ARG='world'
fi
echo "hello $ARG"
}
mimic $ARG
นี่คือผลลัพธ์:
$ ./mimic
hello world
$ ./mimic everybody
hello everybody
สังเกตบรรทัดสุดท้ายของสคริปต์ซึ่งเรียกใช้ฟังก์ชัน นี่เป็นจุดทั่วไปที่ทำให้เกิดความสับสนสำหรับผู้เริ่มเขียนสคริปต์และโปรแกรมเมอร์:ฟังก์ชันต่างๆ จะไม่ถูกดำเนินการโดยอัตโนมัติ มีอยู่เป็นศักยภาพ ประจำจนถูกเรียก
หากไม่มีสายเรียกฟังก์ชัน ฟังก์ชันจะถูกกำหนดเท่านั้นและจะไม่ทำงาน
หากคุณยังใหม่กับ Bash ให้ลองเรียกใช้สคริปต์ตัวอย่างหนึ่งครั้งโดยรวมบรรทัดสุดท้ายและอีกครั้งโดยใส่ความคิดเห็นในบรรทัดสุดท้าย
การใช้ฟังก์ชัน
ฟังก์ชันคือแนวคิดการเขียนโปรแกรมที่สำคัญ แม้กระทั่งสำหรับสคริปต์ธรรมดา ยิ่งคุณใช้งานฟังก์ชันได้สะดวกสบายมากเท่าไร คุณก็จะยิ่งดีขึ้นเมื่อต้องเผชิญกับปัญหาที่ซับซ้อนซึ่งต้องการบางสิ่งแบบไดนามิกมากกว่าแค่บรรทัดคำสั่งที่เปิดเผย การเก็บฟังก์ชันเอนกประสงค์ไว้ในไฟล์แยกกันยังช่วยให้คุณประหยัดงานได้ เนื่องจากจะช่วยให้คุณสร้างกิจวัตรที่คุณใช้เป็นประจำได้ เพื่อให้คุณนำกลับมาใช้ใหม่ในโครงการต่างๆ ได้ ดูนิสัยการเขียนสคริปต์ของคุณและดูว่าฟังก์ชันใดเหมาะสม