Go:
การจัดระเบียบโค้ดเข้าไปในฟังก์ชัน
วิธีการ:
ใน Go เรากำหนดฟังก์ชันโดยใช้คีย์เวิร์ด func
ตามด้วยชื่อของฟังก์ชัน พารามิเตอร์ (หากมี) และประเภทของค่าที่ส่งกลับ มารับดูตัวอย่างง่าย ๆ:
package main
import "fmt"
// กำหนดฟังก์ชันเพื่อคำนวณผลรวมของสองตัวเลข
func addNumbers(a int, b int) int {
return a + b
}
func main() {
sum := addNumbers(5, 7)
fmt.Println("ผลรวมคือ:", sum)
// ผลลัพธ์: ผลรวมคือ: 12
}
ฟังก์ชันก็สามารถส่งค่ากลับมากกว่าหนึ่งค่าได้ ซึ่งเป็นลักษณะพิเศษที่แตกต่างจากภาษาอื่น ๆ นี่คือวิธีที่คุณสามารถใช้ประโยชน์จากมัน:
// กำหนดฟังก์ชันเพื่อสลับตัวเลขสองตัว
func swap(a, b int) (int, int) {
return b, a
}
func main() {
x, y := swap(10, 20)
fmt.Println("x, y หลังจากสลับ:", x, y)
// ผลลัพธ์: x, y หลังจากสลับ: 20 10
}
คุณยังสามารถกำหนดฟังก์ชันที่มีจำนวนอาร์กิวเมนต์แบบไม่รู้จำนวนได้โดยใช้ ellipsis ...
ก่อนประเภทพารามิเตอร์ นี่เป็นวิธีที่เป็นประโยชน์สำหรับการสร้างฟังก์ชันที่ยืดหยุ่น:
// กำหนดฟังก์ชันเพื่อคำนวณผลรวมของจำนวนตัวเลขไม่รู้จบ
func sum(numbers ...int) int {
total := 0
for _, number := range numbers {
total += number
}
return total
}
func main() {
total := sum(1, 2, 3, 4, 5)
fmt.Println("ผลรวมคือ:", total)
// ผลลัพธ์: ผลรวมคือ: 15
}
พิจารณาเพิ่มเติม
แนวคิดในการจัดระเบียบโค้ดเข้าสู่ฟังก์ชันไม่ได้เป็นเรื่องแปลกใหม่สำหรับ Go—มันเป็นหลักการเขียนโปรแกรมพื้นฐาน อย่างไรก็ตาม Go นำเสนอมายตราการและความสามารถบางอย่างที่ทำให้การจัดการฟังก์ชันของมันมีเอกลักษณ์ เช่น ความสามารถในการส่งค่ากลับจากฟังก์ชันหลายค่าได้ ซึ่งเป็นคุณสมบัติที่ค่อนข้างพิเศษและสามารถนำไปสู่โค้ดที่สะอาดและเข้าใจง่ายขึ้น โดยเฉพาะเมื่อจัดการกับงานที่อาจต้องใช้พอยน์เตอร์หรือการจัดการข้อยกเว้นตามปกติ
นอกจากนี้ Go ยังรองรับฟังก์ชันแบบ first-class—ฟังก์ชันที่สามารถถูกส่งเป็นอาร์กิวเมนต์ไปยังฟังก์ชันอื่น ๆ ถูกส่งค่ากลับจากฟังก์ชัน และถูกกำหนดให้กับตัวแปร—ช่วยเพิ่มการรองรับแพทเทิร์นการเขียนโปรแกรมแบบฟังก์ชันของภาษา คุณสมบัตินี้มีประโยชน์เฉพาะในการสร้างฟังก์ชันระดับสูงที่จัดการหรือรวมฟังก์ชันอื่น ๆ
อย่างไรก็ตาม มันสำคัญที่จะต้องระวัง “กฎของผลตอบแทนที่ลดลง” เมื่อจัดระเบียบโค้ดเข้าสู่ฟังก์ชัน การแบ่งส่วนเกินไปสามารถนำไปสู่การทำให้ความคิดที่คลุมเครือ เพิ่มความยากในการเข้าใจและการดูแลรักษา นอกจากนี้ ในขณะที่วิธีการจัดการข้อผิดพลาดแบบง่าย ๆ ของ Go (การส่งค่าคืนข้อผิดพลาดเป็นค่าส่งคืนตามปกติ) ทำให้การแพร่กระจายข้อผิดพลาดในหลายระดับของการเรียกฟังก์ชันสะอาดขึ้น แต่อาจนำไปสู่โค้ดการจัดการข้อผิดพลาดที่ซ้ำซ้อน การใช้กรอบการจัดการข้อผิดพลาดหรือการดำเนินการตามแนวทาง “try-catch” จากภาษาอื่น ๆ (ถึงแม้ว่าจะไม่ได้รับการรองรับโดยเนทีฟ) ผ่านการใช้งานแพ็กเกจอาจเสนอวิธีแก้ปัญหาที่มีเสน่ห์มากขึ้นตามกรณีการใช้งาน
การตัดสินใจในการใช้ฟังก์ชันและการแบ่งส่วนมากน้อยใน Go ควรทำให้สมดุลระหว่างความต้องการในการคาดเดา, ความสามารถในการดูแลรักษา, ประสิทธิภาพ และการจัดการข้อผิดพลาดที่เข้าใจง่าย ทำให้สูงสุดของคุณสมบัติที่ตรงไปตรงมา แต่ทรงพลังของ Go