Alıntılanan metin:
"Ancak, bu gibi varsayılan değerlere güvenmek genellikle kötü programlama tarzı olarak kabul edilir."
Alaycı bir şekilde: "genellikle kabul edilir" çoğu zaman yazarın sunulan ifade için yetkili bir kaynak bulmaya çalışmadığını söylemenin bir yoludur.
Bu durumda iddia açıkça sorgulanabilir. Kanıt: Örneklenen 5 Java Stil Kılavuzundan 5'i varsayılan değerlere güvenmeniz gerekip gerekmediği hakkında bir şey söylemez:
(Not, örnekleme için benim yöntembilim "java tarzı kılavuzu" için ilk 5 farklı Google arama isabet bakmak oldu. Sonra her belgede "varsayılan" aradım. Bu kapsamlı bir analiz değil, ama benim açımdan göstermek için hizmet vermektedir. )
TAMAM. Peki, Java kodunun okunabilirliğine gerçekten yardımcı oluyor mu?
Bu tartışmalıdır.
Bir yandan, varsayılan başlatma hakkında bilgi sahibi olmayan acemi bir Java programcısı sıfırların veya sıfırların nereden geldiği konusunda şaşkına dönebilir. Ancak, açık bir başlatma aramaya uğraşırlar ve bir tane bulmazlarsa, varsayılan başlatma hakkında bilgi edinmek için bir öğretici veya kitap okumalarına neden olmak için yeterli olmalıdır. (Umarım!)
Öte yandan, normalde acemi Java programcılarının üretim kod tabanlarını sürdürmelerini beklemiyoruz. Deneyimli bir Java programcısı için fazladan başlatma, okunabilirliği artırmaz. (En iyi) gürültü.
Bana göre, bir alanın gereksiz başlatılmasıyla elde edilen tek şey, kodun gelecekteki bir okuyucusuna başlangıç değeri hakkında düşündüğünüzü bildirmektir . (@GhostCat'in ifade ettiği gibi, varsayılan başlatma, amacı bildirmez.)
Ama tam tersine o okuyucu olsaydım, kod yazarının düşüncesine kesinlikle güvenmezdim. Dolayısıyla bu "sinyalin" değeri de sorgulanabilir.
Peki ya güvenilirlik?
Java'da fark etmez. JLS belirtir varsayılan başlatma gelmez alanlar için ortaya çıkar. Tersine, yerel değişkenler için kesinlikle başlatılmamış bir değişkeni kullanmaya çalışmak bir derleme hatasıdır.
Kısacası, açıkça başlatılmayan bir değişkenin çalışma zamanı davranışı tamamen tahmin edilebilir.
Aksine, değişkenlerin başlatılamayacağı C veya C ++ gibi dillerde, davranış belirtilmez ve çökmelere ve farklı platformlarda davranış farklılıklarına neden olabilir. Değişkenleri her zaman açıkça başlatma durumu burada çok daha güçlüdür.
Performans ne olacak?
Fark etmemeli. JIT derleyicisi yedek başlatma ve varsayılan başlatma işlemlerini aynı şekilde gerçekleştirebilmelidir.
private int count = 0;
hiçbir şey yapmayan koddur ve hiçbir şey yapmayan kod dağınıktır. Bu, java.lang'dan sınıfları içe aktarmak veya ile bir sınıf bildirmek gibidirextends Object
.