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

비추천 : @ f.carlsen에 동의합니다. 주석으로 수업을 구성하면 단일 책임 원칙 을 위반할 가능성이 큽니다 .
schrieveslaach

싫어하는 사람에게 : Java가 인터페이스 구현을 다른 섹션으로 논리적으로 분리 할 수있는 Swift 스타일 클래스 확장을 지원할 때 저에게 전화하십시오. 그리고 네, 클래스는 동시에 여러 인터페이스를 구현할 수 있습니다.
William Entriken 19-07-12

답변:


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-> Editor-> Templates in Eclipse 's Preferences dialog)을 만들었습니다. -sepa (접근 자용 SEParator)-sepp (속성 용 SEParator)-sepc (생성자 용 SEParator)-등

또한 표준 "새 클래스"템플릿 (Java-> 코드 스타일-> Eclipse 환경 설정 화면의 코드 템플릿)을 수정했습니다.

또한 Coffee-bytes 라는 이전 Eclipse 플러그인이 있는데, 이는 Eclipse가 코드의 일부를 접는 방식을 향상 시켰습니다. 여전히 작동하는지는 모르겠지만 // [SECTION] 등의 특수 주석을 추가하여 임의의 폴더 블 영역을 정의 할 수 있다는 것을 기억했습니다. 최근 Eclipse 개정판에서 여전히 작동 할 수 있으므로 살펴보십시오.


144

intellij / android studio에는 놀라운 솔루션이 있습니다.
시작 :
//region Description
및 끝 :
//endregion

단축키는 Command+ Alt+ T(Mac) 또는 Ctrl+ Alt+ T(Windows)로 열 수있는 메뉴에 있습니다.

필요한 경우 시각적 분리를 추가하기 위해 고유 한 선을 추가 할 수도 있습니다. 영역은 다른 기능과 마찬가지로 +/- 버튼으로 자유롭게 축소 및 확장 할 수 있습니다. Command+ Alt+ Period( Ctrl+ 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 감사합니다. BTW 저는 이클립스 키보드 바로 가기 레이아웃을 사용하고 있는데 바로 가기가 저에게 적합하지 않다고 생각하지만 '// 영역'은 훌륭하게 작동합니다
ThinkBonobo

2
구조보기에 이것이 표시되는 방법이 없으므로 여전히 가짜 빈 멤버를 사용하고 있습니다 (사용하지 않는 경고 억제와 함께).
Tom

1
Android Studio (구조보기)에서 해당 지역을 표시하는 방법이 있습니까?
MiguelHincapieC 2011

링크가 죽었습니다. 이 IntelliJ IDEA 블로그 는 유용한 참고 자료가 될 수 있습니다. 또한 NetBeans와 유사한 스타일의 접기 항목에 대해서도 언급 합니다<editor-fold ...> .
Franklin Yu

최선의 답
마이클 Ziobro

14

Eclipse는 개요보기에서 카테고리별로 필터링 할 수 있는 @category javadoc 어노테이션 ( "카테고리 지원"으로 표시된 섹션으로 스크롤)을 정의합니다 . 정확히 원하는 것이 아닙니다. 아무도 당신의 스크린 샷과 같은보기를 제공하는 Eclipse 플러그인을 작성하지 않았다는 것이 놀랍습니다.


그러나 대부분의 Java 뷰에서는 예를 들어 기본 getter 및 setter로 숨기기 위해 범주에 따라 클래스 멤버를 필터링 할 수 있습니다.
Riduidel 2010 년

Android Studio에서 @category를 사용할 수없는 이유를 모르겠습니다. 동일한 동작을 수행하기 위해 무엇을 할 수 있는지 알고 있습니까?
MiguelHincapieC

6

나는 xcode를 사용할 때도 그것을 좋아했습니다. 이클립스의 경우 ctrl + o (빠른 개요)를 사용하여 Java 클래스를 탐색합니다.


6

작업을 돕기 위해 코드에서 불필요한 주석 / 마커를 사용하는 것은 좋은 습관이 아닐 수 있습니다. xcode 및 Java 개발에 대한 아이디어는 거의 없지만 eclipse와 같은 특수 마커가없는 구성원을 찾는 모든 주요 IDE의 지원은 ctrl+O, Intellij를 사용하여 트리거 할 수있는 개요보기를 사용하여 메서드와 구성원을 보여줍니다 (Mac에서 더 많이 사용하고 커뮤니티 에디션도) 동일한 개요 개념을 가지며 (ctrl + f12)를 사용하여 빠르게 액세스 할 수 있습니다. 그래서 여기서 내 요점은 코드에서 불필요한 마크 업을 사용하지 않는다는 것입니다. 모든 (또는 최소한 좋은 / 정상적인) IDE가 자동으로 할 수 있기 때문입니다.


2
동의합니다. 섹션 표식은 시각적 혼란을 더합니다. 당신의 수업은 이러한 것들을 무관하게 만들기에 충분히 집중되어야합니다.
Paul McKenzie

15
물론입니다.하지만 메소드를 논리적 섹션과 마크 오프 섹션으로 그룹화하면 단순한 메소드 목록에 시각적 순서를 적용하는 데 도움이 될 수 있습니다. 어떤 방법을 원하는지 정확히 알지 못하는 경우가 있으며, 관련 방법을 한 번에 모두 가져 와서 관련 코드의 전체 범위를보고 있다는 생각을 갖는 것이 좋습니다.
Brian Rak 2013 년

4

내가 아는 한 클래스 멤버를 함께 그룹화하는 데 지원되는 사양은 없습니다. 원하는 주석 규칙을 사용할 수 있지만 어떤 도구에서도 지원되지 않을 가능성이 있습니다.

상속 또는 집계를 통해 관련 멤버를 별도의 클래스로 그룹화하는 것이 좋습니다. 이것은 좋은 OOP 스타일로 간주됩니다.


5
코드 섹션을 나누는 것은 이론적으로 만 가능해 보입니다. 예를 들어, 이름과 같은 속성이있는 클래스 Client 및 콜렉션 "invoices"를 가져 오십시오. 나는 이것을 이름에 대한 getter / setter를 포함하는 섹션 "name"과 송장에 대한 추가 / 제거 방법을 포함하는 "invoices"섹션으로 나눌 수 있기를 바랍니다. "NamedEntity", "NameAndAddressEntity", "Invoicable", ...과 같이 클래스 당 하나의 속성 만 추가 할 수있는 클래스 계층 구조로 이들을 분할하는 것은 비현실적인 것 같습니다.
Frederik

3

제공된 Andrey의 답변 외에도 // region // endregion을 사용하기 위해 주요 코드 섹션에 [BigAscii letters] [1]를 삽입합니다. 빠르게 스크롤하면 정말 눈에.니다. 이 접근 방식의 한 가지 단점은 검색 할 수 없으므로 아래 에서처럼 "배너"바로 아래에 검색어를 추가해야한다는 것입니다.

인용구

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

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


3

나는 javadoc 을 사용할 것이다 ; 또는 다음을 간단한 "구분자"로 사용하십시오 (단일 또는 3 줄).

/** RecyclerOnItemClickListener */

/** 
 * RecyclerOnItemClickListener
 */

따라서 IDE에서는 눈에 띄지 않는 주석 처리 된 회색 이외의 다른 색상으로 나타납니다.


2

최신 IDE를 사용하면 다양한 방식으로 코드를보고 재구성 할 수도 있습니다. Eclipse를 사용하면 다른 패널에서 커서가있는 코드의 정의를 볼 수도 있습니다.

코드를 자동으로 재구성하면 이러한 마크 업이 중단됩니다.

그룹화를 원하면 같은 클래스에 속한 것들을 모으고 서로 다른 클래스에 속하지 않는 것들을 모으는 것을 고려하십시오.


0

메소드를 클러스터링 할 수있는 경우 섹션에서 캡처하려는 해당 개념에 대해 특별히 다른 클래스를 수행하십시오. 계속해서 파일을 만드는 것은 무료입니다.


-19

IntelliJ의 경우 다음과 같이합니다.

        public void ________________INIT__________________() {};

파일 구조가 예쁘게 보입니다!


3
이것은 매우 나쁜 해결책처럼 보입니다. 목표가 코드 구성인데 추가 메서드를 선언하는 이유는 무엇입니까?
nsg 2013-10-15

1
이는 전체 파일을 구조보기에서 분할하는 것입니다.
Tycho Pandelaar 2013

1
이것은 정말 안드로이드 스튜디오에서 보이는 유일한 것입니다, 답변으로 u 자신을 제안하고 사용할 것입니다
user170317

13
내가 본 최악의 것 !! 그리고 그것은 PUBLIC입니다! o_O
Cocorico 2014

3
이것은 구조보기에 표시되는 유일한 답변이며 다른 IDE에서 작동합니다. 비공개로 만들고 웃고 참거나 마음에 들지 않으면 사용하지 마십시오. 그러나이 답변을 망각으로 내림으로써 다른 독자들로부터이 답변을 숨기지 마십시오.
Tom
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.