อย่างที่คนอื่นพูดมันขึ้นอยู่กับภาษา แต่ฉันจะแสดงแนวคิดของ Java (และ Java ที่มีประสิทธิภาพ) ของฉันเกี่ยวกับการเริ่มต้นตัวแปร สิ่งเหล่านี้ควรใช้งานได้กับภาษาระดับสูงอื่น ๆ อีกมากมาย
ค่าคงที่และตัวแปรคลาส
ตัวแปรคลาส - ทำเครื่องหมายด้วยstatic
ใน Java - เป็นเหมือนค่าคงที่ ตัวแปรเหล่านี้ปกติควรเป็นที่สิ้นสุดและเริ่มต้นความหมายโดยตรงหลังจากใช้=
หรือจากภายในชั้น initializer static { // initialize here }
บล็อก
ทุ่ง
เนื่องจากในระดับที่สูงขึ้นและฟิลด์ภาษาสคริปต์จะได้รับการกำหนดเป็นค่าเริ่มต้นโดยอัตโนมัติ สำหรับตัวเลขและchar
นี่จะเป็นค่าศูนย์ สตริงและวัตถุอื่น ๆ null
ก็จะเป็น ตอนนี้null
เป็นสิ่งที่อันตรายและควรใช้อย่าง จำกัด ดังนั้นควรตั้งค่าฟิลด์เหล่านี้ให้เป็นค่าที่ถูกต้องโดยเร็วที่สุด คอนสตรัคเตอร์เป็นสถานที่ที่สมบูรณ์แบบสำหรับสิ่งนี้ เพื่อให้แน่ใจว่าตัวแปรถูกตั้งค่าในระหว่างตัวสร้างและไม่เปลี่ยนแปลงหลังจากนั้นคุณสามารถทำเครื่องหมายด้วยfinal
คำสำคัญ
ลองและต่อต้านความอยากที่จะใช้null
เป็นค่าสถานะหรือค่าพิเศษบางอย่าง มันจะดีกว่าที่จะรวมถึงเขตข้อมูลที่เฉพาะเจาะจงเพื่อเก็บสถานะ ฟิลด์ที่มีชื่อstate
ซึ่งใช้ค่าของการState
แจงนับจะเป็นตัวเลือกที่ดี
พารามิเตอร์วิธีการ
เนื่องจากการเปลี่ยนแปลงไปเป็นค่าของพารามิเตอร์ (ไม่ว่าจะอ้างอิงกับวัตถุหรือชนิดพื้นฐานเช่นจำนวนเต็ม ฯลฯ ) final
จะไม่สามารถมองเห็นได้โดยโทรพารามิเตอร์ควรจะทำเครื่องหมายว่าเป็น ซึ่งหมายความว่าค่าของตัวแปรนั้นไม่สามารถเปลี่ยนแปลงได้ โปรดทราบว่าค่าของอินสแตนซ์ของวัตถุที่ไม่แน่นอนสามารถเปลี่ยนแปลงได้การอ้างอิงไม่สามารถเปลี่ยนให้ชี้ไปที่วัตถุอื่นหรือnull
แม้ว่า
ตัวแปรท้องถิ่น
ตัวแปรท้องถิ่นจะไม่เริ่มต้นโดยอัตโนมัติ พวกเขาจะต้องเริ่มต้นก่อนที่จะสามารถใช้ค่าของพวกเขา วิธีการหนึ่งในการตรวจสอบให้แน่ใจว่าตัวแปรของคุณถูกเตรียมใช้งานคือการเริ่มต้นให้เป็นค่าเริ่มต้นบางประเภทโดยตรง อย่างไรก็ตามนี่คือสิ่งที่คุณไม่ควรทำ เวลาส่วนใหญ่ค่าเริ่มต้นไม่ใช่ค่าที่คุณคาดไว้
มันเป็นการดียิ่งกว่าที่จะกำหนดตัวแปรเฉพาะที่คุณต้องการตัวแปร หากตัวแปรใช้ค่าเดียวเท่านั้น (ซึ่งเป็นจริงสำหรับตัวแปรส่วนใหญ่ในรหัสที่ดี) จากนั้นคุณสามารถทำเครื่องหมายตัวแปรfinal
ได้ สิ่งนี้ทำให้แน่ใจว่าตัวแปรโลคัลถูกกำหนดอย่างแน่นอนหนึ่งครั้งไม่ใช่ศูนย์ครั้งหรือสองครั้ง ตัวอย่าง:
public static doMethod(final int x) {
final int y; // no assignment yet, it's final so it *must* be assigned
if (x < 0) {
y = 0;
} else if (x > 0) {
y = x;
} else {
// do nothing <- error, y not assigned if x = 0
// throwing an exception here is acceptable though
}
}
โปรดทราบว่าหลายภาษาจะเตือนคุณหากตัวแปรยังคงไม่กำหนดค่าเริ่มต้นไว้ก่อนการใช้งาน ตรวจสอบข้อกำหนดภาษาและฟอรัมเพื่อดูว่าคุณไม่ต้องกังวลโดยไม่จำเป็น