Single vs Multiple point return
posted on 27 Apr 2006 18:19 by kaze in Technology
เรื่องหนึ่งที่โปรแกรมเมอร์หลายๆคน ถกเถียงกันก็คือ
การเขียน function แบบที่เป็น single point return
กับ multiple point return ว่าควรจะเขียนแบบไหนดีกว่า
ในมุมมองของผม ผมชอบที่จะเขียนแบบ multiple point return มากกว่า
เพราะ source code อ่านง่าย
ไม่ต้องมานั่งเก็บ state ทำให้ประหยัด memory
ไม่เปลือง stack ในการเก็บ state เวลาใช้ if ซ้อนกันหลายๆชั้น
และมันทำงานได้เร็วกว่า single point return
แต่ปัญหาเดียวของ multiple point return ที่มักจะถูก
โปรแกรมเมอร์ที่สนับสนุน single point return โจมตีก็คือ
การ maintainance source code เพราะถ้าใน function ที่เราเขียน
เกิดมีการ allocate memory, open connection หรือ อะไรในทำนองนี้
ก่อนจะ return ทุกครั้งต้องมีการ deallocate หรือ close connection...
ซึ่ง ถ้าลืม ก็ซวยไป แต่นั่นผมเห็นว่าเป็นความรับผิดชอบของโปรแกรมเมอร์เอง
ถ้าคุณจะ malloc ก็ควรจะ free ให้ครบ
ซึ่งผมก็เคยอ่าน source code ที่เขียนแบบ single point return
แล้วคืน memory ไม่ครบก็มี อันนี้เป็นที่ความรอบคอบของโปรแกรมเมอร์มากกว่า
ใครที่คิดว่า single point return มีข้อดีที่น่าสนใจอย่างอื่นก็ช่วยบอกที
เซ็งๆ
แก้ไขเพิ่ม เพื่อ โปเกม่อน อย่าง SGui
Single point return: หมายถึง function ที่มีจุด return ค่าที่เดียว
Multiple point return: ก็มีจุด return ค่าได้หลายที่
เลย บ่นๆ หน่อย
source code เขียนสด อาจจะไม่้ค่อยเห็นภาพเท่าไหร่
แต่ตอนทำงานที่เดิมเห็นชัดกว่านี้ function เดียวมันอัดเข้าไป 16000 บรรทัด
คำนวณอะไรไม่รู้เกี่ยวกับ bussines อ่านตาลาย
มี rc เก็บ return code ไว้ บางทีมันก็ลืม check
ดูแล้วมันก็เหมือนลืม free memory แหละ
เป็นความผิดพลาดที่โปรแกรมเมอร์เองหนิหว่า
edit @ 2006/04/27 18:49:11
การเขียน function แบบที่เป็น single point return
กับ multiple point return ว่าควรจะเขียนแบบไหนดีกว่า
ในมุมมองของผม ผมชอบที่จะเขียนแบบ multiple point return มากกว่า
เพราะ source code อ่านง่าย
ไม่ต้องมานั่งเก็บ state ทำให้ประหยัด memory
ไม่เปลือง stack ในการเก็บ state เวลาใช้ if ซ้อนกันหลายๆชั้น
และมันทำงานได้เร็วกว่า single point return
แต่ปัญหาเดียวของ multiple point return ที่มักจะถูก
โปรแกรมเมอร์ที่สนับสนุน single point return โจมตีก็คือ
การ maintainance source code เพราะถ้าใน function ที่เราเขียน
เกิดมีการ allocate memory, open connection หรือ อะไรในทำนองนี้
ก่อนจะ return ทุกครั้งต้องมีการ deallocate หรือ close connection...
ซึ่ง ถ้าลืม ก็ซวยไป แต่นั่นผมเห็นว่าเป็นความรับผิดชอบของโปรแกรมเมอร์เอง
ถ้าคุณจะ malloc ก็ควรจะ free ให้ครบ
ซึ่งผมก็เคยอ่าน source code ที่เขียนแบบ single point return
แล้วคืน memory ไม่ครบก็มี อันนี้เป็นที่ความรอบคอบของโปรแกรมเมอร์มากกว่า
ใครที่คิดว่า single point return มีข้อดีที่น่าสนใจอย่างอื่นก็ช่วยบอกที
เซ็งๆ
แก้ไขเพิ่ม เพื่อ โปเกม่อน อย่าง SGui
Single point return: หมายถึง function ที่มีจุด return ค่าที่เดียว
int fn(...) {
int rc = 1;
if (error) {
rc = -1;
}
if (rc == 1) {
doSomething();
rc = checkSomething();
if (rc == 1) {
doOther();
...
}
}
return rc;
}
Multiple point return: ก็มีจุด return ค่าได้หลายที่
int fn(...) {
int rc;
if (error) {
return -1;
}
doSomething();
if ((rc = checkSomething()) != 1) {
return rc;
}
doOther();
...
return 1;
}ตอนนี้เจอบางภาษาที่ไม่สามารถทำ multiple point return ได้เลย บ่นๆ หน่อย
source code เขียนสด อาจจะไม่้ค่อยเห็นภาพเท่าไหร่
แต่ตอนทำงานที่เดิมเห็นชัดกว่านี้ function เดียวมันอัดเข้าไป 16000 บรรทัด
คำนวณอะไรไม่รู้เกี่ยวกับ bussines อ่านตาลาย
มี rc เก็บ return code ไว้ บางทีมันก็ลืม check
ดูแล้วมันก็เหมือนลืม free memory แหละ
เป็นความผิดพลาดที่โปรแกรมเมอร์เองหนิหว่า
edit @ 2006/04/27 18:49:11

จะได้ไม่ลืม free ไป free ใน macro เอา -_-'
ไอ้แพท..
โปเกม่อนงง
#1 By ~S G u i~ on 2006-04-27 18:24