Java yorumlarında mantıksal kod bölümleri nasıl işaretlenir?


93

Java sınıfları genellikle mantıksal "bloklara" ayrılır. Bu bölümleri işaretlemek için bir kongre var mı? İdeal olarak, büyük IDE'ler tarafından desteklenecektir.

Ben şahsen bu yöntemi kullanıyorum:

//// Section name here ////

Ancak bazı editörlerin bununla ilgili sorunları var gibi görünüyor.

Örnek olarak, Objective-C kodunda şu yöntemi kullanabilirsiniz:

#pragma mark -
#pragma mark Section name here

Bu, XCode'da şuna benzer bir menü ile sonuçlanacaktır:

alternatif metin


4
Bir iOS geliştiricisi olarak, Android Studio'ya başladığımda en çok kaçırdığım şey buydu
Chris Chen

1
olumsuz oy verildi: Modern IDE'ler ve dillerde bu kötü bir uygulamadır. Kodunuzu bölümlere ayırmanız gerekiyorsa, muhtemelen Tek Sorumluluk İlkesini zaten bozuyorsunuz ve farklı sınıflara / dosyalara bölmek daha iyidir. Birden fazla düzenleyici varsa, bir süre sonra büyük olasılıkla senkronizasyon dışı olacaktır, bazıları bunu takip edecek, bazıları kodu yeniden düzenleyecek ve yeniden düzenleyecektir veya otomatik kaydetme ve biçimlendirme eylemleri onu bozacaktır.
f.carlsen

olumsuz oy verildi: @ f.carlsen'e katılıyorum. Sınıfınızı yorumlarla yapılandırırsanız, Tek Sorumluluk İlkesini ihlal etme olasılığınız çok yüksektir .
schrieveslaach

Nefret edenler için: Java, arayüz uygulamalarınızı mantıksal olarak farklı bölümlere ayırabileceğiniz Swift tarzı sınıf uzantılarını desteklediğinde beni arayın. Ve evet, bir sınıf aynı anda birden çok arabirimi uygulamak için iyi bir iş çıkarabilir.
William Entriken

Yanıtlar:


68

Şahsen 80 karakterlik satır ayırıcıları kullanıyorum, şöyle:

public class Client {

    //================================================================================
    // Properties
    //================================================================================

    private String name;
    private boolean checked;

    //================================================================================
    // Constructors
    //================================================================================

    public Client() {
    }

    public Client(String name, boolean checked) {
        this.name = name;
        this.checked = checked;
    }

    //================================================================================
    // Accessors
    //================================================================================

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public boolean isChecked() {
        return checked;
    }

    public void setChecked(boolean checked) {
        this.checked = checked;
    }

}

Elbette, bu kadar küçük bir POJO için bu biraz abartılı görünebilir, ancak inanın bana, büyük kaynak dosyalara göz atmam ve ilgilendiğim yöntemleri hızlıca bulmam gereken bazı büyük projelerde çok faydalı olduğunu kanıtladı. kaynak kod yapısı.

Eclipse'de, bu çubukları oluşturan bir dizi özel şablon (Java -> Editör -> Eclipse'nin Tercihler iletişim kutusundaki Şablonlar) oluşturdum, örn. - sepa (Erişimciler için SEParator) - sepp (Özellikler için SEParator) - sepc (Yapıcılar için SEParator) - vb.

Standart "yeni sınıf" şablonunu da değiştirdim (Eclipse Tercihleri ​​ekranında Java -> Kod Stili -> Kod Şablonları)

Ayrıca, Eclipse'in kod bölümlerini katlama şeklini geliştiren Coffee-bytes adlı eski bir Eclipse eklentisi var . Hala çalışıp çalışmadığını bilmiyorum, ancak birinin // [SECTION] veya başka bir şey gibi özel yorumlar ekleyerek keyfi katlanabilir bölgeler tanımlayabileceğini hatırladım. Hala son Eclipse revizyonlarında çalışabilir, bu yüzden bir göz atın.


147

İntellij / android stüdyosu için harika bir çözüm var.
Şununla başlayın:
//region Description
ve şununla bitirin:
//endregion

Bunun kısayolu, Command+ Alt+ T(Mac) veya Ctrl+ Alt+ T(Windows) ile açabileceğiniz menüdedir.

İhtiyaç duyduğunuzda ek görsel ayrım için kendi çizginizi de ekleyebilirsiniz. Bölge, herhangi bir işlevde olduğu gibi +/- düğmeleriyle daraltılabilir ve genişletilebilir. Command+ Alt+ Period( Ctrl+ Alt+ Period) İle bölgeler arasında da gezinebilirsiniz.

Kaynak .

Misal:

//region Parceler Implementation
//---------------------------------------------------------------------------------------
@Override
public int describeContents() {
    return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeParcelable(this.die, 0);
    dest.writeParcelable(this.dieSprite, 0);
}

private DieVm(Parcel in) {
    this.die = in.readParcelable(Die.class.getClassLoader());
    this.dieSprite = in.readParcelable(Sprite.class.getClassLoader());
}

public static final Parcelable.Creator<DieVm> CREATOR = new Parcelable.Creator<DieVm>() {
    public DieVm createFromParcel(Parcel source) {
        return new DieVm(source);
    }

    public DieVm[] newArray(int size) {
        return new DieVm[size];
    }
};
//---------------------------------------------------------------------------------------
//endregion

Bu inanılmaz derecede faydalı Teşekkürler Andrey. BTW Tutulma klavye kısayolu düzenini kullanıyorum ve kısayolların benim için çalıştığını düşünmüyorum, ancak '// bölgesi' harika çalışıyor
ThinkBonobo

2
Bunun yapı görünümünde görünmesi için herhangi bir yol görmüyorum, bu yüzden hala sahte boş üyeler kullanıyorum (kullanılmayan uyarıyı bastırmanın yanı sıra).
Tom

1
bu bölgeyi Android Studio'da (Yapı görünümü) göstermenin herhangi bir yolu var mı?
MiguelHincapieC

Bağlantı öldü; bu IntelliJ IDEA blogu faydalı bir referans olabilir. Ayrıca NetBeans tarzı katlama öğelerinden de bahsedilmektedir <editor-fold ...>.
Franklin Yu

en iyi cevap
Michał Ziobro

14

Eclipse , anahat görünümünde kategoriye göre filtrelemeyi etkinleştiren bir @category javadoc ek açıklamasını ("Kategori desteği" olarak işaretlenmiş bölüme kaydırın) tanımlar . Tam olarak istediğin şey değil mi. Hiç kimsenin ekran görüntünüz gibi bir görünüm sunan bir Eclipse eklentisi yazmamış olmasına şaşırdım.


Bununla birlikte, çoğu java görünümünde, örnek olarak, varsayılan alıcılar ve ayarlayıcılar olarak gizlemek için sınıf üyelerini kategorilerine göre filtrelemek mümkündür.
Riduidel

Android Studio'da @category'ı neden kullanamadığım hakkında hiçbir fikrim yok, aynı davranışı elde etmek için ne yapabilirim biliyor musunuz?
MiguelHincapieC

6

Bunu xcode kullanırken de beğendim. Tutulma için bir Java sınıfında gezinmek için ctrl + o (hızlı anahat) kullanıyorum.


6

Çalışmaya yardımcı olmak için kodda gereksiz yorumlar / işaretler kullanmak iyi bir uygulama olmayabilir. Xcode ve java geliştirme hakkında çok az fikrim var, ancak tüm büyük IDE'lerin, eclipse gibi herhangi bir özel işaret olmadan üyeleri bulma desteği ctrl+O, Intellij (Mac'te daha fazla kullanmayı tercih ettiğim ve bir topluluk sürümü de) aynı anahat konseptine sahiptir ve (ctrl + f12) kullanılarak hızlı bir şekilde erişilebilir. Yani buradaki amacım, tüm (veya en azından iyi / aklı başında) IDE'lerin otomatik olarak yapabileceği için, kodda gereksiz işaretleme kullanmayın.


2
Kabul ediyorum, bölüm işaretçileri yalnızca görsel karmaşaya katkıda bulunur. Sınıfınız, bunları ilgisiz kılmak için yeterince sıkı odaklanmalıdır.
Paul McKenzie

15
Elbette, ancak mantıksal ve işaretli bölümler halinde gruplandırılmış yöntemlere sahip olmak, aksi takdirde düz bir yöntem listesi olacak olana görsel düzen getirmeye yardımcı olabilir. Bazen tam olarak hangi yöntemi istediğinizi bilmiyorsunuz ve ilgili yöntemleri aynı anda almak güzel ve ilgili kodun tamamını gördüğünüze dair bir fikriniz var.
Brian Rak

4

Bildiğim kadarıyla, sınıf üyelerini bir arada gruplandırmak için desteklenen bir belirtim diye bir şey yok. İstediğiniz her türlü yorum kuralını kullanabilirsiniz, ancak muhtemelen herhangi bir araç tarafından desteklenmeyecektir.

İlgili üyeleri miras alma veya toplama yoluyla ayrı bir sınıfa gruplamak daha iyidir. Bu, iyi bir OOP stili olarak kabul edilir


5
Kod bölümlerini ayırmak ancak teoride mümkün görünüyor. Örneğin, ad gibi özniteliklere sahip bir Müşteri sınıfı ve bir koleksiyon "faturalar" alın. Bunu, ad için alıcılar / ayarlayıcılar içeren bir bölüm "adı" ve faturalar için ekleme / çıkarma yöntemlerini içeren bir "faturalar" bölümü olarak ikiye ayırmayı çok isterim. Bunları, sınıf başına yalnızca bir öznitelik ekleyebilen bir sınıf hiyerarşisine bölmek, yani "NamedEntity", "NameAndAddressEntity", "Invoicable", ...
Frederik

4

Javadoc kullanırdım ; veya aşağıdakileri basit bir "ayırıcı" olarak kullanın (tek veya 3 satır):

/** RecyclerOnItemClickListener */

/** 
 * RecyclerOnItemClickListener
 */

Böylece IDE'de göze çarpmayan yorumlu griden farklı bir renkte görünür.


3

Andrei'nin verdiği cevaba ek olarak, bölge // uç bölgeyi kullanmak için //, ana kod bölümlerine [BigAscii harfleri] [1] ekliyoruz. Hızlı kaydırırken gerçekten göze çarpıyor. Bu yaklaşımın bir dezavantajı, onu arayamamam, bu nedenle aşağıda yaptığım gibi "banner" ın hemen altına bir arama terimi eklemeniz gerekmesidir.

Blok alıntı

//    _      _____          _____                  _   _
//   | |    |  __ \   /\   |  __ \      /\        | | | |
//   | |    | |  | | /  \  | |__) |    /  \  _   _| |_| |__
//   | |    | |  | |/ /\ \ |  ___/    / /\ \| | | | __| '_ \
//   | |____| |__| / ____ \| |       / ____ \ |_| | |_| | | |
//   |______|_____/_/    \_\_|      /_/    \_\__,_|\__|_| |_|
//
//   Search here with: LDAP Auth

[1]: http://patorjk.com/software/taag/#p=display&c=c%2B%2B&f=Big&t=LDAP Auth


2

Modern bir IDE, kodunuzu birçok farklı şekilde görüntülemenize ve hatta yeniden düzenlemenize olanak tanır. Eclipse, imlecin bulunduğu kodun tanımını başka bir panelde görüntülemenize bile izin verir.

Kodunuzun otomatik olarak yeniden düzenlenmesi, bu tür işaretlemenin bozulmasına neden olur.

Gruplama istiyorsanız, aynı sınıfa ait olan şeyleri bir araya getirmeyi ve farklı sınıflarda birbirine ait olmayan şeyleri düşünün.


0

Yöntemlerinizi kümelendirebilirseniz, bir bölümde yakalamak istediğiniz kavram için özel olarak başka bir sınıf yapın. Devam edin, dosya oluşturmak ücretsizdir.


-18

IntelliJ için beğendim:

        public void ________________INIT__________________() {};

dosya yapısında güzel görünüyor!


3
Bu çok kötü bir çözüm gibi görünüyor. Hedefiniz kod organizasyonu iken neden ek yöntemler beyan edesiniz?
nsg

1
Bu, tüm dosyayı Yapı görünümünde bölümlere ayırmak içindir.
Tycho Pandelaar

1
bu sadece android stüdyosunda gerçekten görünen, cevap olarak
kendimi öneren

14
Şimdiye kadar gördüğüm en kötü şey !! ve bu KAMU! o_O
Cocorico

3
Yapı görünümünde görünen tek cevap budur ve farklı IDE'lerde çalışır. Onu özel yapın, sırıtın ve katlanın ya da beğenmezseniz kullanmayın, ancak bu cevabı unutulup oylayarak diğer okuyuculardan saklamayın.
Tom
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.