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.