การเขียนโปรแกรม : ค่า return คืออะไร ต้องมีไว้ทำไม
ขอแบบคำตอบ ภาษาพูดนะครับ ไม่เอาภาษาทางการ เพราะว่าผมก็เคยลอง search google ดูแล้ว แต่ก็ยังไม่เข้าใจความหมาย และการทำงานของมันอยู่ดี
ถ้าจะไล่ให้ผมไปหา search ข้อมูลเอาเอง ผมก็คงไม่มาตั้งกระทู้ให้ทุกคนด่าผมหรอกครับ ^^
return ของอะไรอ่ะ? ของฟังชั่น? ของโปรแกรม?
เพื่อส่งค่ากลับให้ผู้เรียกครับ เช่น คำตอบของคำถาม ผลของการทำงาน (ได้/ไม่ได้)
function คือชุดคำสั่งที่ถูกรวมไว้ใน block นึงๆ มีหน้าที่ใดหน้าที่หนึ่งเสมอครับ
function อาจมีการรับค่าจากภายนอกมาประมวณผล หรืออาจไม่มีก็ได้
เช่น function ชื่อ MIN รับค่าเป็นชุดของตัวเลข มีหน้าที่หาค่าที่น้อยที่สุดจากชุดของตัวเลขที่เราส่งให้มัน
ค่าน้อยที่สุดที่เราได้ หรือเรียกอีกอย่างว่าผลลัพท์ของ function MIN คือค่า return ครับ
function ใดๆ อาจจะมีการ return ค่า หรืออาจจะไม่มีก็ได้
ในภาษาระดับสูง ค่า return จะต้องระบุชนิดด้วย เช่น string, integer, float
หวังว่าคงเป็นภาษาพูดพอนะครับ กำลังเริ่มเขียนโปรแกรมหรือครับ?
ใช่แล้วครับ ผมเพิ่งจะเริ่มเขียนโปรแกรมครับ ยัง งงๆ อยู่ในหลายๆเรื่อง
ขอบคุณสำหรับคำตอบนะครับ ^^
ยินดีครับ
แต่ขอแนะนำหน่อยว่าควรจะหาหนังสือมาอ่านจริงจังสักหนึ่งเล่ม เพื่อให้เข้าใจแนวพื้นฐานต่างๆ ครับ มีหลายๆ เรื่องที่มันเป็นภาคทฤษฎีที่เราควรเรียนรู้เอาไว้ เช่น pointer, reference, array, collection, data structure อะไรพวกนี้
บางคนมองว่าเอาไปเรียนรู้ที่หลังก็ได้ แต่ผมมองว่าพวกนี้คือการฝึกแปรลูก ฝึกส่งบอล ฝึกเตะหลังเท้า ฯลฯ ที่พอเรามีพื้นฐานแน่นแล้วจะไปพลิกแพลงเป็นไซ้ก้อย ไซ้โป้งได้ไม่ยาก แถมส่งบอลแม่นขึ้นด้วยครับ
ผมเจอว่าน้องๆ ที่จบใหม่หลายคนถามเรื่อง array มันยังไม่เข้าใจกันเลย เรียนมา 4 ปีนี่ลอกโค้ดได้อย่างเดียว ... ให้แก้โค้ดหรือเขียนโค้ดใหม่ก็ทำไม่เป็น เพราะพื้นฐานไม่แน่นครับ
ผมเห็นด้วยครับ จริงแล้วควรเริ่มจากทำความเข้าใจ Concept พื้นฐานของ Com Sci ก่อน ไม่งั้นฝืนไปก็รังแต่จะตัน ลองอ่านนี่ดู เพื่อจะเข้าใจ Concept คร่าวก่อนครับ
การออกแบบและพัฒนาโปรแกรม
อืม ตอบตามความเข้าใจของผมก็แล้วกันครับ
ค่า return แบ่งเป็น 2 แบบคือ
ค่า return ของ function
เช่น function absolute($value) เป็น function ที่ทำให้ค่า $value กลายเป็นค่า สัมบรูณ์ ดังนั้น function absolute() จะต้อง return ค่าที่เป็นค่าสัมบรูณ์เพื่อเอาไปใช้ต่อ
ค่า return ของโปรแกรม
ตัวโปรแกรมทุกโปรแกรมจะ return ค่าเมื่อทำงานเสร็จสิ้น เช่น rasdial บน windows ถ้าทำการเชื่อมต่อไปยังปลายทางสำเร็จจะ return ค่า 0 ถ้าไม่สำเร็จจะ return ค่าอื่น เช่น 678 ค่าที่ return กลับมาจำทำให้เราทราบว่าเกิดความผิดพลาดเพราะอะไรครับ ลองอ่านเกี่ยวกับ ERRORLEVEL ของ windows ดูครับ
ที่จริง คือ ผมไม่รู้ว่าค่า return คืออะไรเลยอ่ะครับ
ต้องขอบคุณนะครับ ที่มาช่วยตอบ ทำให้ผมรู้ว่านอกจากจะอยู่ใน function แล้ว ยังมีอยู่ใน program ด้วย
ขอบคุณนะครับ ^^
มันก็ตรงๆ นะครับ
"คืน" กลับหาอะไรสักอย่าง ส่วนใหญ่ก็ฟังก์ชั่น คืนค่า ที่มันทำหน้าที่ของมันให้กับคนที่เรียก
ตัวอย่างที่น่าจะเจอกันมาทุกคน
เวลาเรียกใช้
ป.ล. โค้ดข้างบนนี่ ไม่ได้อ้างอิงกับภาษาอะไรนะครับ ตัวอย่างเฉยๆ
:: DigiKin8 ::
+1 เยี่ยมเลยครับ
น่าจะหมายถึง 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 maxval; if (a > b) { maxval = a; } else { maxval = b; } return maxval; }
จากตัวอย่าง นะครับ
ก็คือ มันจะ return ผลลัพธ์จากการที่นำ a > b มาเก็บไว้ที่ return maxval;
ซึ่งก็คือ เราสามารถนำ maxval ไปใช้ต่อได้ โดยที่ค่า maxval จะเท่ากับ a หรือ b หลังจากที่มันคำนวณแล้ว
ผมเข้าใจถูกต้องมั้ยครับ
การเขียนในรูปแบบแรก (รับค่าเข้าไปแล้วพิมพ์ค่าคืน) อันนี้ไม่แนะนำครับ เพราะตอนที่พัฒนาโปรแกรมจนซับซ้อนแล้วจะงงว่า output ที่เห็นนี้มาจากส่วนไหนของโปรแกรม
เอาภาษาพูดนะ
Case แรก แบบมี return กรณีนี้สมมติว่าระบุว่าตอบกลับเป็นคำพูด Return Type เป็นคำพูด อาจจะเป็น String อะไรสักอย่าง
A: "เธอๆ เธอรักฉันไหม"
B: "รักมั้ง"
Case สอง แบบไม่มี return กรณีนี้บอกให้ไปทำอะไรสักอย่าง โดยไม่รอผลลัพธ์ ไม่รอการตอบกลับ ไม่รอ return
A: "เธอกลับบ้านไป"
B: (B ก็เดินกลับบ้านไปเงียบ A ไม่ได้รอดูว่าจะได้เห็น หรือรู้ว่า B กลับบ้านจริงหรือเปล่า)
Case สาม แบบมี return กรณีนี้ระบุว่าผลลัพธ์เป็นการกระทำอะไรสักอย่าง
A: "เธอรักฉันไหม"
B: (กอดแน่นๆ แล้วก็จุ๊บทีนึง)
procedure ไม่มี return เพราะเป็นแบบว่า "แกไปทำตามนี้หน่อย"
function มี return เพราะเป็นแบบว่า "แกไปทำตามนี้แล้วมาตอบด้วยนะว่าผลมันเป็นยังไง"
ตัวอย่าง procedure แบบเขียนเองเช่น "remove_object(object_name)" ซึ่งไม่ตอบอะไรมาเลย
แต่ function แบบเขียนเองเช่น "remove_object(object_name)" ซึ่งตอบมาด้วยว่า success หรือ fail
ผมชอบเขียน function มากกว่า
เพราะถึงแม้อยากจะสั่งเฉยๆ เราก็รับ return มาเฉยๆแล้วไม่ต้องสนใจก็ได้
ถ้าบอกแบบนี้ล่ะครับ
การเรียก function เหมือนกับการให้คนทำงานชิ้นนึงให้เรา
พอทำงานเสร็จ คนนั้นก็จะให้ "อะไรบางอย่าง" กลับมาให้เรา
การทำงานก็คือ โค้ดที่เขียนใน function สุดท้ายแล้ว ถ้ามีคำว่า return ก็คือ function นี้จะให้อะไรกับเรา
ยังมีประเภทของค่าที่ จะต้อง return อีกอันนั้นไว้ทีหลังละกันครับ
return คือจุดสิ้นสุดของ function / method ครับ.
หลายๆครั้งที่เราเห็น return หลายๆจุดใน function เดียวกันก็ยังได้ และเมื่อสิ้นสุดการทำงานใน function, มันจะต้อง return ค่าด้วยถ้า function นั้นประกาศไว้ว่าจะ return คำตอบ.
จริงๆแล้วโปรแกรมมันก็คือ function ที่เราติดปากเรียกว่า main นะแหละครับ. มันเป็นการตกลงระหว่างคนที่ทำ OS ให้ใช้กับคนที่ทำโปรแกรมไปรันบน OS ประมาณว่าถ้าจะมารันโปรแกรมบน OS ฉัน, นายก็เตรีม function ที่ชื่อ main ไว้นะเด๋วฉันจะไปเรียกเอง. ส่วนค่า return ในระดับ main function จะเป็นค่า error ไว้ให้ OS หรือคนเรียกใช้เช็คว่าเกิดข้อผิดพลาดอะไรมั๊ย ต่างกับ function ที่ลึกเข้าไปในโปรแกรม ที่ return ผลจากการทำงานจริงๆ.
ถ้ายังจำใด้ return มาจากฟังชั้นแบบคณิตศาสตร์ครัข
ตัวอย่าง
แต่เวลาเขียนเป็นโปรแกรมมันสามารถทำอย่างอื่นใด้เยอะกว่า เลยต้องมีคำสั้ง return เพื่อบอกคอมพิวเตอร์ว่า คำตอบของฟังชั้นคืออะไร
เวลาเขียนบนคอม
จะออกมาเป็น
function f(x,y){
return x*y;
}
samsung ใหญ่แค่ใหน ?
https://youtu.be/6Afpey7Eldo
ถ้าไม่เลิกพูดถึงคณิตศาสตร์ ผมจะล้มโต๊ะแล้วนะ
(╯°□°)╯︵ ┻━┻
┬─┬ ノ( ゜-゜ノ)
ยังดีที่รับทันนะครับ แหม่...
Dream high, work hard.
ทำไมต้องเครียดกับเลข ม. ต้น ด้วยหละครับ
samsung ใหญ่แค่ใหน ?
https://youtu.be/6Afpey7Eldo
เพราะผมตกทุกเทอมตั้งแต่ที่เคยเรียนมาไงครับ
อันนี้จริงๆ นะเนี่ย ขออีกรอบ (╯°□°)╯︵ ┻━┻
จริงๆ แล้วผมเกลียดอาจารย์คณิตฯ ครับ ผมไม่รู้ว่าโชคร้ายหรือโชคดีที่อยู่ห้องคิงตลอด แล้วคนสอนก็นึกว่าเราฉลาดไง ... แล้วก็แบบว่าเรือหางยาวติดเครื่องเจ็ท
ถ้ากล้องซูมกลับหลังไป จะเห็นผมยืนอ้าปากค้างแล้วบอกว่า "รอกูด้วยยยยย" แต่ไม่มีใครได้ยินเพราะมันไปกันหมดแล้ว
ผมก็ไม่ค่อยชอบนะ แต่พูดจริงๆ โปรแกรมมิ่งกับคณิตศาสตร์แยกกันไม่ออกหรอกครับ ยิ่งพวกเกมนี่ยิ่งแล้วใหญ่เจอแต่แมทริก เผลอๆ ลากฟิสิกส์เข้ามาเกี่ยวด้วย แค่คิดก็ปวดหัวละครับ
ความจริงผมพบว่าผมไม่ได้เกลียดคณิต ผมว่าเป็นวิชาที่สนุกมาก เพียงแต่ว่าผมเกลียดอาจารย์ที่สอน ผมเลยอคติโดยอัตโนมัติครับ
อาจเป็นเพราะผมไม่รู้ว่าจะเอามันมาใช้อะไรด้วยมั้ง sin, cos, tan ใครจะรู้ว่าผมจะเข้าใจจากการเรียนด้วยตัวเองในเวลาไม่ถึง 10 นาที ทั้งๆ ที่ตอนเรียน เรียนเป็นเทอมผมก็ไม่เข้าใจ
อาจเป็นเพราะโมเดลการสอนด้วยมั้ง
ที่ผมศึกษาเองเป็นเพราะผมจะทำปีกเครื่องบินบังคับ แล้วมันต้องหามุมยกของปีก
sin, cos, tan ช่วยให้เรื่องการทำมุมเป็นเรื่องง่ายขึ้นอย่างไม่น่าเชื่อ แถมยังเอาท.สามเหลี่ยมของปีทาโกรัสมาใช้ได้ด้วย
ตอนเรียนไม่มีใครสอนแบบมีตัวอย่างครับ สอนแค่ว่า CxC = AxA + BxB
บางภาษาก็เขียนแบบนั้นได้นะครับ ;P
นึกถึง concept ของคำว่า function ก่อนครับ
ตามที่คุณ put4558350 บอกครับว่า function ในภาษาโปรแกรมมันมีที่มาจาก function ทางคณิตศาสตร์
f(x) = y ความหมายคือส่งค่า x เข้าไป "ทำอะไรสักอย่าง" แล้วจะได้ค่า y ออกมา
concept ของ function ก็คือการส่งตัวแปรเข้าไป "ทำอะไรสักอย่าง" เพื่อให้ได้ผลลัพธ์ออกมาเป็นตัวแปรใหม่ (ซึ่งจะมีค่าเหมือนหรือต่างกับค่าเดิมก็ได้)
การทำอะไรสักอย่าง คือการทำงานตามที่เขียนไว้ใน function
การส่งค่า คือการส่ง parameter เช่นส่งตัวแปร x1, x2, x3, ...
การได้ผลลัพธ์ออกมาเป็นค่าใหม่ คือการ return ครับ
ป.ล. บางการทำงานในเชิงของชีวิตจริงไม่ต้อง return ค่า เช่นการบันทึกข้อมูล (ถ้าจะไม่บอกว่าบันทึกสำเร็จหรือไม่สำเร็จ) แต่ในการเขียนโปรแกรมก็ยังต้อง return ค่าอยู่เหมือนเดิมครับ แต่จะ return ด้วยค่าค่าหนึ่งที่ภาษากำหนดไว้ว่า "แทนการบอกว่าไม่ต้องคืนค่าใดๆ" เช่น return void ครับ
อยากตอบด้วย เคยงงแบบนี้เหมือนกัน
เอางงี้นะ ให้เขียนโปรแกรม ทอดไข่เจียวนะ
โปรแกรมทอดไข่เจียว มีไข่สองฟอง มีถ้วยรอรับการตีไข่ มีกระทะตั้งไฟร้อนๆ มีจานรอรับไข่เจียว
ขั้นแรก ผมตอกไข่สองฟองใส่ถ้วยแล้วเอาช้อนตีๆคนๆไข่ให้เป็นน้ำเหลืองๆ
ขั้นสอง ผมเอาถ้วยที่มีน้ำไข่สีเหลืองๆ ไปใช้งานต่อ
ขั้นสาม ผมเทไข่เหลวๆจากถ้วยลงไปในกระทะน้ำมันเดือด
ขั้นสี่ ผมทอดไข่ในกระทะจนเป็นไข่เจียวสวยๆ
ขั้นห้า ผมเอาไข่เจียวใส่จานพร้อมเอาไปทาน
อะไรคือรีเทิน? ไข่สองฟอง(รับอินพุตจากคีบอร์ด) -> ผ่านกระบวนการตีๆ(ฟังก์ชันตีไข่) -> กลายเป็นไข่เหลวๆน้ำเหลืองๆ(ค่าที่ return ออกมา)->อยู่ในถ้วย(ตัวแปรที่เก็บค่าที่รีเทินออกมา แล้วจะเอาไปใช้งานต่อ)
น้ำไข่ที่เกิดจากการตีไข่สองฟอง(ตัวแปรเก็บค่าที่รีเทินมาเมื่อกี้) -> เทลงกระทะร้อนๆเพื่อทอด(ฟังก์ชันทอดไข่)->กลายเป็นไข่เจียว(ค่าที่กำลังจะรีเทินออกไป)->เทไข่เจียวลงจาน(จานเป็นตัวแปรมารับค่าที่รีเทินออกมาจากฟังก์ชันทอดไข่)->จะเอาไปทานหรืออะไรต่อก็แล้วแต่ท่านเทอญ
เข้าใจไหมครับ หรืองง
... เงียบ สงสัยจะไม่ช๊อต
return คือกริยา เหมือนนักฟุตบอลส่งลูกบอลให้กัน การส่ง คือกริยา
"ค่าreturn" คือ นาม ในการส่งฟุตบอลระหว่างนักฟุตบอล มันก็คือลูกบอลที่ผ่านการเตะจากอีกคนหนึ่งสู่อีกคนหนึ่ง
"ตัวรับค่า return " คือ นาม เมื่อมีการส่งของ ก็ต้องมีผู้รับของ
ดังนั้น สรรพสิ่งไม่สูญหายจากโลก จ่ายเงินย่อมได้งานreturnกลับมา เทน้ำมันลงไฟร้อนๆย่อมได้ไฟที่ร้อนกว่าreturnกลับมา กินข้าวเยอะๆพรุ่งนี้เช้าย่อมได้อุจาระreturnกลับออกมา
หากนึกถึงคำว่า return ให้นึกว่าตัวคุณ คือฟังก์ชั่น กินข้าวเข้าไปก็คือป้อนข้อมูลเข้าไปในฟังก์ชั่น ตัวคุณก็ย่อยข้าวย่อยอาหาร สิ่งที่ได้จากการย่อยคืออุจาระนั่นคือค่าที่รีเทินออกมา แล้วเอาไปไหน? อาจจะมีฟังก์ชั่นต้นไม้มารอรับค่าอุจาระที่ก้นคุณส่งออกมาแล้วเอาไปทำงานต่อ ในฟังก์ชัน ต้นไม้
เขียนเรื่อยๆมาเรียงๆ โปรดอภัย