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 ค่าที่เดียว

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

Comment



smilebig smileopen-mounthed smileconfused smilesad smileangry smiletonguequestionembarrassedsurprised smilewinkdouble winkcry

แล้วไอ่ single กะ multiple point return นี่มันคืออารายฟระ?!?

โปเกม่อนงง

#1 By ~S G u i~ on 2006-04-27 18:24

อ่ออ หยั่งงี้นี่เอง

โปเกม่อน กระจ่างๆ

#2 By ~S G u i~ on 2006-04-27 20:29

มีเหตุผลทั้ง 2 ฝ่าย

#3 By veer on 2006-04-27 21:17

เป็นพวก multi point ด้วย

ถ้าจะทำ single point ใช้ goto ไปเลยดีกว่า
(แต่ไม่ชอบ ก็เลยทำ multi point ซะหมด)

#4 By PaePae on 2006-04-27 21:49

น่าจะขึ้นอยู่กับเหตุการณ์มากกว่า เพราะที่เขียนๆ อยู่ก็ใช้ปนๆ กันเพราะบาง function optimize แล้ว single จะทำงานได้ make sense กว่า บางอันก็ multi ก็ดูรวดเร็วกว่า

#5 By Ford AntiTrust (61.7.156.246 /10.0.2.1) on 2006-04-28 02:45

ผมเป็นพวกกึ่งกลางสองข้างแฮะ หนักไปทาง single point ซะมาก ยกเว้นอะไรที่มันทำให้รกจริง ๆ ผมก็จะใช้ multipoint

#6 By T!D on 2006-04-28 09:24

Paepae: เวลาเขียน C ผมก็ใช้ Goto จริงๆ นะ
ถึงบางคนจะคิดว่ามันบาปก็ตาม

ส่วนมากภาษาที่มี Goto มันก็จะมี Garbage collector (หรือเปล่า?) ก็เลยมักจะใช้ท่า multipoint ได้ .... แต่ก็จะไปซวยเรื่อง connection อีก (ผมก็ไม่เคยเปิด connection ไว้เป็น local variable ใน function ซะทีอะนะ)

ทำ multipoint แล้วเขียน marco return ของแต่ละ function เอาดีมะ? จะได้ไม่ลืม free ไป free ใน macro เอา -_-'

#7 By veer on 2006-04-28 13:29

ถ้าทำได้ผมก็จะพยายามให้มันเป็นจุดเดียวอ่ะครับ

แต่หลังๆ เริ่มขี้เกียจ เขียน PHP แล้วเริ่มใช้ die() บ่อยขึ้น

#8 By ไอ้แพท.. on 2006-04-29 03:12

vote multiple point return a'

#9 By godspeed on 2006-05-06 23:40