การเขียนโปรแกรม : ค่า return คืออะไร ต้องมีไว้ทำไม
ขอแบบคำตอบ ภาษาพูดนะครับ ไม่เอาภาษาทางการ เพราะว่าผมก็เคยลอง search google ดูแล้ว แต่ก็ยังไม่เข้าใจความหมาย และการทำงานของมันอยู่ดี
ถ้าจะไล่ให้ผมไปหา search ข้อมูลเอาเอง ผมก็คงไม่มาตั้งกระทู้ให้ทุกคนด่าผมหรอกครับ ^^
return ของอะไรอ่ะ?
nat3738 Wed, 05/12/2012 - 23:03
return ของอะไรอ่ะ? ของฟังชั่น? ของโปรแกรม?
เพื่อส่งค่ากลับให้ผู้เรียกครั
hisoft Wed, 05/12/2012 - 23:06
เพื่อส่งค่ากลับให้ผู้เรียกครับ เช่น คำตอบของคำถาม ผลของการทำงาน (ได้/ไม่ได้)
function
PaPaSEK Wed, 05/12/2012 - 23:14
function คือชุดคำสั่งที่ถูกรวมไว้ใน block นึงๆ มีหน้าที่ใดหน้าที่หนึ่งเสมอครับ
function อาจมีการรับค่าจากภายนอกมาประมวณผล หรืออาจไม่มีก็ได้
เช่น function ชื่อ MIN รับค่าเป็นชุดของตัวเลข มีหน้าที่หาค่าที่น้อยที่สุดจากชุดของตัวเลขที่เราส่งให้มัน
ค่าน้อยที่สุดที่เราได้ หรือเรียกอีกอย่างว่าผลลัพท์ของ function MIN คือค่า return ครับ
function ใดๆ อาจจะมีการ return ค่า หรืออาจจะไม่มีก็ได้
ในภาษาระดับสูง ค่า return จะต้องระบุชนิดด้วย เช่น string, integer, float
หวังว่าคงเป็นภาษาพูดพอนะครับ กำลังเริ่มเขียนโปรแกรมหรือครับ?
ใช่แล้วครับ
Benzines Thu, 06/12/2012 - 00:41
In reply to function by PaPaSEK
ใช่แล้วครับ ผมเพิ่งจะเริ่มเขียนโปรแกรมครับ ยัง งงๆ อยู่ในหลายๆเรื่อง
ขอบคุณสำหรับคำตอบนะครับ ^^
ยินดีครับ แต่ขอแนะนำหน่อยว่าค
PaPaSEK Thu, 06/12/2012 - 08:49
In reply to ใช่แล้วครับ by Benzines
ยินดีครับ
แต่ขอแนะนำหน่อยว่าควรจะหาหนังสือมาอ่านจริงจังสักหนึ่งเล่ม เพื่อให้เข้าใจแนวพื้นฐานต่างๆ ครับ มีหลายๆ เรื่องที่มันเป็นภาคทฤษฎีที่เราควรเรียนรู้เอาไว้ เช่น pointer, reference, array, collection, data structure อะไรพวกนี้
บางคนมองว่าเอาไปเรียนรู้ที่หลังก็ได้ แต่ผมมองว่าพวกนี้คือการฝึกแปรลูก ฝึกส่งบอล ฝึกเตะหลังเท้า ฯลฯ ที่พอเรามีพื้นฐานแน่นแล้วจะไปพลิกแพลงเป็นไซ้ก้อย ไซ้โป้งได้ไม่ยาก แถมส่งบอลแม่นขึ้นด้วยครับ
ผมเจอว่าน้องๆ ที่จบใหม่หลายคนถามเรื่อง array มันยังไม่เข้าใจกันเลย เรียนมา 4 ปีนี่ลอกโค้ดได้อย่างเดียว ... ให้แก้โค้ดหรือเขียนโค้ดใหม่ก็ทำไม่เป็น เพราะพื้นฐานไม่แน่นครับ
ผมเห็นด้วยครับ
kowito Thu, 06/12/2012 - 12:29
In reply to ยินดีครับ แต่ขอแนะนำหน่อยว่าค by PaPaSEK
ผมเห็นด้วยครับ จริงแล้วควรเริ่มจากทำความเข้าใจ Concept พื้นฐานของ Com Sci ก่อน ไม่งั้นฝืนไปก็รังแต่จะตัน ลองอ่านนี่ดู เพื่อจะเข้าใจ Concept คร่าวก่อนครับ
การออกแบบและพัฒนาโปรแกรม
อืม
achidad Wed, 05/12/2012 - 23:50
อืม ตอบตามความเข้าใจของผมก็แล้วกันครับ
ค่า return แบ่งเป็น 2 แบบคือ
ค่า return ของ function
เช่น function absolute($value) เป็น function ที่ทำให้ค่า $value กลายเป็นค่า สัมบรูณ์ ดังนั้น function absolute() จะต้อง return ค่าที่เป็นค่าสัมบรูณ์เพื่อเอาไปใช้ต่อ
ค่า return ของโปรแกรม
ตัวโปรแกรมทุกโปรแกรมจะ return ค่าเมื่อทำงานเสร็จสิ้น เช่น rasdial บน windows ถ้าทำการเชื่อมต่อไปยังปลายทางสำเร็จจะ return ค่า 0 ถ้าไม่สำเร็จจะ return ค่าอื่น เช่น 678 ค่าที่ return กลับมาจำทำให้เราทราบว่าเกิดความผิดพลาดเพราะอะไรครับ ลองอ่านเกี่ยวกับ ERRORLEVEL ของ windows ดูครับ
ที่จริง คือ ผมไม่รู้ว่าค่า
Benzines Thu, 06/12/2012 - 00:43
In reply to อืม by achidad
ที่จริง คือ ผมไม่รู้ว่าค่า return คืออะไรเลยอ่ะครับ
ต้องขอบคุณนะครับ ที่มาช่วยตอบ ทำให้ผมรู้ว่านอกจากจะอยู่ใน function แล้ว ยังมีอยู่ใน program ด้วย
ขอบคุณนะครับ ^^
มันก็ตรงๆ นะครับ "คืน"
PiKO Thu, 06/12/2012 - 01:21
มันก็ตรงๆ นะครับ
"คืน" กลับหาอะไรสักอย่าง ส่วนใหญ่ก็ฟังก์ชั่น คืนค่า ที่มันทำหน้าที่ของมันให้กับคนที่เรียก
ตัวอย่างที่น่าจะเจอกันมาทุกคน
เวลาเรียกใช้
ป.ล. โค้ดข้างบนนี่ ไม่ได้อ้างอิงกับภาษาอะไรนะครับ ตัวอย่างเฉยๆ
+1 เยี่ยมเลยครับ
OammieR Thu, 06/12/2012 - 16:24
In reply to มันก็ตรงๆ นะครับ "คืน" by PiKO
+1 เยี่ยมเลยครับ
น่าจะหมายถึง return ของ
Frioniel Thu, 06/12/2012 - 03:32
น่าจะหมายถึง return ของ function น่ะแหละครับ
มีเอาไว้เพื่อส่งค่ากลับ หากต้องการส่งค่า ซึ่งมันไม่จำเป็นต้องมีก็ได้
เช่นเราเขียนฟังก์ชั่นย่อยเพื่อคำนวณผลลัพธ์ของ 3x5 โดยเอา 3+3+3+3+3 ไปเขียนเป็นฟังก์ชั่นย่อย มันก็จะทำได้สองแบบ คือเขียนแบบ return หรือไม่ return
ถ้าเขียนแบบไม่ return ก็สั่งให้มันทำ 3+3+3+3+3 แล้วแสดงผลลัพธ์ออกทางหน้าจอเลย แล้วกลับไปทำโปรแกรมหลักต่อ
ถ้าเขียนแบบ return ก็ต้องประกาศตัวแปรก่อน (เจ้าของกระทู้คงเข้าใจคำว่าประกาศตัวแปรนะครับ) แล้วเซตค่าตัวแปรที่พึ่งประกาศมาให้เท่ากับฟังก์ชั่น 3x5 ผลลัพธ์ก็คือ โปรแกรมจะเรียกใช้งาน 3x5 เหมือนข้างบน แต่หลังจากที่มันคำนวณ 3+3+3+3+3 เสร็จ มันจะเก็บค่านั้นผลลัพธ์ไว้ในตัวแปรที่เราประกาศ ตัวแปรนั้นจะมีค่าเท่ากับ 15 ครับ นี่แหละคือการ return แล้วค่อยเอาตัวแปรนั้นไปแสดงผลลัพธ์อีกที หรือจะเก็บไว้คำนวณอย่างอื่นต่อได้
int max(int a, int b) { int
Benzines Thu, 06/12/2012 - 11:27
In reply to น่าจะหมายถึง return ของ by Frioniel
int max(int a, int b) { int maxval; if (a > b) { maxval = a; } else { maxval = b; } return maxval; }
จากตัวอย่าง นะครับ
ก็คือ มันจะ return ผลลัพธ์จากการที่นำ a > b มาเก็บไว้ที่ return maxval;
ซึ่งก็คือ เราสามารถนำ maxval ไปใช้ต่อได้ โดยที่ค่า maxval จะเท่ากับ a หรือ b หลังจากที่มันคำนวณแล้ว
ผมเข้าใจถูกต้องมั้ยครับ
การเขียนในรูปแบบแรก
neizod Fri, 07/12/2012 - 04:19
In reply to น่าจะหมายถึง return ของ by Frioniel
การเขียนในรูปแบบแรก (รับค่าเข้าไปแล้วพิมพ์ค่าคืน) อันนี้ไม่แนะนำครับ เพราะตอนที่พัฒนาโปรแกรมจนซับซ้อนแล้วจะงงว่า output ที่เห็นนี้มาจากส่วนไหนของโปรแกรม
เอาภาษาพูดนะ Case แรก แบบมี
way_cs16 Thu, 06/12/2012 - 12:00
เอาภาษาพูดนะ
Case แรก แบบมี return กรณีนี้สมมติว่าระบุว่าตอบกลับเป็นคำพูด Return Type เป็นคำพูด อาจจะเป็น String อะไรสักอย่าง
A: "เธอๆ เธอรักฉันไหม"
B: "รักมั้ง"
Case สอง แบบไม่มี return กรณีนี้บอกให้ไปทำอะไรสักอย่าง โดยไม่รอผลลัพธ์ ไม่รอการตอบกลับ ไม่รอ return
A: "เธอกลับบ้านไป"
B: (B ก็เดินกลับบ้านไปเงียบ A ไม่ได้รอดูว่าจะได้เห็น หรือรู้ว่า B กลับบ้านจริงหรือเปล่า)
Case สาม แบบมี return กรณีนี้ระบุว่าผลลัพธ์เป็นการกระทำอะไรสักอย่าง
A: "เธอรักฉันไหม"
B: (กอดแน่นๆ แล้วก็จุ๊บทีนึง)
procedure ไม่มี return
neonicus Thu, 06/12/2012 - 12:28
procedure ไม่มี return เพราะเป็นแบบว่า "แกไปทำตามนี้หน่อย"
function มี return เพราะเป็นแบบว่า "แกไปทำตามนี้แล้วมาตอบด้วยนะว่าผลมันเป็นยังไง"
ตัวอย่าง procedure แบบเขียนเองเช่น "remove_object(object_name)" ซึ่งไม่ตอบอะไรมาเลย
แต่ function แบบเขียนเองเช่น "remove_object(object_name)" ซึ่งตอบมาด้วยว่า success หรือ fail
ผมชอบเขียน function มากกว่า
เพราะถึงแม้อยากจะสั่งเฉยๆ เราก็รับ return มาเฉยๆแล้วไม่ต้องสนใจก็ได้
ถ้าบอกแบบนี้ล่ะครับ การเรียก
obnetarena Thu, 06/12/2012 - 13:19
ถ้าบอกแบบนี้ล่ะครับ
การเรียก function เหมือนกับการให้คนทำงานชิ้นนึงให้เรา
พอทำงานเสร็จ คนนั้นก็จะให้ "อะไรบางอย่าง" กลับมาให้เรา
การทำงานก็คือ โค้ดที่เขียนใน function สุดท้ายแล้ว ถ้ามีคำว่า return ก็คือ function นี้จะให้อะไรกับเรา
ยังมีประเภทของค่าที่ จะต้อง return อีกอันนั้นไว้ทีหลังละกันครับ
return คือจุดสิ้นสุดของ
Diaboros_Sorobaid Thu, 06/12/2012 - 13:24
return คือจุดสิ้นสุดของ function / method ครับ.
หลายๆครั้งที่เราเห็น return หลายๆจุดใน function เดียวกันก็ยังได้ และเมื่อสิ้นสุดการทำงานใน function, มันจะต้อง return ค่าด้วยถ้า function นั้นประกาศไว้ว่าจะ return คำตอบ.
จริงๆแล้วโปรแกรมมันก็คือ function ที่เราติดปากเรียกว่า main นะแหละครับ. มันเป็นการตกลงระหว่างคนที่ทำ OS ให้ใช้กับคนที่ทำโปรแกรมไปรันบน OS ประมาณว่าถ้าจะมารันโปรแกรมบน OS ฉัน, นายก็เตรีม function ที่ชื่อ main ไว้นะเด๋วฉันจะไปเรียกเอง. ส่วนค่า return ในระดับ main function จะเป็นค่า error ไว้ให้ OS หรือคนเรียกใช้เช็คว่าเกิดข้อผิดพลาดอะไรมั๊ย ต่างกับ function ที่ลึกเข้าไปในโปรแกรม ที่ return ผลจากการทำงานจริงๆ.
ถ้ายังจำใด้ return
put4558350 Thu, 06/12/2012 - 13:44
ถ้ายังจำใด้ return มาจากฟังชั้นแบบคณิตศาสตร์ครัข
ตัวอย่าง
แต่เวลาเขียนเป็นโปรแกรมมันสามารถทำอย่างอื่นใด้เยอะกว่า เลยต้องมีคำสั้ง return เพื่อบอกคอมพิวเตอร์ว่า คำตอบของฟังชั้นคืออะไร
เวลาเขียนบนคอม
จะออกมาเป็น
function f(x,y){
return x*y;
}
ถ้าไม่เลิกพูดถึงคณิตศาสตร์
PaPaSEK Thu, 06/12/2012 - 21:32
In reply to ถ้ายังจำใด้ return by put4558350
ถ้าไม่เลิกพูดถึงคณิตศาสตร์ ผมจะล้มโต๊ะแล้วนะ
(╯°□°)╯︵ ┻━┻
┬─┬ ノ(
inkirby Thu, 06/12/2012 - 22:15
In reply to ถ้าไม่เลิกพูดถึงคณิตศาสตร์ by PaPaSEK
┬─┬ ノ( ゜-゜ノ)
ยังดีที่รับทันนะครับ แหม่...
ทำไมต้องเครียดกับเลข ม. ต้น
put4558350 Thu, 06/12/2012 - 22:43
In reply to ถ้าไม่เลิกพูดถึงคณิตศาสตร์ by PaPaSEK
ทำไมต้องเครียดกับเลข ม. ต้น ด้วยหละครับ
เพราะผมตกทุกเทอมตั้งแต่ที่เคย
PaPaSEK Fri, 07/12/2012 - 12:53
In reply to ทำไมต้องเครียดกับเลข ม. ต้น by put4558350
เพราะผมตกทุกเทอมตั้งแต่ที่เคยเรียนมาไงครับ
อันนี้จริงๆ นะเนี่ย ขออีกรอบ (╯°□°)╯︵ ┻━┻
จริงๆ แล้วผมเกลียดอาจารย์คณิตฯ ครับ ผมไม่รู้ว่าโชคร้ายหรือโชคดีที่อยู่ห้องคิงตลอด แล้วคนสอนก็นึกว่าเราฉลาดไง ... แล้วก็แบบว่าเรือหางยาวติดเครื่องเจ็ท
ถ้ากล้องซูมกลับหลังไป จะเห็นผมยืนอ้าปากค้างแล้วบอกว่า "รอกูด้วยยยยย" แต่ไม่มีใครได้ยินเพราะมันไปกันหมดแล้ว
ผมก็ไม่ค่อยชอบนะ แต่พูดจริงๆ
war11ck Fri, 07/12/2012 - 15:19
In reply to ถ้าไม่เลิกพูดถึงคณิตศาสตร์ by PaPaSEK
ผมก็ไม่ค่อยชอบนะ แต่พูดจริงๆ โปรแกรมมิ่งกับคณิตศาสตร์แยกกันไม่ออกหรอกครับ ยิ่งพวกเกมนี่ยิ่งแล้วใหญ่เจอแต่แมทริก เผลอๆ ลากฟิสิกส์เข้ามาเกี่ยวด้วย แค่คิดก็ปวดหัวละครับ
ความจริงผมพบว่าผมไม่ได้เกลียด
PaPaSEK Fri, 07/12/2012 - 17:59
In reply to ผมก็ไม่ค่อยชอบนะ แต่พูดจริงๆ by war11ck
ความจริงผมพบว่าผมไม่ได้เกลียดคณิต ผมว่าเป็นวิชาที่สนุกมาก เพียงแต่ว่าผมเกลียดอาจารย์ที่สอน ผมเลยอคติโดยอัตโนมัติครับ
อาจเป็นเพราะผมไม่รู้ว่าจะเอามันมาใช้อะไรด้วยมั้ง sin, cos, tan ใครจะรู้ว่าผมจะเข้าใจจากการเรียนด้วยตัวเองในเวลาไม่ถึง 10 นาที ทั้งๆ ที่ตอนเรียน เรียนเป็นเทอมผมก็ไม่เข้าใจ
อาจเป็นเพราะโมเดลการสอนด้วยมั้ง
ที่ผมศึกษาเองเป็นเพราะผมจะทำปีกเครื่องบินบังคับ แล้วมันต้องหามุมยกของปีก
sin, cos, tan ช่วยให้เรื่องการทำมุมเป็นเรื่องง่ายขึ้นอย่างไม่น่าเชื่อ แถมยังเอาท.สามเหลี่ยมของปีทาโกรัสมาใช้ได้ด้วย
ตอนเรียนไม่มีใครสอนแบบมีตัวอย่างครับ สอนแค่ว่า CxC = AxA + BxB
บางภาษาก็เขียนแบบนั้นได้นะครั
neizod Fri, 07/12/2012 - 04:22
In reply to ถ้ายังจำใด้ return by put4558350
บางภาษาก็เขียนแบบนั้นได้นะครับ ;P
นึกถึง concept ของคำว่า
Go-Kung Thu, 06/12/2012 - 15:53
นึกถึง concept ของคำว่า function ก่อนครับ
ตามที่คุณ put4558350 บอกครับว่า function ในภาษาโปรแกรมมันมีที่มาจาก function ทางคณิตศาสตร์
f(x) = y ความหมายคือส่งค่า x เข้าไป "ทำอะไรสักอย่าง" แล้วจะได้ค่า y ออกมา
concept ของ function ก็คือการส่งตัวแปรเข้าไป "ทำอะไรสักอย่าง" เพื่อให้ได้ผลลัพธ์ออกมาเป็นตัวแปรใหม่ (ซึ่งจะมีค่าเหมือนหรือต่างกับค่าเดิมก็ได้)
การทำอะไรสักอย่าง คือการทำงานตามที่เขียนไว้ใน function
การส่งค่า คือการส่ง parameter เช่นส่งตัวแปร x1, x2, x3, ...
การได้ผลลัพธ์ออกมาเป็นค่าใหม่ คือการ return ครับ
ป.ล. บางการทำงานในเชิงของชีวิตจริงไม่ต้อง return ค่า เช่นการบันทึกข้อมูล (ถ้าจะไม่บอกว่าบันทึกสำเร็จหรือไม่สำเร็จ) แต่ในการเขียนโปรแกรมก็ยังต้อง return ค่าอยู่เหมือนเดิมครับ แต่จะ return ด้วยค่าค่าหนึ่งที่ภาษากำหนดไว้ว่า "แทนการบอกว่าไม่ต้องคืนค่าใดๆ" เช่น return void ครับ
อยากตอบด้วย
moindy Sun, 09/12/2012 - 17:07
อยากตอบด้วย เคยงงแบบนี้เหมือนกัน
เอางงี้นะ ให้เขียนโปรแกรม ทอดไข่เจียวนะ
โปรแกรมทอดไข่เจียว มีไข่สองฟอง มีถ้วยรอรับการตีไข่ มีกระทะตั้งไฟร้อนๆ มีจานรอรับไข่เจียว
ขั้นแรก ผมตอกไข่สองฟองใส่ถ้วยแล้วเอาช้อนตีๆคนๆไข่ให้เป็นน้ำเหลืองๆ
ขั้นสอง ผมเอาถ้วยที่มีน้ำไข่สีเหลืองๆ ไปใช้งานต่อ
ขั้นสาม ผมเทไข่เหลวๆจากถ้วยลงไปในกระทะน้ำมันเดือด
ขั้นสี่ ผมทอดไข่ในกระทะจนเป็นไข่เจียวสวยๆ
ขั้นห้า ผมเอาไข่เจียวใส่จานพร้อมเอาไปทาน
อะไรคือรีเทิน? ไข่สองฟอง(รับอินพุตจากคีบอร์ด) -> ผ่านกระบวนการตีๆ(ฟังก์ชันตีไข่) -> กลายเป็นไข่เหลวๆน้ำเหลืองๆ(ค่าที่ return ออกมา)->อยู่ในถ้วย(ตัวแปรที่เก็บค่าที่รีเทินออกมา แล้วจะเอาไปใช้งานต่อ)
น้ำไข่ที่เกิดจากการตีไข่สองฟอง(ตัวแปรเก็บค่าที่รีเทินมาเมื่อกี้) -> เทลงกระทะร้อนๆเพื่อทอด(ฟังก์ชันทอดไข่)->กลายเป็นไข่เจียว(ค่าที่กำลังจะรีเทินออกไป)->เทไข่เจียวลงจาน(จานเป็นตัวแปรมารับค่าที่รีเทินออกมาจากฟังก์ชันทอดไข่)->จะเอาไปทานหรืออะไรต่อก็แล้วแต่ท่านเทอญ
เข้าใจไหมครับ หรืองง
... เงียบ สงสัยจะไม่ช๊อต
return คือกริยา
moindy Sun, 09/12/2012 - 17:19
return คือกริยา เหมือนนักฟุตบอลส่งลูกบอลให้กัน การส่ง คือกริยา
"ค่าreturn" คือ นาม ในการส่งฟุตบอลระหว่างนักฟุตบอล มันก็คือลูกบอลที่ผ่านการเตะจากอีกคนหนึ่งสู่อีกคนหนึ่ง
"ตัวรับค่า return " คือ นาม เมื่อมีการส่งของ ก็ต้องมีผู้รับของ
ดังนั้น สรรพสิ่งไม่สูญหายจากโลก จ่ายเงินย่อมได้งานreturnกลับมา เทน้ำมันลงไฟร้อนๆย่อมได้ไฟที่ร้อนกว่าreturnกลับมา กินข้าวเยอะๆพรุ่งนี้เช้าย่อมได้อุจาระreturnกลับออกมา
หากนึกถึงคำว่า return ให้นึกว่าตัวคุณ คือฟังก์ชั่น กินข้าวเข้าไปก็คือป้อนข้อมูลเข้าไปในฟังก์ชั่น ตัวคุณก็ย่อยข้าวย่อยอาหาร สิ่งที่ได้จากการย่อยคืออุจาระนั่นคือค่าที่รีเทินออกมา แล้วเอาไปไหน? อาจจะมีฟังก์ชั่นต้นไม้มารอรับค่าอุจาระที่ก้นคุณส่งออกมาแล้วเอาไปทำงานต่อ ในฟังก์ชัน ต้นไม้
เขียนเรื่อยๆมาเรียงๆ โปรดอภัย