คำถามติดแท็ก final

5
ใน Java ฉันควรใช้ "final" สำหรับพารามิเตอร์และ locals แม้ว่าฉันไม่จำเป็นต้อง?
Java อนุญาตให้ทำเครื่องหมายตัวแปร (ฟิลด์ / โลแคล / พารามิเตอร์) เป็นfinalเพื่อป้องกันการกำหนดใหม่ ฉันพบว่ามันมีประโยชน์มากกับฟิลด์เนื่องจากมันช่วยให้ฉันดูได้อย่างรวดเร็วว่าคุณลักษณะบางอย่างหรือทั้งคลาสนั้นมีจุดมุ่งหมายที่ไม่เปลี่ยนรูป ในทางกลับกันฉันพบว่ามันมีประโยชน์น้อยกว่ามากกับคนในท้องถิ่นและพารามิเตอร์และฉันมักจะหลีกเลี่ยงการทำเครื่องหมายว่าfinalแม้ว่าพวกเขาจะไม่ได้รับการมอบหมายซ้ำอีกครั้ง (ยกเว้นอย่างชัดเจนเมื่อพวกเขาต้องการใช้ในชั้นเรียน) . อย่างไรก็ตามเมื่อเร็ว ๆ นี้ฉันใช้รหัสที่ใช้ขั้นสุดท้ายเมื่อใดก็ตามที่ทำได้ซึ่งฉันเดาว่าจะให้ข้อมูลเพิ่มเติมในทางเทคนิค ไม่มั่นใจเกี่ยวกับรูปแบบการเขียนโปรแกรมของฉันอีกต่อไปฉันสงสัยว่าอะไรคือข้อดีและข้อเสียอื่น ๆ ของการใช้finalที่ใดก็ได้ลักษณะอุตสาหกรรมที่พบบ่อยที่สุดคืออะไรและเพราะเหตุใด
105 java  coding-style  final 

10
ทำไมคำหลัก 'สุดท้าย' จึงมีประโยชน์
ดูเหมือนว่า Java มีอำนาจในการประกาศคลาสที่ไม่สามารถสืบทอดได้สำหรับทุกวัยและตอนนี้ C ++ ก็มีเช่นกัน อย่างไรก็ตามในแง่ของหลักการ Open / Close ใน SOLID ทำไมมันถึงมีประโยชน์? สำหรับฉันfinalคำหลักฟังดูเหมือนfriend- ถูกกฎหมาย แต่ถ้าคุณใช้งานอยู่การออกแบบส่วนใหญ่อาจผิด โปรดให้ตัวอย่างที่คลาสที่ไม่สามารถสืบทอดได้จะเป็นส่วนหนึ่งของสถาปัตยกรรมที่ดีหรือรูปแบบการออกแบบ
54 java  c++  solid  final 

6
เหตุใดการใช้ 'ขั้นสุดท้าย' ในชั้นเรียนจึงไม่ดีจริงๆ
ฉันกำลังสร้างเว็บไซต์เดิมของ PHP OOP ฉันถูกล่อลวงให้เริ่มใช้ 'ขั้นสุดท้าย' ในชั้นเรียนถึง " make it explicit that the class is currently not extended by anything" สิ่งนี้อาจช่วยประหยัดเวลาได้มากถ้าฉันมาเรียนและฉันสงสัยว่าฉันสามารถเปลี่ยนชื่อ / ลบ / แก้ไขprotectedคุณสมบัติหรือวิธีการได้หรือไม่ ถ้าฉันจริงๆต้องการที่จะขยายชั้นเรียนฉันก็สามารถลบคำหลักสุดท้ายที่จะปลดล็อคสำหรับการขยาย คือถ้าฉันมาในชั้นเรียนที่ไม่มีชั้นเรียนเด็กฉันสามารถบันทึกความรู้นั้นโดยการทำเครื่องหมายชั้นเรียนเป็นที่สิ้นสุด ครั้งต่อไปที่ฉันเข้ามาฉันจะไม่ต้องค้นหา codebase อีกครั้งเพื่อดูว่ามีลูกหรือไม่ จึงช่วยประหยัดเวลาในระหว่างการรีแฟคเตอร์ ทุกอย่างดูเหมือนจะเป็นแนวคิดที่ช่วยประหยัดเวลาได้ แต่ .... ฉันมักจะอ่านว่าคลาสควรจะทำ 'ขั้นสุดท้าย' ในโอกาสที่หายาก / พิเศษเท่านั้น บางทีมันอาจทำให้เกิดการสร้างวัตถุจำลองหรือมีผลข้างเคียงอื่น ๆ ที่ฉันไม่ได้คิด ฉันพลาดอะไรไป

2
แบบแผนการตั้งชื่อ: ฟิลด์สุดท้าย (ไม่คงที่)
วันนี้ฉันได้พูดคุยกับเพื่อนร่วมงานเกี่ยวกับการตั้งชื่อfinalฟิลด์ในคลาส Java ในfinalฟิลด์โอปี้ของเขาควรได้รับการพิจารณาว่าเป็นค่าคงที่เนื่องจากค่าของมันจะไม่เปลี่ยนแปลงหลังจากการสร้างอินสแตนซ์ สิ่งนี้จะนำไปสู่หลักการตั้งชื่อต่อไปนี้สำหรับfinalฟิลด์: public class Foo { private static final String BLA_BLA = "bla"; private final String BAR_BATZ; ... } ในความเห็นของฉันstatic finalควรพิจารณาเฉพาะเขตข้อมูลในขณะที่เขตข้อมูลที่finalควรปฏิบัติตามหลักการตั้งชื่อ camelCase ตามปกติเท่านั้น public class Foo { private static final String BLA = "bla"; private final String barBatz; ... } ตอนนี้ฉันค่อนข้างไม่แน่ใจเพราะเขาเป็นโปรแกรมเมอร์ที่มีประสบการณ์มากกว่าฉันและฉันมักจะเห็นด้วยกับความคิดเห็นของเขาและถือว่าเขาเป็นนักพัฒนาที่ดีมาก ข้อมูลใด ๆ เกี่ยวกับเรื่องนี้?
23 java  naming  final 

5
ทำไมคำหลัก 'สุดท้าย' จึงมีการใช้งานเพียงเล็กน้อยในอุตสาหกรรมนี้ [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา เนื่องจากฉันค้นพบพลังของfinalคำสำคัญใน Java เมื่อไม่กี่ปีที่ผ่านมามันช่วยให้ฉันทำให้โค้ดของฉันอ่านง่ายขึ้นมากเนื่องจากผู้คนสามารถเห็นตัวแปรแบบอ่านอย่างเดียวได้อย่างง่ายดาย มันอาจช่วยเพิ่ม JIT เล็กน้อยและในขณะที่ จำกัด มากมันไม่เป็นอันตรายโดยเฉพาะเมื่อกำหนดเป้าหมายอุปกรณ์ฝังตัวเช่นแพลตฟอร์ม Android แต่ยิ่งกว่าทุกสิ่งมันมีส่วนทำให้การออกแบบมีความแข็งแกร่งยิ่งขึ้นต่อการเปลี่ยนแปลงและให้คำแนะนำแก่ผู้มอบหมายอื่น ๆ เมื่อพวกเขาต้องการแก้ไขฐานรหัส อย่างไรก็ตามในขณะที่กำลังดูซอร์สโค้ด JDK บางตัวฉันไม่เคยสะดุดกับคำค้นหานี้ทั้งคลาสเมธอดหรือตัวแปร เช่นเดียวกับระบบต่าง ๆ ที่ฉันต้องทบทวน มีเหตุผลหรือไม่? มันเป็นกระบวนทัศน์การออกแบบทั่วไปเพื่อให้ทุกอย่างไม่แน่นอนจากภายในหรือไม่
14 java  final 

3
ใน C ++ ฉันควรใช้ขั้นสุดท้ายในการประกาศวิธีเสมือนเมื่อใด
ฉันรู้ว่าfinalคำหลักที่ใช้ในการป้องกันวิธีเสมือนจากการถูกแทนที่โดยชั้นเรียนที่ได้รับ อย่างไรก็ตามฉันไม่พบตัวอย่างที่มีประโยชน์เมื่อฉันควรใช้finalคำหลักด้วยvirtualวิธีการจริงๆ ยิ่งไปกว่านั้นมันรู้สึกว่าการใช้งานfinalด้วยวิธีเสมือนเป็นกลิ่นที่ไม่ดีเนื่องจากมันไม่อนุญาตให้โปรแกรมเมอร์ขยายชั้นเรียนในอนาคต คำถามของฉันคือต่อไป: มีกรณีใดที่มีประโยชน์เมื่อฉันควรใช้finalในvirtualการประกาศวิธี?
11 c++  final 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.