Bash:
การปรับโครงสร้างโค้ด
วิธีการ:
ลองพิจารณาสคริปต์ Bash ง่ายๆ ที่ต้องการการ Refactoring มันอึดอัด, มีโค้ดที่ซ้ำซากและยากต่อการติดตาม:
#!/bin/bash
echo "Enter a filename:"
read filename
if [ -f "$filename" ]; then
echo "File exists."
count=$(grep -c "foo" "$filename")
echo "The word foo appears $count times."
else
echo "File does not exist."
fi
การ Refactoring สำหรับความชัดเจนและความสามารถในการใช้ซ้ำอาจเกี่ยวข้องกับการนำฟังก์ชั่นเข้ามาใช้และการจัดการข้อผิดพลาดได้อย่างมีเมตตากรุณามากขึ้น:
#!/bin/bash
function file_exists() {
[[ -f "$1" ]]
}
function count_occurrences() {
grep -c "$1" "$2"
}
function main() {
local filename word count
echo "Enter a filename:"
read -r filename
echo "Enter the word to search for:"
read -r word
if file_exists "$filename"; then
count=$(count_occurrences "$word" "$filename")
echo "The word $word appears $count times."
else
echo "File does not exist." >&2
exit 1
fi
}
main "$@"
เวอร์ชันที่ได้รับการ Refactoring ใช้ฟังก์ชั่นเพื่อปรับปรุงความอ่านง่ายและทำให้สามารถนำกลับมาใช้ใหม่ได้
การไขลึก:
การ Refactoring ไม่ใช่ความคิดที่เริ่มต้นด้วย Bash หรือแม้กระทั่งภาษาโปรแกรมระดับสูง; มันเก่าแก่เท่ากับการเขียนโปรแกรมเอง Refactoring เป็นคำที่ถูกรูปแบบในหนังสือ “Refactoring: Improving the Design of Existing Code” โดย Martin Fowler ในปี 1999, โดยเน้นหลักๆ ที่ภาษาเชิงวัตถุ
ในบริบทของการเขียนสคริปต์ Bash, การ Refactoring มักหมายถึงการแยกสคริปต์ยาวออกเป็นฟังก์ชั่น, ลดการทำซ้ำกับลูปหรือเงื่อนไข, และหลีกเลี่ยงข้อผิดพลาดทั่วไปเช่นการล้มเหลวในการจัดการกับช่องว่างในชื่อไฟล์ การเลือกใช้ทางเลือกอื่นนอกเหนือจาก Bash สำหรับสคริปต์ที่กลายเป็นซับซ้อนเกินไป ได้แก่ Python หรือ Perl ซึ่งมีโครงสร้างข้อมูลและการจัดการข้อผิดพลาดที่ดีกว่าสำหรับงานที่ซับซ้อน
การ Refactoring โดยเฉพาะกับ Bash นั้นเกี่ยวกับการยึดถือแนวทางปฏิบัติที่ดีที่สุด เช่น การอ้างอิงตัวแปร, การใช้ [[ ]]
สำหรับการทดสอบมากกว่า [ ]
, และการแนะนำให้ใช้ printf
มากกว่า echo
เพื่อผลลัพธ์ที่เข้มแข็ง รายละเอียดการปฏิบัติมักจะเกี่ยวข้องกับการยึดถือตามแนวทางและใช้เครื่องมือเช่น shellcheck
สำหรับการวิเคราะห์สถิติเพื่อจับข้อผิดพลาดทั่วไป