Java yöntemi sipariş kuralları var mı? [kapalı]


159

Ben kurs çalışması olarak göndereceğim bir paketin parçası olan büyük bir ish sınıf (40 ya da öylesine yöntemleri) var. Şu anda, yöntemler kamu / özel vb. Yarar açısından oldukça karışık ve bunları mantıklı bir şekilde sipariş etmek istiyorum. Bunu yapmanın standart bir yolu var mı? Örneğin, normalde alanlar yöntemlerden önce listelenir, yapıcı (lar) diğer yöntemlerden önce listelenir ve alıcılar / ayarlayıcılar son olarak; kalan yöntemler ne olacak?


Ayrıca , böyle bir kodla çalışırken , çoğu IDE'nin imlecin altındaki her şeyin tanımını otomatik olarak görmenize izin verdiğini unutmayın . Bu, bakıştan başka bir şey yapmanız gerekmediği anlamına gelir.
Thorbjørn Ravn Andersen

Tek bir sınıfta 40 yönteminiz varsa - yanlış yapıyorsunuz
Ben

Yanıtlar:


132

Bazı sözleşmeler önce tüm genel yöntemleri, sonra da tüm özel yöntemleri listeler - yani, herhangi bir arabirim olmasa bile, API'yı uygulamadan ayırmanın kolay olduğu anlamına gelir.

Başka bir fikir, ilgili yöntemleri birlikte gruplandırmaktır - bu, mevcut büyük sınıfınızı daha küçük, daha hedefli olanlara ayırabileceğiniz dikişleri tespit etmeyi kolaylaştırır.


1
+1. Görünürlüğüne göre sıralamayı tercih ederim. Utanç Eclipse bunu otomatik olarak yapamaz (her zaman tüm kurucuları ve tüm yöntemleri bir arada
gruplayacaktır

16
@finnw, hata raporu gönderin. Oradan yabancı şeylerin uygulandığı bilinmektedir.
Thorbjørn Ravn Andersen

3
@ Ben: Deneyimlerim, herhangi bir "asla" nin istisnaları olacağı.
Jon Skeet

1
@JonSkeet, sipariş kurallarının artık geçerli olmadığı birkaç durumda, örneğin sınıfları test eder. Kötü kod yazmamanız, kötü kodun nasıl düzenleneceğinden daha iyi tavsiye edilir.
Ben

1
@Ben: Sanırım katılmamaya karar vermeliyiz. Endişelerin ayrılmasını vb. İhlal etmeden çok doğal olarak çok sayıda üye bulunan bir kod yazdım
Jon Skeet

121
  1. Sınıf (statik) değişkenleri: Önce ortak sınıf değişkenleri, sonra korumalı ve sonra özel.

  2. Örnek değişkenleri: Önce herkese açık, sonra korunan ve sonra özel.

  3. Kurucular

  4. Yöntemler: Bu yöntemler kapsam veya erişilebilirlik yerine işleve göre gruplandırılmalıdır. Örneğin, özel sınıf yöntemi, iki ortak örnek yöntemi arasında olabilir. Amaç, kodu okumayı ve anlamayı kolaylaştırmaktır.

Kaynak: http://www.oracle.com/technetwork/java/codeconventions-141855.html


4
Bu 15 yaşında ve muhtemelen modern
IDE'lerin

16
@assylias: IMO, okunabilirlik IDE'den bağımsızdır. Herkese açık olarak gizli tutmak genellikle daha iyidir.
saurabheights

40

«Kod Kuralları» ile daha kesin bağlantı: «Sınıf ve Arayüz Bildirimleri»


8
+1, afaik - bu aslında soruyu cevaplayan SADECE gönderi. EVET Oracle ve Sun tarafından dikte edildiği gibi standart bir düzen vardır: 1. genel yorum, 2. sınıf, 3. dahili yorum, 4. statik veri, 5. örnek veri, 6. ctorlar, 7. yöntemler ve her bölüm grubu içinde mantıksal olarak, erişilebilirlikle değil.
John Henckel

@VadimKirilchuk «İnternet Arşivi» düştü…
Timofey Gorshkov


15

Evrensel olarak kabul edilmiş bir standart olup olmadığından emin değilim ama kendi tercihlerim;

  • önce inşaatçılar
  • statik yöntem, bir ana yöntem varsa, her zaman diğer statik yöntemlerden önce
  • statik olmayan yöntemler, genellikle yöntemin önemi ve ardından çağırdığı herhangi bir yöntem sırasıyla. Bu, diğer sınıf yöntemlerini çağıran genel yöntemlerin üstte göründüğü ve başka hiçbir yöntemi çağıran özel yöntemlerin genellikle altta kaldığı anlamına gelir
  • Standart yöntemler gibi toString, equalsve hashcodebir sonraki
  • alıcılar ve ayarlayıcılar sınıfın hemen altında özel bir yere sahiptir

Gerçekten yapıcıları tercih ederim çünkü düzgün yazılmış bir yapıcı argümanlarını özelliklere atamaktan çok az şey yapmalıdır.
GordonM

@GordonM Neden böyle düşünüyorsun? Ben tersinin doğru olduğunu iddia etmek kadar ileri gider. Her zaman sınıflarınız için en temiz API'yi düşünmelisiniz. Ve bu genellikle depolanma şekli değildir, bu yüzden arayanı bu yükten kurtarmak için genellikle biraz işlem yaparım
Neuron

@GordonM Yan etkilerden bahsetmiyorum. Dolayısıyla, geçen listelerde veya benzer bir şeyde değişiklik yapılmaz. Sadece değerleri geçmek ve ayarlamak, Sınıfın uygulaması hakkında çok şey anlatmasını gerektirir, ki durum böyle olmamalıdır
Neuron

@LonelyNeuron Burada söylediklerinizden tam olarak emin değilim, ancak yapıcıya argümanlarını dahili duruma atamak dışında çok fazla kurulum işi yapması gerektiğini söylüyorsunuz. Bu kesinlikle yanlıştır, çünkü bir şeylerin "sihir" ile gerçekleştiği anlamına gelir. Bir çağrı new Thing()sadece yeni bir Şey'in ortaya çıkmasıyla sonuçlanmalıdır. Veritabanı bağlantılarının açılması, dosyaların yazılması vb.
İle sonuçlanmamalıdır

@LonelyNeuron Bir kurucuda bağımlılığa sahip olmak, sınıfın uygulaması hakkında bağımlılıklarının ne olduğu dışında hiçbir şey söylemez. Bu iyi bir şey, kötü bir şey değil.
GordonM

12

Tek bir sınıfta 40 yöntem biraz fazla.

İşlevlerin bir kısmını diğer - uygun şekilde adlandırılmış - sınıflara taşımak mantıklı mıdır? O zaman mantıklı olmak çok daha kolay.

Daha azına sahip olduğunuzda, bunları doğal bir okuma düzeninde listelemek çok daha kolaydır. Sıkça yapılan bir paradigma, şeyleri önce veya sonra listelemektir , ihtiyacınız olan sıraya göre .

Bu genellikle main()üstte veya altta olduğu anlamına gelir .


1
çok haklısın - bu bir sipariş sorunu değil
kostja

4
Her zaman bir seçeneğiniz yoktur, örneğin bir çok yöntemle bir arayüz uyguluyorsanız.
finnw

5
Bu yüzden sadece başka bir yerde gidemez sürü vardır, bir Android Hareketi onPause(), onResume()vb benim tüm yanı sıra OnClickListeneronlar alanlar olmasına rağmen, bakmak ya da mantıklı yüzden onlar gibi davranmayan, alanlar, ayrı ayrı listeleyin.
fredley

@finnw, soyut dersler bu amaç için güzel ve kullanılabilir.
Thorbjørn Ravn Andersen

11

Benim "kural": örnek önce statik, özel önce kamu, yöntemlerden önce yapıcı, ancak altta ana yöntem (varsa).


2

Ayrıca, tutulma sınıf üyelerini sizin için sıralayabilir, eğer herhangi bir nedenle onları karıştırırsanız:

Sınıf dosyanızı açın, ana menüde "Kaynak" a gidin ve "Üyeleri Sırala" yı seçin.

Buradan alınmıştır: Eclipse'de sıralama yöntemleri


1

Eclipse kullanıyor musunuz? Eğer öyleyse, varsayılan üye sıralama düzenine sadık kalacağım, çünkü bu en çok kodunuzu okuyan herkese aşinadır (benim en sevdiğim sıralama düzeni olmasa da).

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.