คำถามติดแท็ก return-type

9
ทำไม Java มีวิธีการ 'โมฆะ'?
Java / ทำไมต้องมีvoidวิธีการ? เอกสารอ้างอิง : วิธีการใด ๆ ที่ประกาศเป็นโมฆะจะไม่ส่งคืนค่า เท่าที่ผมสามารถคิดว่าการใช้งานของทุกคนจะได้รับการบริการที่ดีขึ้นโดยการกลับธงสถานะวัตถุที่ถูกเรียกหรือvoidnull สิ่งนี้จะทำให้การเรียกใช้คำสั่งที่กำหนดได้และจะช่วยให้รูปแบบการสร้างและวิธีการผูกมัด วิธีการที่ถูกเรียกใช้เฉพาะกับเอฟเฟกต์ของพวกเขามักจะส่งคืนบูลีนหรือSuccessประเภททั่วไปหรือส่งข้อยกเว้นเมื่อล้มเหลว

6
ทำไมฟังก์ชั่นมากมายที่ส่งกลับโครงสร้างใน C จริง ๆ แล้วส่งกลับพอยน์เตอร์ไปยังโครงสร้าง
ข้อดีของการส่งกลับตัวชี้ไปยังโครงสร้างต่างจากการส่งคืนโครงสร้างทั้งหมดในreturnคำสั่งของฟังก์ชันคืออะไร ฉันกำลังพูดถึงฟังก์ชั่นเช่นfopenและฟังก์ชั่นระดับต่ำอื่น ๆ แต่อาจมีฟังก์ชั่นระดับสูงกว่าที่กลับไปยังโครงสร้างพอยน์เตอร์เช่นกัน ฉันเชื่อว่านี่เป็นตัวเลือกการออกแบบมากกว่าคำถามการเขียนโปรแกรมและฉันอยากรู้เพิ่มเติมเกี่ยวกับข้อดีและข้อเสียของทั้งสองวิธี หนึ่งในเหตุผลที่ฉันคิดว่าจะเป็นประโยชน์ในการส่งกลับตัวชี้ไปยังโครงสร้างคือเพื่อให้สามารถบอกได้ง่ายขึ้นถ้าฟังก์ชันล้มเหลวโดยส่งคืนNULLตัวชี้ การคืนโครงสร้างที่เต็มไปด้วยความNULLยากลำบากฉันคิดว่าหรือมีประสิทธิภาพน้อยกว่า นี่เป็นเหตุผลที่ถูกต้องหรือไม่

9
วิธีตั้งชื่อเมธอดที่ทั้งสองทำงานและส่งคืนบูลีนเป็นสถานะได้อย่างไร?
หากมีวิธีการ bool DoStuff() { try { // doing stuff... return true; } catch (SomeSpecificException ex) { return false; } } มันควรจะถูกเรียกว่าค่อนข้างIsStuffDone()? ผู้ใช้ทั้งสองชื่ออาจตีความผิด: หากชื่อเป็นDoStuff()สาเหตุว่าทำไมจึงส่งคืนบูลีน หากชื่อIsStuffDone()ไม่ชัดเจนว่าวิธีการทำงานหรือตรวจสอบผลของมันเท่านั้น มีแบบแผนสำหรับกรณีนี้หรือไม่? หรือวิธีการอื่นเป็นวิธีนี้ถือว่ามีข้อบกพร่อง? ยกตัวอย่างเช่นในภาษาที่มีพารามิเตอร์ที่ส่งออกเช่น C # voidตัวแปรสถานะบูลีนอาจจะส่งผ่านไปยังวิธีการที่เป็นหนึ่งและประเภทผลตอบแทนของวิธีการที่จะเป็น แก้ไข: ในการจัดการข้อยกเว้นปัญหาเฉพาะของฉันไม่สามารถมอบหมายโดยตรงไปยังผู้โทรเพราะวิธีการเป็นส่วนหนึ่งของการใช้อินเตอร์เฟซ ดังนั้นผู้เรียกไม่สามารถเรียกเก็บเงินกับการจัดการกับข้อยกเว้นทั้งหมดของการใช้งานที่แตกต่างกัน ไม่คุ้นเคยกับข้อยกเว้นเหล่านั้น แต่โทรสามารถจัดการกับข้อยกเว้นที่กำหนดเองเช่นStuffHasNotBeenDoneForSomeReasonExceptionเป็นได้รับการแนะนำในคำตอบของ npinti และแสดงความคิดเห็น

7
ฉันควรตรวจสอบค่าส่งคืนของการเรียกใช้เมธอดแม้ว่าฉันจะรู้ว่าวิธีนั้นไม่สามารถส่งคืนอินพุตที่ไม่ดีได้หรือไม่?
ฉันสงสัยว่าฉันควรป้องกันค่าตอบแทนการโทรด้วยวิธีการโดยตรวจสอบว่าพวกเขาตอบสนองความคาดหวังของฉันแม้ว่าฉันรู้ว่าวิธีการที่ฉันโทรจะตอบสนองความคาดหวังดังกล่าว GIVEN User getUser(Int id) { User temp = new User(id); temp.setName("John"); return temp; } ฉันควรทำหรือไม่ void myMethod() { User user = getUser(1234); System.out.println(user.getName()); } หรือ void myMethod() { User user = getUser(1234); // Validating Preconditions.checkNotNull(user, "User can not be null."); Preconditions.checkNotNull(user.getName(), "User's name can not be null."); System.out.println(user.getName()); } …

9
ภาษาที่พิมพ์แบบคงที่รองรับประเภทจุดตัดสำหรับค่าที่ส่งคืนของฟังก์ชันหรือไม่
หมายเหตุเริ่มต้น: คำถามนี้ถูกปิดหลังจากการแก้ไขหลายครั้งเพราะฉันไม่มีคำศัพท์ที่เหมาะสมในการระบุสิ่งที่ฉันกำลังมองหาอย่างถูกต้อง Sam Tobin-Hochstadt จากนั้นโพสต์ความคิดเห็นซึ่งทำให้ฉันรู้ว่ามันคืออะไร: ภาษาการเขียนโปรแกรมที่สนับสนุนประเภทจุดตัดสำหรับค่าส่งคืนของฟังก์ชัน ตอนนี้คำถามได้ถูกเปิดอีกครั้งฉันตัดสินใจที่จะปรับปรุงโดยการเขียนใหม่อีกครั้ง (หวังว่า) จะแม่นยำยิ่งขึ้น ดังนั้นคำตอบและความคิดเห็นบางอย่างด้านล่างอาจไม่เหมาะสมอีกต่อไปเพราะอ้างถึงการแก้ไขก่อนหน้า (โปรดดูประวัติการแก้ไขคำถามในกรณีเช่นนี้) มีภาษาการเขียนโปรแกรมที่ได้รับความนิยมและคงที่หรือไม่ (เช่น Haskell, Java ทั่วไป, C #, F # และอื่น ๆ ) ที่รองรับประเภทจุดตัดสำหรับค่าส่งคืนฟังก์ชันหรือไม่ ถ้าเป็นเช่นนั้นจะทำอะไรและอย่างไร (ถ้าฉันซื่อสัตย์ฉันชอบที่จะเห็นใครบางคนสาธิตวิธีการแยกประเภทในภาษาหลักเช่น C # หรือ Java) ฉันจะให้ตัวอย่างรวดเร็วของประเภทจุดตัดที่อาจมีลักษณะโดยใช้บาง pseudocode คล้ายกับ C #: interface IX { … } interface IY { … } interface IB { … } …

4
การประกาศตัวแปรส่งคืนใน c # methods เทียบกับการคืนค่าโดยตรง
ในการถกเถียงเกี่ยวกับตัวแปรส่งคืนสมาชิกบางคนในทีมต้องการวิธีการส่งคืนผลลัพธ์โดยตรงไปยังผู้โทรในขณะที่คนอื่น ๆ ต้องการประกาศตัวแปรส่งคืนที่ส่งกลับไปยังผู้โทรแล้ว (ดูตัวอย่างโค้ดด้านล่าง) อาร์กิวเมนต์หลังคืออนุญาตให้นักพัฒนาที่ทำการดีบั๊กโค้ดเพื่อค้นหาค่าส่งคืนของเมธอดก่อนที่มันจะส่งกลับไปยังผู้เรียกดังนั้นจึงทำให้โค้ดเข้าใจง่ายขึ้น: นี่เป็นเรื่องจริงโดยเฉพาะอย่างยิ่งที่การเรียกใช้เมธอดนั้น มีแนวทางใดบ้างที่มีประสิทธิภาพมากที่สุดและ / หรือมีเหตุผลอื่นใดที่ทำให้เราควรนำสไตล์หนึ่งมาใช้กับสไตล์อื่น? ขอบคุณ private bool Is2(int a) { return a == 2; } private bool Is3(int a) { var result = a == 3; return result; }

4
เมื่อไรที่เมธอดของคลาสส่งคืนอินสแตนซ์เดียวกันหลังจากแก้ไขตัวเอง?
ฉันได้เรียนที่มีสามวิธีA(), และB() C()วิธีการเหล่านั้นแก้ไขอินสแตนซ์ของตัวเอง ในขณะที่วิธีการจะต้องส่งคืนอินสแตนซ์เมื่ออินสแตนซ์เป็นสำเนาแยกต่างหาก (เช่นเดียวกับClone()) ฉันมีตัวเลือกฟรีที่จะส่งคืนvoidหรืออินสแตนซ์เดียวกัน ( return this;) เมื่อทำการแก้ไขอินสแตนซ์เดียวกันในวิธีการและไม่คืนค่าอื่น ๆ obj.A().B().C();เมื่อตัดสินใจกลับมาเช่นการแก้ไขเดียวกันผมสามารถทำโซ่วิธีการเรียบร้อยเช่น นี่จะเป็นเหตุผลเดียวที่ทำเช่นนั้น? มันยังโอเคที่จะปรับเปลี่ยนอินสแตนซ์ของตัวเองและส่งคืนด้วยหรือไม่ หรือควรส่งคืนสำเนาและปล่อยให้วัตถุต้นฉบับเหมือนเดิมหรือไม่ เพราะเมื่อส่งคืนอินสแตนซ์ที่ถูกแก้ไขเดียวกันผู้ใช้อาจจะคิดว่าค่าที่ส่งคืนเป็นสำเนามิฉะนั้นจะไม่ถูกส่งคืน? หากไม่เป็นไรวิธีที่ดีที่สุดในการชี้แจงเรื่องดังกล่าวกับวิธีการคืออะไร
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.