Java'da “iyi stil” için ne yapar? [kapalı]


9

Stackoverflow ile ilgili bu soruyu sormuştum, ve yuhalanmadan önce, Péter Török'ten bunu göndermek için daha iyi bir yer olabileceğine dair yararlı bir öneri aldım.

Birkaç yıldır Java'da program yapıyorum. Tasarım kararlarını meslektaşları ile 'iyi tarzı' neyin oluşturduğu temelinde tartıştım. Gerçekten de, bir tasarımı 'iyi stil' olup olmadığına göre tartışan bir dizi StackOverflow sorusu / yanıtı vardır.

Peki 'iyi tarzı' yapan nedir? Birçok şey gibi, onu gördüğümde biliyorum ... ama sadece bu tasarımın doğru hissetmediğini söyleyen vicdanımdan daha iyi bir fikre sahip olmak istedim.

İyi, iyi tasarlanmış bir kod üretmek için düşündüğünüz şeyler nelerdir?

('İyi stil' olan şey eldeki göreve bağlı olacağından bunun biraz öznel olduğunu kabul ediyorum). (Ayrıca, takım stilleriyle ilgilenmediğimi de eklemeliyim - örneğin "4 yerine 2 boşluk girintisi kullanıyoruz" ... ve Java kod kurallarıyla ilgilenmiyorum.)

Edit: şimdiye kadar tüm iyi cevaplar / yorumlar için teşekkürler. Özellikle bir programcının vicdanı (ve muhtemelen mide) anahtarı yapan şeyleri kodlamaya yardımcı olacak cevaplara meraklıyım?


Burada listelenen diğer birçok şey arasında, kesinlikle bilgisayarların kodu yazdığınız herhangi bir şekilde derleyebildiğini kesinlikle belirtmek isterim, ancak sonuçta kodun okunabilir olması gerekir . Deli gibi yorum yap! Kullanmaktan hoşlandığım iyi bir test: Bir kişi kodun ne yaptığını, girdi ve çıktılarının ne olduğunu ve bunu yapmak için kullanılan algoritma (algoritmaları) öğrenmek için sadece yorumlarımı okuyabilir mi?
Brian

1
@brian, kodunuzun nasıl olduğunu açıklayın . Nedenini açıklamak için gerçek yorumları bırakın . Diğer bir deyişle, deli gibi yorum yapma (genel durumda)

4
Brian: Bu teknik kesinlikle iyi bir uygulama olarak görülmüyor. Yaygın iyi uygulama, kodunuzu olabildiğince kendi kendini belgelemeyi (net değişken adları ve işlev uyumu ile), "nasıl" değil "neden" i açıklamak için yorum yapmaktır. Her küçük ayrıntıyı açıklayan yorumlar genellikle dikkat dağıtıcı ve genellikle tehlikeli olarak kabul edilir, çünkü insanların yorumları koddan daha az tutmaları daha olasıdır.
Casey Patton

1
@Brian: Son ifadeniz her şeyi söylüyor. Kod okunabilir olmalıdır. Yorumlar bayat. Kod asla yapmaz. Yorumlara ihtiyacınız olduğunu düşünüyorsanız, kod o kadar net oluncaya kadar yeniden düzenleyin; yorumlar kodun söylediklerini tekrarlar. Tek iyi yorum, kodun neden belirli bir şekilde çalıştığını söyleyen bir yorumdur - üçüncü taraf kitaplığındaki bir hatadan kaçınmak gibi - böylece biri geri dönmez ve bir nedenden dolayı çalışmayan bir şeye değiştirmez bu hemen belli değil.
Ryan Stewart

2
Ben resmen alçakgönüllüyüm. Üzgünüm @maidment. Yorumlar söz konusu olduğunda iyi kodlama standartlarını araştırmaya ihtiyacım var.
Brian

Yanıtlar:


17

Birkaç kısa nokta:


3
+1. Belki de en kritik: yinelenen kodu en aza indirin. Birkaç simgeden fazlasını kesip yapıştırmak isterseniz, bir işlevi çıkarmanız gerekir. İşlev tek bir kod satırı olsa bile.
kevin cline

4
Yinelenen kodda, aşağıdaki duruşu alıyorum. Kes ve yapıştır = tamam. Bu sadece hareketli kod (bir kez macun kullandığınızı varsayarsak). Kopyala ve yapıştır = korkunç. Kopyala düğmesini kelime dağarcığınızdan kaldırırsanız, doğru olanı yapmanız daha olasıdır.
jsternberg

@jsternberg: Kesme / kopyalama ayrımı için +1, ancak birçok kullanıcının "kopyala / yapıştır" anlamına geldiklerinde "kes / yapıştır" dediğini fark ettim. Ayrımın nasıl kaybolduğunu bilmiyorum.
Ryan Stewart

5
Kendini tekrar etme. Kendini tekrar etme. Kendini tekrar etme.
yapılandırıcı

1
@configurator, biraz komik kokuyorsun ...

9

Ryan'ın listesine ekleme:

  • Takip KATI ilkeleri
  • Kodunuzun çok fazla döngüsel karmaşıklığa sahip olmadığından emin olun
  • Test Güdümlü Java her zaman iyi bir şeydir
  • Bir dersiniz varsa xFactoryFactory, yanlış yapıyorsunuz :-)
  • Java ekosistemindeki açık kaynak kütüphaneleri göz önüne alındığında, tekerleği yeniden icat etmek kötü bir stil
  • Kullanım Joda zaman tarih ve saat için

Orada duracağım.


2
Peki ya HammerFactoryFactoryFactorysınıf? ;-)
Wayne Molina

@Wayne, Fabrikalar bazı kararların ertelenmesi gerektiğinin bir göstergesidir ve FactoryFactoryFactories, çalışma zamanında gerçekten yapılması gereken, ancak yapılamayan bir karar olduğunu belirtir.

Biliyorum, o zaman-alaycı ve o zaman-J2EE neden HammerFactories ve HammerFactoryFactories ile aşırı karmaşık olduğu hakkında makale atıfta ve ben HammerFactoryFactoryFactories düşünüyorum. :)
Wayne Molina

@Martijn - SOLID bağlantısı için teşekkürler; Daha önce bununla karşılaşmadım. JodaTime kullanmanızı öneririz; Java Takvim / Tarih sınıflarına sadece (uygun) bir kaçınma mıdır? JSR310 (JodaTime'in halefi) ne olacak?
hayret

JSR-310 umarız Java 8'e dönüşür (bunu yapmak için denemek ve yardımcı olmak için bir takımımız var, katılmak istiyorsanız bana ulaşın). Bu arada, Joda zamanı Java'da tarih ve saatle uğraşmak için defacto std'dir. Java'nın Tarih ve Takvim sisteminde yanlış olan çok şey var; nereden başlayacağımı bile bilmiyorum ;-). Katil, Tarihlerin değişebilir olması ve bir an ya da dönem kavramının olmaması ya da ... hayır, orada duracağım :-).
Martijn Verburg

1

Başkalarının cevaplarını takdir ederken, iyi kod yazmaya çalışırken düşündüğüm şeylerden birkaçını paylaşmanın adil olduğunu düşündüm:

  • Bu sınıf / yöntem / değişken hakkında bilmeniz gerekenler nelerdir? yani bu bilgi nerede yaşamalıdır?

  • bu kod uygulamamın belleğini / performansını nasıl etkileyebilir? ('Erken optimizasyonun tüm kötülüğün kökü olduğunu' kabul ediyorum; bu yüzden optimizasyon için çok fazla zaman harcamayı değil, ilk olarak kodumu yazarken bir bilinç önermiyorum.)

  • (kod ve kod yapılarından) bunun ne yaptığı açık mı? (Ben şu özdeyişi takip etmeye çalışıyorum: "İnsanların anlamasını mümkün kılmamak için çaba göster, insanların yanlış anlamasını imkansız hale getirmeye çalış".)


1

Uygun Java programlamanın mükemmel örnekleri için String ve ArrayList sınıfını okuyun. Ancak, son derece özlü, neredeyse C stili, bu da minimum java dokümanı ile sürdürülebilir kod için mutlaka en iyisi değil. Benim dükkanda yaygın uygulama yorum yok, bu yüzden ayrıntılı bir camelCase var isimlerini ve bir düşünce çizgisini diğerinden sınırlamak için yeni satırların aşırı kullanımını kullanarak kodla yorum yapmaya çalışıyorum. Hala vars değerlerinden ayırmak için sekmeleri kullanarak tartışıyorum. Sekmeler okunabilirliği, IMO'yu artırabilir, ancak yalnızca minimal yapıldığında ve çok özneldir. Gerçekten seyircilerle ilgili olduğunu düşünüyorum. Burada en iyi cevap yok.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.