ลูกโลกนั้นไม่เลวเลย ตามที่ระบุไว้ในคำตอบอื่น ๆ อีกหลายปัญหาที่แท้จริงกับพวกเขาคือสิ่งที่วันนี้เส้นทางโฟลเดอร์ทั่วโลกของคุณอาจในวันพรุ่งนี้จะเป็นหนึ่งในหลาย ๆ หรือแม้กระทั่งหลายร้อย หากคุณกำลังเขียนโปรแกรมแบบเร็วครั้งเดียวใช้ globals ถ้ามันง่ายกว่า แม้ว่าโดยทั่วไปแล้วการอนุญาตให้มีทวีคูณแม้ว่าคุณคิดว่าคุณต้องการเพียงวิธีเดียวก็ตาม ไม่น่าเป็นไปได้ที่จะต้องปรับโครงสร้างของโปรแกรมที่ซับซ้อนขนาดใหญ่ซึ่งจู่ ๆ ก็ต้องพูดคุยกับฐานข้อมูลสองแห่ง
แต่พวกเขาไม่เจ็บความน่าเชื่อถือ ข้อมูลใด ๆที่อ้างอิงจากหลาย ๆ ที่ในโปรแกรมของคุณอาจทำให้เกิดปัญหาหากมีการเปลี่ยนแปลงโดยไม่คาดคิด ตัวแจงนับทำให้หายใจไม่ออกเมื่อคอลเลกชันที่พวกเขากำลังระบุมีการเปลี่ยนแปลงในการแจงนับกลาง เหตุการณ์คิวกิจกรรมสามารถเล่นกลกันได้ หัวข้อสามารถก่อให้เกิด havok สิ่งใดก็ตามที่ไม่ใช่ตัวแปรในตัวเครื่องหรือฟิลด์ที่ไม่สามารถเปลี่ยนแปลงได้นั้นเป็นปัญหา Globals เป็นปัญหาแบบนี้ แต่คุณจะไม่แก้ไขด้วยการทำให้มันไม่ใช่แบบโกลบอล
หากคุณกำลังจะเขียนไปยังไฟล์และการเปลี่ยนแปลงพา ธ ของโฟลเดอร์การเปลี่ยนแปลงและการเขียนจะต้องซิงโครไนซ์ (เป็นหนึ่งในพันสิ่งที่อาจผิดพลาดได้บอกว่าคุณคว้าเส้นทางแล้วไดเรกทอรีนั้นจะถูกลบจากนั้นเส้นทางโฟลเดอร์จะถูกเปลี่ยนเป็นไดเรกทอรีที่ดีจากนั้นคุณลองและเขียนไปยังไดเรกทอรีที่ถูกลบ) ปัญหามีอยู่หรือไม่ เส้นทางโฟลเดอร์เป็นแบบโกลบอลหรือเป็นหนึ่งในพันโปรแกรมที่ใช้งานอยู่
มีปัญหาจริงกับฟิลด์ที่สามารถเข้าถึงได้โดยเหตุการณ์ที่แตกต่างกันในคิวระดับการเรียกซ้ำที่แตกต่างกันหรือเธรดที่แตกต่างกัน เพื่อให้ง่าย (และง่าย): ตัวแปรท้องถิ่นดีและเขตข้อมูลไม่ดี แต่อดีต globals ยังคงเป็นฟิลด์ดังนั้นปัญหา (แต่สำคัญอย่างยิ่ง) นี้ใช้ไม่ได้กับสถานะที่ดีหรือชั่วร้ายของเขตข้อมูลทั่วโลก
นอกจากนี้:ปัญหามัลติเธรด:
(โปรดทราบว่าคุณสามารถมีปัญหาที่คล้ายกันกับคิวเหตุการณ์หรือการโทรซ้ำ แต่การมัลติเธรดนั้นแย่ที่สุด) พิจารณารหัสต่อไปนี้:
if (filePath != null) text = filePath.getName();
ถ้าfilePath
เป็นตัวแปรโลคัลหรือค่าคงที่บางชนิดโปรแกรมของคุณจะไม่ล้มเหลวเมื่อทำงานเนื่องจากfilePath
เป็นโมฆะ การตรวจสอบใช้งานได้เสมอ ไม่มีเธรดอื่นสามารถเปลี่ยนค่าได้ มิฉะนั้นจะไม่มีการรับประกัน เมื่อฉันเริ่มเขียนโปรแกรมแบบมัลติเธรดใน Java ฉันได้รับ NullPointerExceptions ในบรรทัดเช่นนี้ตลอดเวลา ใดเธรดอื่นสามารถเปลี่ยนค่าได้ตลอดเวลาและพวกเขามักจะทำ ดังที่คำตอบอื่น ๆ ชี้ให้เห็นซึ่งจะสร้างปัญหาร้ายแรงสำหรับการทดสอบ ข้อความข้างต้นสามารถใช้งานได้พันล้านครั้งโดยผ่านการทดสอบที่ครอบคลุมและครอบคลุม ผู้ใช้จะไม่สามารถสร้างปัญหาขึ้นมาใหม่และจะไม่เกิดขึ้นอีกจนกว่าพวกเขาจะเชื่อมั่นว่าตนเองได้เห็นสิ่งต่าง ๆ และลืมมันไป
Globals มีปัญหานี้แน่นอนและถ้าคุณสามารถกำจัดพวกมันได้อย่างสมบูรณ์หรือแทนที่พวกมันด้วยค่าคงที่หรือตัวแปรท้องถิ่นนั่นเป็นสิ่งที่ดีมาก หากคุณมีรหัสไร้สัญชาติทำงานบนเว็บเซิร์ฟเวอร์คุณอาจทำได้ โดยทั่วไปปัญหาฐานข้อมูลทั้งหมดของคุณสามารถดำเนินการได้โดยฐานข้อมูล
แต่ถ้าโปรแกรมของคุณต้องจดจำสิ่งต่าง ๆ จากการกระทำของผู้ใช้คนหนึ่งไปยังอีกฉากหนึ่งคุณจะสามารถเข้าถึงฟิลด์ต่างๆได้โดยเธรดที่กำลังรันอยู่ การเปลี่ยนโกลบอลเป็นฟิลด์ที่ไม่ใช่โกลบอลจะไม่ช่วยให้เกิดความน่าเชื่อถือ