Javaコメントでコードの論理セクションをマークする方法は?


92

Javaクラスは通常、論理的な「ブロック」に分割されます。これらのセクションをマークする規則はありますか?理想的には、それは主要なIDEによってサポートされるでしょう。

私は個人的にこの方法を使用しています:

//// Section name here ////

ただし、一部の編集者はこれに問題があるようです。

例として、Objective-Cコードでは、このメソッドを使用できます。

#pragma mark -
#pragma mark Section name here

これにより、XCodeのメニューは次のようになります。

代替テキスト


4
iOS開発者として、これは私がAndroid Studioを使い始めたときに私が最も見逃したものです
Chris Chen

1
反対投票:最近のIDEおよび言語では、これは不適切な習慣です。コードをセクション化する必要がある場合は、おそらくすでに単一責任の原則を破っているので、さまざまなクラス/ファイルに分割することをお勧めします。複数のエディターがある場合は、いずれにせよ、同期が取れなくなる可能性があります。一部のエディターはこれに従い、一部のエディターはコードをリファクタリングして再編成するか、自動保存とフォー​​マットのアクションによって中断します。
f.carlsen 2017年

反対投票:@ f.carlsenに同意します。コメントでクラスを構成すると、単一責任の原則を破る可能性が高くなります。
schrieveslaach

嫌いなこと:Javaがインターフェースの実装を異なるセクションに論理的に分離できるSwiftスタイルのクラス拡張をサポートするときに私に電話してください。そして、はい、クラスは同時に複数のインターフェースを実装するのにうまく機能します。
William Entriken

回答:


66

私は次のように80文字の行区切り文字を個人的に使用しています。

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

}

もちろん、これはそのような小さなPOJOには少々やり過ぎに思えるかもしれませんが、大きなソースファイルを参照して興味のあるメソッドをすばやく見つける必要があるいくつかの巨大なプロジェクトでは非常に役立つことがわかりました。ソースコードの構造。

Eclipseでは、これらのバーを生成する一連のカスタムテンプレート(Java->エディター-> Eclipseの[設定]ダイアログの[テンプレート])を作成しました。-sepa(アクセサ用のSEParator)-sepp(プロパティ用のSEParator)-sepc(コンストラクタ用のSEParator)-など

標準の「新しいクラス」テンプレートも変更しました(Java->コードスタイル-> Eclipse設定画面のコードテンプレート)

また、Eclipseがコードの一部を折り畳む方法を強化したCoffee-bytesと呼ばれる古いEclipseプラグインもあります。それでも機能するかどうかはわかりませんが、// [SECTION]などの特別なコメントを追加することで、任意の折りたたみ式ゾーンを定義できることを思い出しました。最近のEclipseリビジョンでも動作する可能性があるので、見てください。


144

intellij / android studioには素晴らしいソリューションがあります。
で始まる:
//region Description
で終わる:
//endregion

そのショートカットは、Command+ Alt+ T(Mac)またはCtrl+ Alt+ T(Windows)で開くことができるメニューにあります。

必要に応じて、独自の線を追加して視覚的に分離することもできます。リージョンは、他の関数と同様に+/-ボタンを使用して自由に縮小および拡張できます。Command+ Alt+ PeriodCtrl+ Alt+ Period)で地域間を移動することもできます

ソース

例:

//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。ところで、Eclipseキーボードショートカットレイアウトを使用していて、ショートカットが機能しないと思いますが、「//リージョン」はうまく機能します
ThinkBonobo

2
これが構造ビューに表示される方法がわからないので、偽の空のメンバーを(まだ未使用の警告を非表示にして)使用しています。
トム

1
Android Studio(構造ビュー)でそれらの領域を表示する方法はありますか?
MiguelHincapieC 2016年

リンクが停止しています。このIntelliJ IDEAブログは参考になるかもしれません。また、NetBeansのようなスタイルの折りたたみアイテム についても触れています<editor-fold ...>
フランクリンユー

ベストアンサー
ミハウジオブロ2018

14

Eclipseは、@ category javadocアノテーション(「Category support」とマークされたセクションにスクロール)を定義します。これにより、アウトラインビューでカテゴリによるフィルタリングが可能になります。まさにあなたが望むものではありません。スクリーンショットのようなビューを提供するEclipseプラグインを誰も作成したことがないのではないでしょうか。


ただし、ほとんどのJavaビューでは、例としてデフォルトのゲッターおよびセッターとして非表示にするために、クラスメンバーをカテゴリに従ってフィルタリングできます。
Riduidel 2010年

Android Studioで@categoryを使用できない理由はわかりませんが、同じ動作を実現するために何ができるか知っていますか?
MiguelHincapieC 2016

6

私はxcodeを使用していたときもそれが好きでした。Eclipseの場合、ctrl + o(クイックアウトライン)を使用してJavaクラスをナビゲートします。


6

コードで不要なコメント/マーカーを使用して作業を支援することは、良い方法ではないかもしれません。私はxcodeとJava開発についてほとんど考えていませんが、Eclipseのような特別なマーカーなしでメンバーを見つけるすべての主要なIDEのサポートはctrl+O、Intellij を使用してトリガーできるアウトラインビューを使用してメソッドとメンバーを示しています(これはMacでより多く使用することを好み、コミュニティ版も)は同じアウトラインの概念を持ち、(ctrl + f12)を使用してすばやくアクセスできます。したがって、ここでの私のポイントは、コード内で不要なマークアップを使用しないことです。これは、IDEがすべて自動的に実行できるためです。


2
そうですね、セクションマーカーは視覚的な混乱を増すだけです。あなたのクラスは、これらの事柄を無関係でないようにするために十分に集中するべきです。
ポールマッケンジー

15
もちろん、メソッドを論理セクションとマークオフセクションにグループ化すると、他の方法ではメソッドのフラットリストになるものに視覚的な順序を課すのに役立ちます。必要なメソッドが正確にわからない場合もあり、関連するメソッドを一度にすべて取得して、関連するコードの全範囲を確認しているとよいでしょう。
ブライアンラック2013

4

私の知る限り、クラスメンバーをグループ化するためのサポートされている仕様などはありません。好きなコメント規則を使用できますが、どのツールでもサポートされない可能性があります。

関連するメンバーを、継承または集約によって別のクラスにグループ化することをお勧めします。これは良いOOPスタイルと見なされます


5
コードのセクションを分割することは、理論的にのみ可能と思われます。たとえば、名前などの属性を持つクラスClientと、コレクション「invoices」を取り上げます。これを、名前のゲッター/セッターを含むセクション「名前」と、請求書の追加/削除メソッドを含むセクション「請求書」に分割できるようにしたいと思います。これらをクラスごとに1つの属性のみを追加できるクラス階層に分割することは実用的ではないようです。つまり、「NamedEntity」、「NameAndAddressEntity」、「Invoicable」、...
Frederik

3

提供されたAndreyの回答に加えて、// region // endregionを使用するには、主要なコードセクションに[BigAscii文字] [1]を挿入します。速くスクロールするとき、それは本当に際立っています。このアプローチの欠点の1つは、検索できないことです。そのため、以下のように「バナー」のすぐ下に検索語を追加する必要があります。

ブロッククォート

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

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


3

私はjavadocを使用します。または、以下を単純な「セパレータ」として使用します(単一または3行):

/** RecyclerOnItemClickListener */

/** 
 * RecyclerOnItemClickListener
 */

そのため、IDEでは、目立たないコメントのグレー以外の別の色で表示されます。


2

最新のIDEでは、さまざまな方法でコードを表示し、コードを再編成することもできます。Eclipseでは、カーソルを置いたコードの定義を別のパネルに表示することもできます。

コードを自動的に再編成すると、そのようなマークアップが機能しなくなります。

グループ化したい場合は、同じクラスに属しているものと、異なるクラスに属していないものを一緒に配置することを検討してください。


0

メソッドをクラスター化できる場合は、セクションでキャプチャーするその概念専用の別のクラスを実行します。ファイルの作成は無料です。


-19

IntelliJの場合、次のようにします。

        public void ________________INIT__________________() {};

ファイル構造がきれいに見えます!


3
これは非常に悪い解決策のようです。コード編成が目標であるのに、なぜ追加のメソッドを宣言するのですか?
nsg 2013年

1
それは、構造ビューでファイル全体をセグメント化することです。
Tycho Pandelaar 2013年

1
これは実際にAndroidスタジオで実際に見ている1つにすぎず、自分自身を回答として提案し、使用します
user170317

13
私が今まで見た中で最悪のもの!そしてそれは公共です!o_O
Cocorico

3
これは、構造ビューに表示される唯一の回答であり、さまざまなIDEで機能します。それを非公開にし、にやにや笑ってそれを負担するか、それが気に入らない場合は使用しないでください。
トム
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.