Tags:
Forums: 

การเขียนโปรแกรม : ค่า return คืออะไร ต้องมีไว้ทำไม

ขอแบบคำตอบ ภาษาพูดนะครับ ไม่เอาภาษาทางการ เพราะว่าผมก็เคยลอง search google ดูแล้ว แต่ก็ยังไม่เข้าใจความหมาย และการทำงานของมันอยู่ดี

ถ้าจะไล่ให้ผมไปหา search ข้อมูลเอาเอง ผมก็คงไม่มาตั้งกระทู้ให้ทุกคนด่าผมหรอกครับ ^^

Get latest news from Blognone
By: nat3738
ContributorAndroidRed HatUbuntu
on 5 December 2012 - 23:03 #515183

return ของอะไรอ่ะ? ของฟังชั่น? ของโปรแกรม?

By: hisoft
ContributorWindows PhoneWindows
on 5 December 2012 - 23:06 #515186
hisoft's picture

เพื่อส่งค่ากลับให้ผู้เรียกครับ เช่น คำตอบของคำถาม ผลของการทำงาน (ได้/ไม่ได้)

By: PaPaSEK
ContributorAndroidWindowsIn Love
on 5 December 2012 - 23:14 #515188
PaPaSEK's picture

function คือชุดคำสั่งที่ถูกรวมไว้ใน block นึงๆ มีหน้าที่ใดหน้าที่หนึ่งเสมอครับ

function อาจมีการรับค่าจากภายนอกมาประมวณผล หรืออาจไม่มีก็ได้

เช่น function ชื่อ MIN รับค่าเป็นชุดของตัวเลข มีหน้าที่หาค่าที่น้อยที่สุดจากชุดของตัวเลขที่เราส่งให้มัน

ค่าน้อยที่สุดที่เราได้ หรือเรียกอีกอย่างว่าผลลัพท์ของ function MIN คือค่า return ครับ

function ใดๆ อาจจะมีการ return ค่า หรืออาจจะไม่มีก็ได้

ในภาษาระดับสูง ค่า return จะต้องระบุชนิดด้วย เช่น string, integer, float

หวังว่าคงเป็นภาษาพูดพอนะครับ กำลังเริ่มเขียนโปรแกรมหรือครับ?

By: Benzines on 6 December 2012 - 00:41 #515236 Reply to:515188

ใช่แล้วครับ ผมเพิ่งจะเริ่มเขียนโปรแกรมครับ ยัง งงๆ อยู่ในหลายๆเรื่อง

ขอบคุณสำหรับคำตอบนะครับ ^^

By: PaPaSEK
ContributorAndroidWindowsIn Love
on 6 December 2012 - 08:49 #515297 Reply to:515236
PaPaSEK's picture

ยินดีครับ

แต่ขอแนะนำหน่อยว่าควรจะหาหนังสือมาอ่านจริงจังสักหนึ่งเล่ม เพื่อให้เข้าใจแนวพื้นฐานต่างๆ ครับ มีหลายๆ เรื่องที่มันเป็นภาคทฤษฎีที่เราควรเรียนรู้เอาไว้ เช่น pointer, reference, array, collection, data structure อะไรพวกนี้

บางคนมองว่าเอาไปเรียนรู้ที่หลังก็ได้ แต่ผมมองว่าพวกนี้คือการฝึกแปรลูก ฝึกส่งบอล ฝึกเตะหลังเท้า ฯลฯ ที่พอเรามีพื้นฐานแน่นแล้วจะไปพลิกแพลงเป็นไซ้ก้อย ไซ้โป้งได้ไม่ยาก แถมส่งบอลแม่นขึ้นด้วยครับ

ผมเจอว่าน้องๆ ที่จบใหม่หลายคนถามเรื่อง array มันยังไม่เข้าใจกันเลย เรียนมา 4 ปีนี่ลอกโค้ดได้อย่างเดียว ... ให้แก้โค้ดหรือเขียนโค้ดใหม่ก็ทำไม่เป็น เพราะพื้นฐานไม่แน่นครับ

By: kowito
Android
on 6 December 2012 - 12:29 #515390 Reply to:515297

ผมเห็นด้วยครับ จริงแล้วควรเริ่มจากทำความเข้าใจ Concept พื้นฐานของ Com Sci ก่อน ไม่งั้นฝืนไปก็รังแต่จะตัน ลองอ่านนี่ดู เพื่อจะเข้าใจ Concept คร่าวก่อนครับ

การออกแบบและพัฒนาโปรแกรม

By: achidad
UbuntuWindows
on 5 December 2012 - 23:50 #515207

อืม ตอบตามความเข้าใจของผมก็แล้วกันครับ

ค่า return แบ่งเป็น 2 แบบคือ

  1. ค่า return ของ function

    เช่น function absolute($value) เป็น function ที่ทำให้ค่า $value กลายเป็นค่า สัมบรูณ์ ดังนั้น function absolute() จะต้อง return ค่าที่เป็นค่าสัมบรูณ์เพื่อเอาไปใช้ต่อ

  2. ค่า return ของโปรแกรม

    ตัวโปรแกรมทุกโปรแกรมจะ return ค่าเมื่อทำงานเสร็จสิ้น เช่น rasdial บน windows ถ้าทำการเชื่อมต่อไปยังปลายทางสำเร็จจะ return ค่า 0 ถ้าไม่สำเร็จจะ return ค่าอื่น เช่น 678 ค่าที่ return กลับมาจำทำให้เราทราบว่าเกิดความผิดพลาดเพราะอะไรครับ ลองอ่านเกี่ยวกับ ERRORLEVEL ของ windows ดูครับ

By: Benzines on 6 December 2012 - 00:43 #515238 Reply to:515207

ที่จริง คือ ผมไม่รู้ว่าค่า return คืออะไรเลยอ่ะครับ

ต้องขอบคุณนะครับ ที่มาช่วยตอบ ทำให้ผมรู้ว่านอกจากจะอยู่ใน function แล้ว ยังมีอยู่ใน program ด้วย

ขอบคุณนะครับ ^^

By: PiKO
ContributorAndroid
on 6 December 2012 - 01:21 #515245

มันก็ตรงๆ นะครับ

"คืน" กลับหาอะไรสักอย่าง ส่วนใหญ่ก็ฟังก์ชั่น คืนค่า ที่มันทำหน้าที่ของมันให้กับคนที่เรียก

ตัวอย่างที่น่าจะเจอกันมาทุกคน

function add(a,b){
  ans = a + b;

  return ans;
}

เวลาเรียกใช้

ret = add(1,2); // ret = 3

ป.ล. โค้ดข้างบนนี่ ไม่ได้อ้างอิงกับภาษาอะไรนะครับ ตัวอย่างเฉยๆ


:: DigiKin8 ::

By: OammieR
AndroidWindows
on 6 December 2012 - 16:24 #515466 Reply to:515245

+1 เยี่ยมเลยครับ

By: Frioniel
Windows PhoneWindows
on 6 December 2012 - 03:32 #515270
Frioniel's picture

น่าจะหมายถึง 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 แล้วค่อยเอาตัวแปรนั้นไปแสดงผลลัพธ์อีกที หรือจะเก็บไว้คำนวณอย่างอื่นต่อได้

By: Benzines on 6 December 2012 - 11:27 #515354 Reply to:515270

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 หลังจากที่มันคำนวณแล้ว

ผมเข้าใจถูกต้องมั้ยครับ

By: neizod
ContributorTraineeIn Love
on 7 December 2012 - 04:19 #515717 Reply to:515270
neizod's picture

การเขียนในรูปแบบแรก (รับค่าเข้าไปแล้วพิมพ์ค่าคืน) อันนี้ไม่แนะนำครับ เพราะตอนที่พัฒนาโปรแกรมจนซับซ้อนแล้วจะงงว่า output ที่เห็นนี้มาจากส่วนไหนของโปรแกรม

By: way_cs16
ContributorWindows PhoneAndroidBlackberry
on 6 December 2012 - 12:00 #515381
way_cs16's picture

เอาภาษาพูดนะ

Case แรก แบบมี return กรณีนี้สมมติว่าระบุว่าตอบกลับเป็นคำพูด Return Type เป็นคำพูด อาจจะเป็น String อะไรสักอย่าง

A: "เธอๆ เธอรักฉันไหม"

B: "รักมั้ง"

Case สอง แบบไม่มี return กรณีนี้บอกให้ไปทำอะไรสักอย่าง โดยไม่รอผลลัพธ์ ไม่รอการตอบกลับ ไม่รอ return

A: "เธอกลับบ้านไป"

B: (B ก็เดินกลับบ้านไปเงียบ A ไม่ได้รอดูว่าจะได้เห็น หรือรู้ว่า B กลับบ้านจริงหรือเปล่า)

Case สาม แบบมี return กรณีนี้ระบุว่าผลลัพธ์เป็นการกระทำอะไรสักอย่าง

A: "เธอรักฉันไหม"

B: (กอดแน่นๆ แล้วก็จุ๊บทีนึง)

By: neonicus
Android
on 6 December 2012 - 12:28 #515389

procedure ไม่มี return เพราะเป็นแบบว่า "แกไปทำตามนี้หน่อย"

function มี return เพราะเป็นแบบว่า "แกไปทำตามนี้แล้วมาตอบด้วยนะว่าผลมันเป็นยังไง"

ตัวอย่าง procedure แบบเขียนเองเช่น "remove_object(object_name)" ซึ่งไม่ตอบอะไรมาเลย

แต่ function แบบเขียนเองเช่น "remove_object(object_name)" ซึ่งตอบมาด้วยว่า success หรือ fail

ผมชอบเขียน function มากกว่า
เพราะถึงแม้อยากจะสั่งเฉยๆ เราก็รับ return มาเฉยๆแล้วไม่ต้องสนใจก็ได้

By: obnetarena
Windows PhoneWindows
on 6 December 2012 - 13:19 #515411

ถ้าบอกแบบนี้ล่ะครับ

การเรียก function เหมือนกับการให้คนทำงานชิ้นนึงให้เรา
พอทำงานเสร็จ คนนั้นก็จะให้ "อะไรบางอย่าง" กลับมาให้เรา

การทำงานก็คือ โค้ดที่เขียนใน function สุดท้ายแล้ว ถ้ามีคำว่า return ก็คือ function นี้จะให้อะไรกับเรา

ยังมีประเภทของค่าที่ จะต้อง return อีกอันนั้นไว้ทีหลังละกันครับ

By: Diaboros_Sorobaid
Windows PhoneAndroidWindows
on 6 December 2012 - 13:24 #515414
Diaboros_Sorobaid's picture

return คือจุดสิ้นสุดของ function / method ครับ.
หลายๆครั้งที่เราเห็น return หลายๆจุดใน function เดียวกันก็ยังได้ และเมื่อสิ้นสุดการทำงานใน function, มันจะต้อง return ค่าด้วยถ้า function นั้นประกาศไว้ว่าจะ return คำตอบ.

จริงๆแล้วโปรแกรมมันก็คือ function ที่เราติดปากเรียกว่า main นะแหละครับ. มันเป็นการตกลงระหว่างคนที่ทำ OS ให้ใช้กับคนที่ทำโปรแกรมไปรันบน OS ประมาณว่าถ้าจะมารันโปรแกรมบน OS ฉัน, นายก็เตรีม function ที่ชื่อ main ไว้นะเด๋วฉันจะไปเรียกเอง. ส่วนค่า return ในระดับ main function จะเป็นค่า error ไว้ให้ OS หรือคนเรียกใช้เช็คว่าเกิดข้อผิดพลาดอะไรมั๊ย ต่างกับ function ที่ลึกเข้าไปในโปรแกรม ที่ return ผลจากการทำงานจริงๆ.

By: put4558350
ContributorAndroidUbuntuWindows
on 6 December 2012 - 13:44 #515419
put4558350's picture

ถ้ายังจำใด้ return มาจากฟังชั้นแบบคณิตศาสตร์ครัข

ตัวอย่าง

  • ให้ f(x,y) = x * y
  • f(2,3) = 2 * 3 = 6

แต่เวลาเขียนเป็นโปรแกรมมันสามารถทำอย่างอื่นใด้เยอะกว่า เลยต้องมีคำสั้ง return เพื่อบอกคอมพิวเตอร์ว่า คำตอบของฟังชั้นคืออะไร

เวลาเขียนบนคอม

  • ให้ f(x,y) = x * y

จะออกมาเป็น

function f(x,y){

return x*y;

}


samsung ใหญ่แค่ใหน ?
https://youtu.be/6Afpey7Eldo

By: PaPaSEK
ContributorAndroidWindowsIn Love
on 6 December 2012 - 21:32 #515570 Reply to:515419
PaPaSEK's picture

ถ้าไม่เลิกพูดถึงคณิตศาสตร์ ผมจะล้มโต๊ะแล้วนะ

(╯°□°)╯︵ ┻━┻

By: inkirby
ContributoriPhoneAndroidIn Love
on 6 December 2012 - 22:15 #515582 Reply to:515570
inkirby's picture

┬─┬ ノ( ゜-゜ノ)

ยังดีที่รับทันนะครับ แหม่...


Dream high, work hard.

By: put4558350
ContributorAndroidUbuntuWindows
on 6 December 2012 - 22:43 #515588 Reply to:515570
put4558350's picture

ทำไมต้องเครียดกับเลข ม. ต้น ด้วยหละครับ


samsung ใหญ่แค่ใหน ?
https://youtu.be/6Afpey7Eldo

By: PaPaSEK
ContributorAndroidWindowsIn Love
on 7 December 2012 - 12:53 #515887 Reply to:515588
PaPaSEK's picture

เพราะผมตกทุกเทอมตั้งแต่ที่เคยเรียนมาไงครับ

อันนี้จริงๆ นะเนี่ย ขออีกรอบ (╯°□°)╯︵ ┻━┻

จริงๆ แล้วผมเกลียดอาจารย์คณิตฯ ครับ ผมไม่รู้ว่าโชคร้ายหรือโชคดีที่อยู่ห้องคิงตลอด แล้วคนสอนก็นึกว่าเราฉลาดไง ... แล้วก็แบบว่าเรือหางยาวติดเครื่องเจ็ท

ถ้ากล้องซูมกลับหลังไป จะเห็นผมยืนอ้าปากค้างแล้วบอกว่า "รอกูด้วยยยยย" แต่ไม่มีใครได้ยินเพราะมันไปกันหมดแล้ว

By: war11ck
AndroidSymbianUbuntuWindows
on 7 December 2012 - 15:19 #515970 Reply to:515570
war11ck's picture

ผมก็ไม่ค่อยชอบนะ แต่พูดจริงๆ โปรแกรมมิ่งกับคณิตศาสตร์แยกกันไม่ออกหรอกครับ ยิ่งพวกเกมนี่ยิ่งแล้วใหญ่เจอแต่แมทริก เผลอๆ ลากฟิสิกส์เข้ามาเกี่ยวด้วย แค่คิดก็ปวดหัวละครับ

By: PaPaSEK
ContributorAndroidWindowsIn Love
on 7 December 2012 - 17:59 #516053 Reply to:515970
PaPaSEK's picture

ความจริงผมพบว่าผมไม่ได้เกลียดคณิต ผมว่าเป็นวิชาที่สนุกมาก เพียงแต่ว่าผมเกลียดอาจารย์ที่สอน ผมเลยอคติโดยอัตโนมัติครับ

อาจเป็นเพราะผมไม่รู้ว่าจะเอามันมาใช้อะไรด้วยมั้ง sin, cos, tan ใครจะรู้ว่าผมจะเข้าใจจากการเรียนด้วยตัวเองในเวลาไม่ถึง 10 นาที ทั้งๆ ที่ตอนเรียน เรียนเป็นเทอมผมก็ไม่เข้าใจ

อาจเป็นเพราะโมเดลการสอนด้วยมั้ง

ที่ผมศึกษาเองเป็นเพราะผมจะทำปีกเครื่องบินบังคับ แล้วมันต้องหามุมยกของปีก

sin, cos, tan ช่วยให้เรื่องการทำมุมเป็นเรื่องง่ายขึ้นอย่างไม่น่าเชื่อ แถมยังเอาท.สามเหลี่ยมของปีทาโกรัสมาใช้ได้ด้วย

ตอนเรียนไม่มีใครสอนแบบมีตัวอย่างครับ สอนแค่ว่า CxC = AxA + BxB

By: neizod
ContributorTraineeIn Love
on 7 December 2012 - 04:22 #515718 Reply to:515419
neizod's picture

บางภาษาก็เขียนแบบนั้นได้นะครับ ;P

By: Go-Kung
iPhoneWindows PhoneAndroidBlackberry
on 6 December 2012 - 15:53 #515454

นึกถึง concept ของคำว่า function ก่อนครับ

ตามที่คุณ put4558350 บอกครับว่า function ในภาษาโปรแกรมมันมีที่มาจาก function ทางคณิตศาสตร์

f(x) = y ความหมายคือส่งค่า x เข้าไป "ทำอะไรสักอย่าง" แล้วจะได้ค่า y ออกมา

concept ของ function ก็คือการส่งตัวแปรเข้าไป "ทำอะไรสักอย่าง" เพื่อให้ได้ผลลัพธ์ออกมาเป็นตัวแปรใหม่ (ซึ่งจะมีค่าเหมือนหรือต่างกับค่าเดิมก็ได้)

การทำอะไรสักอย่าง คือการทำงานตามที่เขียนไว้ใน function

การส่งค่า คือการส่ง parameter เช่นส่งตัวแปร x1, x2, x3, ...

การได้ผลลัพธ์ออกมาเป็นค่าใหม่ คือการ return ครับ

ป.ล. บางการทำงานในเชิงของชีวิตจริงไม่ต้อง return ค่า เช่นการบันทึกข้อมูล (ถ้าจะไม่บอกว่าบันทึกสำเร็จหรือไม่สำเร็จ) แต่ในการเขียนโปรแกรมก็ยังต้อง return ค่าอยู่เหมือนเดิมครับ แต่จะ return ด้วยค่าค่าหนึ่งที่ภาษากำหนดไว้ว่า "แทนการบอกว่าไม่ต้องคืนค่าใดๆ" เช่น return void ครับ

By: moindy
Android
on 9 December 2012 - 17:07 #516654

อยากตอบด้วย เคยงงแบบนี้เหมือนกัน

เอางงี้นะ ให้เขียนโปรแกรม ทอดไข่เจียวนะ

โปรแกรมทอดไข่เจียว มีไข่สองฟอง มีถ้วยรอรับการตีไข่ มีกระทะตั้งไฟร้อนๆ มีจานรอรับไข่เจียว

ขั้นแรก ผมตอกไข่สองฟองใส่ถ้วยแล้วเอาช้อนตีๆคนๆไข่ให้เป็นน้ำเหลืองๆ

ขั้นสอง ผมเอาถ้วยที่มีน้ำไข่สีเหลืองๆ ไปใช้งานต่อ

ขั้นสาม ผมเทไข่เหลวๆจากถ้วยลงไปในกระทะน้ำมันเดือด

ขั้นสี่ ผมทอดไข่ในกระทะจนเป็นไข่เจียวสวยๆ

ขั้นห้า ผมเอาไข่เจียวใส่จานพร้อมเอาไปทาน

อะไรคือรีเทิน? ไข่สองฟอง(รับอินพุตจากคีบอร์ด) -> ผ่านกระบวนการตีๆ(ฟังก์ชันตีไข่) -> กลายเป็นไข่เหลวๆน้ำเหลืองๆ(ค่าที่ return ออกมา)->อยู่ในถ้วย(ตัวแปรที่เก็บค่าที่รีเทินออกมา แล้วจะเอาไปใช้งานต่อ)

น้ำไข่ที่เกิดจากการตีไข่สองฟอง(ตัวแปรเก็บค่าที่รีเทินมาเมื่อกี้) -> เทลงกระทะร้อนๆเพื่อทอด(ฟังก์ชันทอดไข่)->กลายเป็นไข่เจียว(ค่าที่กำลังจะรีเทินออกไป)->เทไข่เจียวลงจาน(จานเป็นตัวแปรมารับค่าที่รีเทินออกมาจากฟังก์ชันทอดไข่)->จะเอาไปทานหรืออะไรต่อก็แล้วแต่ท่านเทอญ

เข้าใจไหมครับ หรืองง

... เงียบ สงสัยจะไม่ช๊อต

By: moindy
Android
on 9 December 2012 - 17:19 #516664

return คือกริยา เหมือนนักฟุตบอลส่งลูกบอลให้กัน การส่ง คือกริยา

"ค่าreturn" คือ นาม ในการส่งฟุตบอลระหว่างนักฟุตบอล มันก็คือลูกบอลที่ผ่านการเตะจากอีกคนหนึ่งสู่อีกคนหนึ่ง

"ตัวรับค่า return " คือ นาม เมื่อมีการส่งของ ก็ต้องมีผู้รับของ

ดังนั้น สรรพสิ่งไม่สูญหายจากโลก จ่ายเงินย่อมได้งานreturnกลับมา เทน้ำมันลงไฟร้อนๆย่อมได้ไฟที่ร้อนกว่าreturnกลับมา กินข้าวเยอะๆพรุ่งนี้เช้าย่อมได้อุจาระreturnกลับออกมา

หากนึกถึงคำว่า return ให้นึกว่าตัวคุณ คือฟังก์ชั่น กินข้าวเข้าไปก็คือป้อนข้อมูลเข้าไปในฟังก์ชั่น ตัวคุณก็ย่อยข้าวย่อยอาหาร สิ่งที่ได้จากการย่อยคืออุจาระนั่นคือค่าที่รีเทินออกมา แล้วเอาไปไหน? อาจจะมีฟังก์ชั่นต้นไม้มารอรับค่าอุจาระที่ก้นคุณส่งออกมาแล้วเอาไปทำงานต่อ ในฟังก์ชัน ต้นไม้

เขียนเรื่อยๆมาเรียงๆ โปรดอภัย