ข้อความที่ยกมาคือ:
"การใช้ค่าเริ่มต้นนั้นโดยทั่วไปถือว่าเป็นรูปแบบการเขียนโปรแกรมที่ไม่ดี"
Cynically: "โดยทั่วไปถือว่า" มักจะเป็นวิธีการบอกว่าผู้เขียนไม่ได้พยายามหาแหล่งที่เชื่อถือได้สำหรับคำสั่งที่นำเสนอ
ในกรณีนี้การยืนยันเป็นคำถามที่ชัดเจน หลักฐาน: ตัวอย่างจากคู่มือสไตล์ Java 5 ใน 5 ไม่ได้พูดอะไรเกี่ยวกับว่าคุณควรหรือควรพึ่งพาค่าเริ่มต้น:
(หมายเหตุวิธีการของฉันสำหรับการสุ่มตัวอย่างคือดูที่ 5 อันดับแรกของการค้นหาของ Google ที่แตกต่างกันสำหรับ "java style guide" จากนั้นฉันค้นหาแต่ละเอกสารเพื่อหา "ค่าเริ่มต้น" นี่ไม่ใช่การวิเคราะห์ที่ละเอียดถี่ถ้วน )
ตกลง. ดังนั้นมันช่วยให้อ่านง่ายของรหัส Java?
นี้เป็นที่ถกเถียงกัน
ในอีกด้านหนึ่งโปรแกรมเมอร์ Java มือใหม่ที่ไม่ได้เรียนรู้เกี่ยวกับการกำหนดค่าเริ่มต้นอาจทำให้งงงวยเกี่ยวกับที่มาของศูนย์หรือโมฆะ แต่หากพวกเขาต้องการค้นหาการกำหนดค่าเริ่มต้นอย่างชัดเจนและพบว่าไม่มีอยู่นั่นก็เพียงพอแล้วที่จะทำให้พวกเขาอ่านบทช่วยสอนหรือหนังสือเพื่อหาข้อมูลเกี่ยวกับการเริ่มต้นเริ่มต้น (คุณจะหวัง!)
ในทางตรงกันข้ามเราไม่คาดหวังว่าผู้เขียนโปรแกรม Java มือใหม่จะรักษาฐานการผลิต สำหรับโปรแกรมเมอร์ Java ที่มีประสบการณ์การกำหนดค่าเริ่มต้นซ้ำซ้อนจะไม่ปรับปรุงความสามารถในการอ่าน มันเป็นเสียง (ที่ดีที่สุด)
ในใจของฉันสิ่งเดียวที่ทำได้โดยการเริ่มต้นซ้ำซ้อนของเขตข้อมูลคือการส่งสัญญาณไปยังผู้อ่านในอนาคตของรหัสของคุณที่คุณคิดเกี่ยวกับค่าเริ่มต้น (ตามที่ @GhostCat แสดงไว้การกำหนดค่าเริ่มต้นจะไม่แสดงเจตนา)
แต่ในทางกลับกันถ้าฉันเป็นผู้อ่านฉันจะไม่เชื่อใจในความคิดของผู้เขียนรหัส ดังนั้นคุณค่าของ "สัญญาณ" นี้ก็เป็นที่น่าสงสัยเช่นกัน
แล้วความน่าเชื่อถือล่ะ
ในจาวาทำให้ไม่มีความแตกต่าง JLS ระบุว่าการกำหนดค่าเริ่มต้นจะเกิดขึ้นสำหรับฟิลด์ และในทางกลับกันสำหรับตัวแปรท้องถิ่นมันเป็นข้อผิดพลาดในการรวบรวมเพื่อพยายามใช้ตัวแปรที่ยังไม่ได้เริ่มต้นอย่างแน่นอน
ในระยะสั้นพฤติกรรมการใช้งานจริงของตัวแปรที่ไม่ได้เริ่มต้นอย่างชัดเจนสามารถคาดการณ์ได้ทั้งหมด
โดยความแตกต่างในภาษาเช่น C หรือ C ++ ที่ตัวแปรอาจไม่สามารถเริ่มต้นได้พฤติกรรมจะไม่ได้รับการกำหนดและสามารถนำไปสู่การล่มและความแตกต่างในพฤติกรรมบนแพลตฟอร์มที่แตกต่างกัน กรณีสำหรับตัวแปรการกำหนดค่าเริ่มต้นอย่างชัดเจนจะแข็งแกร่งกว่ามากที่นี่
แล้วประสิทธิภาพล่ะ
มันไม่ควรสร้างความแตกต่าง คอมไพเลอร์ JIT ควรจะสามารถเริ่มต้นซ้ำซ้อนและการเริ่มต้นเริ่มต้นเหมือนกัน
private int count = 0;
เป็นรหัสที่ไม่ทำอะไรเลยและรหัสที่ไม่ทำอะไรที่ยุ่งเหยิง มันก็เหมือนกับการนำเข้าชั้นเรียนจาก java.langextends Object
หรือประกาศที่มีระดับ