Bagaimana cara menandai bagian logis dari kode di komentar Java?

92

Kelas Java umumnya dibagi menjadi "blok" logis. Apakah ada konvensi untuk menandai bagian ini? Idealnya, ini akan didukung oleh IDE utama.

Saya pribadi menggunakan metode ini:

//// Section name here ////

Namun, beberapa editor sepertinya bermasalah dengan ini.

Sebagai contoh, dalam kode Objective-C Anda dapat menggunakan metode ini:

#pragma mark -
#pragma mark Section name here

Ini akan menghasilkan menu di Xcode yang terlihat seperti ini:

teks alt

Frederik
sumber
4
sebagai pengembang iOS, inilah yang paling saya rindukan ketika saya mulai dengan Android Studio
Chris Chen
1
tidak disukai: Dengan IDE dan bahasa modern, ini adalah praktik yang buruk. Jika Anda harus membagi kode Anda, Anda mungkin sudah melanggar Prinsip Tanggung Jawab Tunggal dan lebih baik untuk membagi ke kelas / file yang berbeda. Jika ada beberapa editor, kemungkinan besar akan tidak sinkron setelah beberapa saat, karena beberapa akan mengikuti ini, beberapa akan memfaktor ulang dan mengatur ulang kode, atau tindakan simpan dan format otomatis akan merusaknya.
f.carlsen
suara negatif: Saya setuju dengan @ f.carlsen. Jika Anda menyusun kelas Anda dengan komentar, kemungkinan besar Anda akan melanggar Prinsip Tanggung Jawab Tunggal .
schrieveslaach
Untuk pembenci: hubungi saya jika Java mendukung ekstensi kelas bergaya Swift tempat Anda dapat memisahkan implementasi antarmuka secara logis ke dalam beberapa bagian. Dan ya, kelas dapat mengimplementasikan beberapa antarmuka dengan baik pada waktu yang sama.
William Entriken

Jawaban:

66

Saya pribadi menggunakan pemisah baris 80 karakter, seperti ini:

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;
    }

}

Tentu saja, ini mungkin tampak berlebihan untuk POJO sekecil itu, tetapi percayalah, ini terbukti sangat berguna dalam beberapa proyek besar di mana saya harus menelusuri file sumber besar dan dengan cepat menemukan metode yang saya minati. Ini juga membantu memahami struktur kode sumber.

Di Eclipse, saya telah membuat satu set template kustom (Java -> Editor -> Template di dialog Preferensi Eclipse) yang menghasilkan bar tersebut, misalnya. - sepa (SEParator untuk Accessors) - sepp (SEParator untuk Properties) - sepc (SEParator for Constructors) - dll.

Saya juga memodifikasi template standar "kelas baru" (Java -> Gaya Kode -> Template Kode di layar Preferensi Eclipse)

Juga, ada plugin Eclipse lama yang disebut Coffee-bytes , yang meningkatkan cara Eclipse melipat bagian kode. Saya tidak tahu apakah itu masih berfungsi, tapi saya ingat seseorang dapat mendefinisikan zona lipat yang dapat dilipat dengan menambahkan komentar khusus, seperti // [SECTION] atau semacamnya. Mungkin masih berfungsi dalam revisi Eclipse baru-baru ini, jadi lihatlah.

Olivier Croisier
sumber
145

Untuk intellij / android studio ada solusi yang luar biasa.
Mulailah dengan:
//region Description
dan akhiri dengan:
//endregion

Pintasan untuk itu ada di menu yang dapat Anda buka dengan Command+ Alt+ T(Mac) atau Ctrl+ Alt+ T(Windows)

Anda juga dapat menambahkan garis Anda sendiri untuk pemisahan visual tambahan jika Anda membutuhkannya. Wilayah dapat dikontrak dan diperluas sesuka hati dengan tombol +/- seperti fungsi lainnya. Anda juga dapat menavigasi antar wilayah dengan Command+ Alt+ Period( Ctrl+ Alt+ Period)

Sumber .

Contoh:

//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
Andrey Petrov
sumber
Ini sangat berguna. Terima kasih Andrey. BTW Saya menggunakan tata letak pintasan keyboard eclipse dan menurut saya pintasan tersebut tidak berfungsi untuk saya, tetapi '// wilayah' berfungsi dengan baik
ThinkBonobo
2
Saya tidak melihat cara untuk ini muncul di tampilan struktur, jadi saya masih menggunakan anggota kosong palsu (bersama dengan menekan peringatan yang tidak digunakan).
Tom
1
apakah ada cara untuk menampilkan wilayah tersebut di Android Studio (tampilan Struktur)?
MiguelHincapieC
Link sudah mati; ini IntelliJ IDEA blog dapat menjadi referensi membantu. Itu juga menyebutkan item lipat gaya NetBeans <editor-fold ...> .
Franklin Yu
jawaban terbaik
Michał Ziobro
14

Eclipse mendefinisikan anotasi javadoc @category (gulir ke bagian bertanda "Dukungan kategori") yang memungkinkan pemfilteran menurut kategori dalam tampilan garis besar. Tidak persis seperti yang Anda inginkan. Saya terkejut tidak ada yang menulis plugin Eclipse yang menawarkan tampilan seperti tangkapan layar Anda.

basszero
sumber
Dalam kebanyakan tampilan java, bagaimanapun, dimungkinkan untuk memfilter anggota kelas menurut kategorinya, untuk menyembunyikan sebagai pengambil dan penyetel default, sebagai contoh.
Riduidel
tidak tahu mengapa saya tidak dapat menggunakan @category di Android Studio, apakah Anda tahu apa yang dapat saya lakukan untuk mencapai perilaku yang sama?
MiguelHincapieC
6

Saya juga suka itu ketika saya menggunakan xcode. Untuk gerhana saya menggunakan ctrl + o (garis besar cepat) untuk menavigasi melalui kelas Java.

kukudas
sumber
6

Menggunakan komentar / penanda yang tidak perlu dalam kode untuk membantu pekerjaan mungkin bukan praktik yang baik. Saya memiliki sedikit ide tentang xcode dan pengembangan java tetapi semua dukungan IDE utama menemukan anggota tanpa penanda khusus seperti gerhana menunjukkan metode dan anggota menggunakan tampilan garis besar yang dapat dipicu menggunakan ctrl+O, Intellij (yang saya lebih suka menggunakan lebih banyak di mac dan memiliki edisi komunitas juga) memiliki konsep garis besar yang sama dan dapat diakses dengan cepat menggunakan (ctrl + f12). Jadi maksud saya di sini adalah jangan menggunakan markup yang tidak perlu dalam kode karena semua IDE (atau setidaknya yang baik / waras) dapat melakukannya secara otomatis.

Teja Kantamneni
sumber
2
Setuju, penanda bagian hanya menambah kekacauan visual. Kelas Anda harus cukup fokus untuk membuat hal-hal ini tidak terjadi lagi.
Paul McKenzie
15
Tentu, tetapi memiliki metode yang dikelompokkan menjadi bagian logis dan ditandai dapat membantu memaksakan urutan visual pada apa yang seharusnya menjadi daftar metode datar. Kadang-kadang Anda tidak tahu persis metode mana yang Anda inginkan, dan senang menggunakan metode terkait sekaligus, dan memiliki beberapa gagasan bahwa Anda melihat sepenuhnya kode terkait.
Brian Rak
4

Sejauh yang saya tahu tidak ada spesifikasi yang didukung untuk mengelompokkan anggota kelas bersama. Anda dapat menggunakan konvensi komentar apa pun yang Anda suka, tetapi kemungkinan besar itu tidak akan didukung oleh alat apa pun.

Lebih baik mengelompokkan anggota terkait ke dalam kelas terpisah melalui warisan atau agregasi. Ini dianggap sebagai gaya OOP yang bagus

artemb
sumber
5
Memisahkan bagian kode tampaknya hanya mungkin dalam teori. Misalnya, ambil klien kelas dengan atribut seperti nama, dan kumpulan "faktur". Saya ingin sekali membagi ini menjadi bagian "nama" yang berisi pengambil / penyetel untuk nama dan bagian "faktur" yang berisi metode tambah / hapus untuk faktur. Tampaknya tidak praktis untuk memecahnya menjadi hierarki kelas yang hanya dapat menambahkan satu atribut per kelas, yaitu "NamedEntity", "NameAndAddressEntity", "Invoicable", ...
Frederik
3

Selain jawaban Andrey yang diberikan, untuk menggunakan // region // endregion, kami memasukkan [huruf BigAscii] [1] di bagian kode utama. Saat menggulir dengan cepat, itu sangat menonjol. Satu kelemahan dari pendekatan ini adalah saya tidak dapat mencarinya jadi Anda perlu menambahkan istilah pencarian tepat di bawah "spanduk" seperti yang saya lakukan di bawah ini.

Blockquote

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

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

Manabu Tokunaga
sumber
3

Saya akan menggunakan javadoc ; atau gunakan berikut ini sebagai "pemisah" sederhana (satu atau 3 baris):

/** RecyclerOnItemClickListener */

/** 
 * RecyclerOnItemClickListener
 */

Sehingga di IDE muncul dalam warna yang berbeda selain abu-abu yang tidak mencolok dikomentari.

superarts.org
sumber
2

IDE modern memungkinkan Anda untuk melihat kode Anda dengan berbagai cara, dan bahkan mengaturnya kembali. Eclipse bahkan memungkinkan Anda untuk melihat definisi kode tempat Anda memiliki kursor di panel lain.

Setiap pengaturan ulang otomatis kode Anda, akan menyebabkan markup tersebut rusak.

Jika Anda ingin mengelompokkan, pertimbangkan untuk menggabungkan barang-barang di kelas yang sama, dan barang-barang yang tidak dimiliki bersama di kelas yang berbeda.

Thorbjørn Ravn Andersen
sumber
0

Jika Anda bisa mengelompokkan metode Anda, lakukan kelas lain secara khusus untuk konsep yang ingin Anda tangkap di bagian. Silakan, membuat file gratis.

Lay González
sumber
-18

Untuk IntelliJ saya suka:

        public void ________________INIT__________________() {};

terlihat cantik dalam struktur file!

pengguna170317
sumber
3
Sepertinya ini solusi yang sangat buruk. Mengapa mendeklarasikan metode tambahan jika tujuan Anda adalah organisasi kode?
nsg
1
Itu untuk membuat seluruh file tersegmentasi dalam tampilan Struktur.
Tycho Pandelaar
1
ini hanya satu yang terlihat benar-benar di studio android, usulkan Anda sendiri sebagai jawaban dan saya akan menggunakan
user170317
13
Hal terburuk yang pernah saya lihat !! dan itu PUBLIK! o_O
Cocorico
3
Ini adalah satu-satunya jawaban yang muncul di tampilan struktur, dan berfungsi di berbagai IDE yang berbeda. Jadikan pribadi dan nyengir dan tahan, atau jangan gunakan jika Anda tidak menyukainya, tetapi jangan sembunyikan jawaban ini dari pembaca lain dengan memilihnya agar terlupakan.
Tom