Globals o kadar da kötü değil. Diğer birkaç cevapta da belirtildiği gibi, onlarla ilgili asıl sorun, bugünün global klasör yolunuzun ne olacağı , yarın birkaç, hatta yüzlerce olabilir. Hızlı bir kereye mahsus bir program yazıyorsanız, daha kolaysa küreler kullanın. Genel olarak, ancak, yalnızca bir kişiye ihtiyacınız olduğunu düşündüğünüzde bile, katları kabul etmek, gitmenin yoludur. Birdenbire iki veritabanıyla konuşması gereken geniş ve karmaşık bir programı yeniden yapılandırmanız gerekmiyor .
Ancak güvenilirliğe zarar vermezler. Herhangi beklenmedik değişirse programınızda birçok yerlerden kaynak veri sorunlara yol açabilir. Numaralandırıcılar, numaralandırmakta oldukları koleksiyon numaralandırma ortasında değiştiğinde boğulur. Olay kuyruğu olayları birbiriyle ilgili püf noktaları oynayabilir. Dişler her zaman hasara yol açabilir. Yerel bir değişken veya değiştirilemez alan olmayan herhangi bir problemdir. Globals bu tür bir problemdir, fakat onları küresel olmayan hale getirerek düzeltemeyeceksiniz.
Bir dosyaya yazmak üzereyseniz ve klasör yolu değişirse, değişiklik ve yazmanın senkronize edilmesi gerekir. (Yanlış gidebilen bin şeyden biri olarak, yolu tuttuğunuzu, sonra bu dizinin silindiğini, ardından klasör yolunun iyi bir dizine dönüştüğünü, daha sonra silinen dizine yazmayı denediğinizi söyleyin.) Sorun olup olmadığını klasör yolu geneldir veya programın şu anda kullandığı binden biridir.
Sıradaki farklı olayların, farklı özyineleme seviyelerinin veya farklı iş parçacıklarının erişebileceği alanlarla ilgili gerçek bir sorun var. Basit (ve basit) yapmak için: yerel değişkenler iyi ve alanlar kötüdür. Ancak eski küreler hâlâ alan olacak, bu yüzden bu kritik öneme sahip konu, Küresel alanların İyilik veya Kötülük durumu için geçerli değil .
Ekleme: Çok Okunaklı Sorunlar:
(Bir olay kuyruğunda veya özyinelemeli çağrılarla benzer sorunlarla karşılaşabileceğinizi unutmayın, ancak çoklu okuma en kötüsüdür.) Aşağıdaki kodu göz önünde bulundurun:
if (filePath != null) text = filePath.getName();
Eğer filePath
yerel bir değişken veya sabit bir çeşit, programınız olduğunu değil çünkü çalışırken başarısız olacak filePath
boş. Kontrol her zaman çalışır. Başka hiçbir iplik değerini değiştiremez. Aksi takdirde , hiçbir garanti yoktur. Java'da çok iş parçacıklı programlar yazmaya başladığımda, her zaman bu gibi satırlarda NullPointerExceptions var. herhangidiğer iş parçacığı değeri istediği zaman değiştirebilir ve sık sık yaparlar. Diğer bazı cevapların işaret ettiği gibi, bu test için ciddi problemler yaratır. Yukarıdaki açıklama, kapsamlı ve kapsamlı testlerden geçirerek milyarlarca kez çalışabilir ve ardından bir kez üretimde patlayabilir. Kullanıcılar sorunu çözemezler ve kendilerini bir şeyleri görmeye ve unutmaya ikna edene kadar bir daha olmaz.
Globals kesinlikle bu soruna sahiptir ve bunları tamamen ortadan kaldırabilir veya bunları sabitler veya yerel değişkenlerle değiştirebilirseniz, bu çok iyi bir şey. Bir web sunucusunda çalışan durumsuz kod varsa, muhtemelen yapabilirsiniz. Tipik olarak, tüm okuyuculuk sorunlarınız veritabanıyla çözülebilir.
Ancak, programınız bir kullanıcı işleminden diğerine bir şeyleri hatırlamak zorunda kalırsa, çalışan herhangi bir iş parçacığı tarafından erişilebilen alanlara sahip olacaksınız. Global bir dünyayı böyle küresel olmayan bir alana geçirmek, güvenilirliğe yardımcı olmaz.