구글 자바 스타일 가이드

1

이 문서를 제공합으로 완전한 정의는 구글의 코딩 표준 forsource 코드에서 Java™프로그래밍 언어입니다. Java 소스 파일은 여기에 규칙을 준수하는 경우에만 inGoogle 스타일로 설명됩니다.

좋아하는 다른 프로그래밍 스타일 가이드를,이 문제를 덮 범위뿐만 아니라 미적 문제 offormatting 지만,다른 유형의 규칙 또는 코딩 표준뿐만 아니라. 그러나,이 documentfocuses 에 주로 반드시 지켜야 하는 규칙을 따라 우리가 보편적으로,andavoids 조언을 제공하지 않는 분명히 집행(는지 여부에 의해 인간 또는 공구).

1.1 용어 notes

이 문서에서,그렇지 않을 명확히

  1. 클래스라는 용어가 사용되는 까지 입을 의미하는”일반”class,enum 클래스,인터페이스 또는 주석 유형(@interface).
  2. 용어는 회원(클래스)를 사용한 포함하는 것을 의미가 중첩 클래스,분야,방법,또는 생성자; 즉,이니셜 라이저와 주석을 제외한 클래스의 모든 최상위 내용입니다.
  3. 주석이라는 용어는 항상 구현 주석을 나타냅니다. 우리는”documentation comments”라는 문구를 사용하지 않고 대신”Javadoc”이라는 일반적인 용어를 사용합니다.”

기타”용어 노트”가 문서 전체에 가끔 나타납니다.

1.2 가이드 노트

이 문서의 예제 코드는 비 규범 적입니다. 즉,예제가 Google 스타일로 제공되는 동안 코드를 나타내는 유일한 세련된 방법을 설명하지 못할 수도 있습니다. 예제에서 수행 된 선택적 서식 선택은 규칙으로 적용되어서는 안됩니다.

2 소스 파일에 기초

2.1 파일 이름

소스 파일의 이름으로 구성됩의 대소문자를 구분의 이름이 최고 수준의 클래스가 포함(의가 있는 정확하게 one),plus.javaextension.

2.2 파일 인코딩:UTF-8

소스 파일은 UTF-8 로 인코딩됩니다.

2.3 특수 문자

2.3.1 공백 문자

고객께서는 라인 터미네이터 시퀀스,ASCII 수평 spacecharacter(0x20)은 단백 문자는 appearsanywhere 소스 파일에서. 이것은 다음을 의미합니다:

  1. All other whitespace characters in string and character literals are escaped.
  2. Tab characters are not used for indentation.

2.3.2 Special escape sequences

For any character that has a special escape sequence(\b\t\n\f\r\"\' and\\), that sequenceis used rather than the corresponding octal(e.g. \012) or Unicode(e.g. \u000a)이스케이프.

2.3.3 비-ASCII 문자

에 대한 유보된 조치의 잔존 비-ASCII 문자나 실제의 유니코드 문자를(예를 들어\u221e)를 사용한다. 선택은 다음에 만 달려 있습니다.유니 코드가 이스케이프되지만외부 문자열 리터럴 및 주석은 강력하게 권장되지 않습니다.

팁:에서는 유니코드를 탈출한 경우,때로는 경우에도 actualUnicode 문자를 사용 설명하는 의견 매우 도움이 될 수 있습니다.

예:

토론
String unitAbbrev = "μs"; 제일:완벽하게 분명하지 않고 있습니다.
String unitAbbrev = "\u03bcs"; // "μs" 허용되지만 아무 이유도 없습니다.
String unitAbbrev = "\u03bcs"; // Greek letter mu, "s" 허용되지만 어색하고하는 경향이 실수입니다.
String unitAbbrev = "\u03bcs"; 가난한 독자는 무슨 생각이다.나는 이것이 어떻게 작동하는지 잘 모르겠습니다.: 인쇄 할 수없는 문자에는 이스케이프를 사용하고 필요한 경우 주석을 달 수 있습니다.

정말로 코드를 적게 읽을 수 있는 단순히 두려움 thatsome 프로그램을 처리할 수도 있습 non-ASCII 문자니다. 그런 일이 발생해야한다면프로그램이 깨져서 고정해야합니다.

3 소스 파일 구조

소스 파일은 순서대로 구성됩니다:

  1. 사용권 또는 저작권 정보가 존재하는 경우,
  2. 패키지 문
  3. 가져올 문
  4. 정확히 하나의 최상위 class

정확히 하나의 빈 줄을 분리하고 각 섹션에서는 존재합니다.

3.1 권 또는 저작권 정보가 존재하는 경우,

경우 라이센스 또는 저작권 정보 그리고 파일에,그것은 여기에 속한다.

3.2 패키지 문

패키지 문은 줄 바꿈이 아닙니다. 열 제한(섹션 4.4,열 제한:100)은 패키지 문에 적용되지 않습니다.

3.3 가져 오기 문

3.3.1 와일드 카드 가져 오기 없음

와일드 카드 가져 오기(정적 또는 기타)는 사용되지 않습니다.

3.3.2 줄 바꿈 없음

Import 문은 줄 바꿈이 아닙니다. 열 제한(섹션 4.4,열 제한:100)은 importstatements 에 적용되지 않습니다.

3.3.3 순서 및 간격

수입은 다음과 같이 정렬됩니다.

  1. 단일 블록의 모든 정적 수입.
  2. 단일 블록의 모든 비 정적 가져 오기.

정적 및 비 정적 가져 오기가 모두있는 경우 단일 빈 줄이 두 블록을 분리합니다. Import 문 사이에는 다른 빈 줄이 없습니다.

각 블록 내에서 가져온 이름은 ASCII 정렬 순서로 나타납니다. (참고:이것은’이후 ascii 정렬 순서에있는 import 문과 동일하지 않습니다.’전에 정렬’;’.)

3.3.4 클래스에 대한 정적 가져 오기 없음

정적 가져 오기는 정적 중첩 클래스에 사용되지 않습니다. 그들은정상적인 수입.

3.4 클래스 선언

3.4.1 정확히 하나의 최고 수준의 클래스를 선언

각 최상위 수준 클래스가 있는 원본 파일에 있습니다.

3.4.2 클래스 내용 순서

클래스의 멤버 및 이니셜 라이저에 대해 선택한 순서는 반환 가능성에 큰 영향을 줄 수 있습니다. 그러나,그것을하는 방법을위한 단 하나 정확한 조리법이 없다;다른 클래스는 다른 방식으로 내용을 정렬 할 수 있습니다.

중요한 것은 각 클래스를 사용하여 논리적 순서를 가지는 itsmaintainer 설명할 수 있는 경우 물었다. 예를 들어,새로운 방법은 그냥 습관적으로 추가되는 줄 끝 클래스로 생성하는”연대기”추가된 날을 주문하지 않은,logicalordering.

3.4.2.1 과부하: 적 split

경우 클래스는 여러 생성자,또는 여러 방법으로 동일한 이름,이러한 appearsequentially,다른 코드를 사이에서(심지어 개인 멤버).

4 서식

용어 참고:블록 유사 구조는 클래스,메소드 또는 생성자의 본문을 나타냅니다. 4.8.3.1 절 onarray initializers 에 의해,임의의 배열 initializermay 는 선택적으로 블록과 같은 구조 인 것처럼 취급 될 수있다.

4.1 중괄호

4.1.1 중괄호를 사용되는 옵션

중괄호를 사용되는ifelsefordowhile문 때에도 thebody 이 비어 있거나 포함되어 단 하나의 문입니다.

4.1.2 이 비어 있지 않은 블록:K&R 스타일

중괄호에 따라 커과 리치 스타일(“이집트 괄호”)을 위한 비어 있지 않은 블록과 블록과 같은 구조

  • 아무선하기 전에 개방 버팀대입니다.
  • 오프닝 버팀대 후에 줄 바꿈.
  • 닫는 중괄호 전에 줄 바꿈.
  • 줄 바꿈된 후 닫기 버팀대하는 경우에만,그 중괄호를 종료하는 문 또는 종료 몸의 방법을 생성자,또는 라는 클래스입니다. 예를 들어else또는 쉼표 뒤에 오는 경우 중괄호 뒤에 줄 바꿈이 없습니다.

예:

return () -> { while (condition()) { method(); }};return new MyClass() { @Override public void method() { if (condition()) { try { something(); } catch (ProblemException e) { recover(); } } else if (otherCondition()) { somethingElse(); } else { lastThing(); } }};

4.8.1 절 열거 형 클래스에 대한 몇 가지 예외가 있습니다.

4.1.3 빈 블록: 할 수 있는 간결한

빈 블록 또는 블록과 같은 구성에 있을 수 있습 K&R 타(으로 설명한 추가로,우 4.1.2). 양자택일로,그것을 닫을 수 있 immediatelyafter 그것은 열이 없는 자 또는 라인에서 휴식 사이에({})지 않는 한 그것의 일부입하여 여러 블록 statement(중 하나는 바로 여러 블록을 포함:if/elsetry/catch/finally).

예:

 // This is acceptable void doNothing() {} // This is equally acceptable void doNothingElse() { }
 // This is not acceptable: No concise empty blocks in a multi-block statement try { doSomething(); } catch (Exception e) {}

4.2 블록 들여 쓰기: +2 공백

새 블록 또는 블록 유사 구조체를 열 때마다 들여 쓰기가 2 개씩 증가합니다. 블록이 끝나면 들여 쓰기가 이전 들여 쓰기 수준으로 돌아갑니다. 들여 쓰기 수준블록 전체에 걸쳐 코드와 주석 모두에 적용됩니다. (섹션 4.1.2,Nonempty 블록의 예를 참조하십시오:K&R 스타일.)

4.3 한 줄에 하나의 명령문

각 명령문 다음에 줄 바꿈이옵니다.

4.4 열 제한:100

Java 코드의 열 제한은 100 자입니다. “문자”는 모든 유니 코드 코드 포인트를 의미합니다.아래에 언급 된 경우를 제외하고,이 제한을 초과하는 모든 라인은 inSection4.5,Line-wrapping 에 설명 된대로 line-wrapping 이어야합니다.

각 유니 코드 코드 포인트는 표시 너비가 크거나 작더라도 하나의 문자로 계산됩니다. 는 경우,예를 들어,usingfullwidth 문자,당신이 선택할 수 있습니다 랩을 선보다 이전 이 규칙이 엄격히 필요합니다.

예외:

  1. 열 제한을 준수 할 수없는 행(예:Javadoc 의 긴 URL 또는 긴 JSNI 메소드 참조).
  2. packageimport문(섹션 3.2 패키지 문 및 3.3 가져 오기 문 참조).
  3. 쉘에 잘라내어 붙여 넣을 수있는 주석의 명령 행.

4.5 라인-포장

용어를 참고:때 수 있는 코드 그렇지 않으면 legallyoccupy 하나의 라인이 나누어 여러 라인으로,이 활동은 calledline 감싸고 있다.

모든 상황에서 줄 바꿈하는 방법을 정확하게 보여주는 포괄적이고 결정 론적 인 공식은 없습니다. 매우 자주 동일한 코드 조각을 줄 바꿈하는 몇 가지 유효한 방법이 있습니다.

참고:일반적인 이유로 줄바꿈을 avoidoverflowing 열한 제한,심지어 코드는 사실에 맞게 열한 아마 라인-포장에는 저자의 재량에 따라 결정됩니다.

팁:메서드 또는 로컬 변수를 추출하면 줄 바꿈이 필요없는 문제를 해결할 수 있습니다.

4.5.1 여기서

줄 바꿈의 주요 지시어는 다음과 같습니다. 또한:

  1. 비 할당 연산자에서 줄이 끊어지면 나누기가 기호 앞에옵니다. (이것은 C++및 JavaScript 와 같은 다른 언어에 대해 Google 스타일에서 사용되는 것과 동일한 관행이 아니라는 점에 유의하십시오.)
    • 이것은 또한 적용은 다음과 같은”운영자”와 같은 기호:
      • dot 구분(.)
      • 두 개의 콜론의 방법을 참조(::)
      • 앰퍼샌드 유형에 바인딩(<T extends Foo & Bar>)
      • 파이프 catch 블록에(catch (FooException | BarException e)).
  2. 경우 라인은 깨진에 할당 운영자는 휴식은 일반적으로 제공 후에는 상징이지만,어느 방법이 허용됩니다.
    • 이것은 enhancedfor(“foreach”)문에서”할당 연산자와 같은”콜론에도 적용됩니다.
  3. 방법 또는 생성자의 이름을 부착되어 있 열기는 괄호(()다음과 같습니다.
  4. 쉼표(,)는 앞에 오는 토큰에 첨부 된 상태로 유지됩니다.
  5. 라인은 깨지지 않도록 옆에서 화살표 람다는 것을 제외하고,휴식을 올 수 있습니다 후 즉시 화살표된 경우에는 람다로 구성되어 있는 단일 unbraced 표현이다. 예제:
    MyLambda<String, Long, Object> lambda = (String label, Long value, Object obj) -> { ... };Predicate<String> predicate = str -> longExpressionInvolving(str);

참고:기본 목표는 줄 바꿈이 있 clearcode,반드시 코드에 맞는 가장 작은 수 있습니다.

4.5.2 연속 줄 들여 쓰기 최소+4 공백

줄 바꿈시 첫 번째 줄(각 연속 줄)이후의 각 줄은 원래 줄에서 최소+4 로 들여 쓰기됩니다.

여러 연속 줄이있을 때 들여 쓰기는+4asdesired 이상으로 다양 할 수 있습니다. 일반적으로 두 개의 연속 줄은 구문 적으로 평행 한 요소가있는 경우에만 동일한 들여 쓰기 수준을 사용합니다.

섹션 4.6.3 에서 수평 정렬 addressesthe 낙심을 사용하는 방법은 변수의 번호 공간을 맞춰 특정 토큰 withprevious 라인입니다.

4.6 공백

4.6.1 수직에 공백

단일 빈 선상가 나타납니다.

  1. 사이 연속된 구성원 또는 이니셜라이저의 클래스: 필드,생성자,메소드,중첩 클래스,정적 이니셜 라이저 및 인스턴스 이니셜 라이저.
    • 예외:두 개의 연속 필드 사이의 빈 줄(그 사이에 다른 코드가 없음)은 선택 사항입니다. 이러한 빈 줄은 필드의 논리적 그룹화를 만드는 데 필요에 따라 사용됩니다.
    • 예외:열거 형 상수 사이의 빈 줄은 4.8.1 절에서 다룹니다.
  2. 이 문서의 다른 섹션(예:섹션 3,소스 파일 구조 및 섹션 3.3,가져 오기 문)에서 필요합니다.

단일 빈 줄이 나타날 수도 있습니다 어디 그것은 가독성을 향상시키는,예를 들어 betweenstatements 을 구성하는 코드를 논리적으로 하위 섹션이 있습니다. 첫 번째 멤버 또는 이니셜 라이저 앞의 빈 줄 또는 클래스의 마지막 멤버 또는 이니셜 라이저 뒤에는 권장되지 않습니다.

여러 개의 연속적인 빈 줄이 허용되지만 절대로 필요하지 않습니다(또는 권장).

4.6.2 수평 공백

을 넘어 어디에 필요한 언어 또는 다른 스타일의 규칙 외에도 리터럴 의견 andJavadoc,단일 ASCII 공백도 나타나는 다음과 같은 장소에서만 있습니다.

  1. 분리하는 모든 예약어,같은ifforcatch()그 다음에는 선
  2. 분리하는 모든 예약어, 과 같은elsecatch})앞에 있는 그것에는 선
  3. 기 전에 열려 있는 모든 중괄호({)과 함께,두 가지 예외가:
    • @SomeAnnotation({a, b})(아 공간을 사용)
    • String x = {{"foo"}};{{,에 의해 아래 항목 8)
  4. 의 양면에 어떤 이진 또는 원 연산자입니다. 이것은 또한 적용은 다음과 같은”운영자”와 같은 기호:
    • 앰퍼샌드에 결합하는 유형이 바운드:<T extends Foo & Bar>
    • 관한 catch 블록 처리하는 예외를 여러 개: catch (FooException | BarException e)
    • 콜론(:for(“foreach”)문
    • 에서 화살표 lambda expression: (String str) -> str.length()

    지만

    • 두 개의 콜론(::Object::toString
    • dot 구분(.object.toString()
  5. ,:;))의 캐스팅
  6. 의 양쪽 모두에서 더블 플래시(//) 시작하는 end-of-선 comment. 여기서 여러 공백은 허용되지만 필수는 아닙니다.
  7. 사 유형의 변수를 선언: List<String> list
  8. 선택 단지 내에 모두 중괄호 배열의 이니셜라이저
    • new int {5, 6}new int { 5, 6 }은 모두 유효
  9. 사이 형식 주석과....

이 규칙은 라인의 시작 orend 에서 추가 공간을 요구하거나 금지하는 것으로 해석되지 않습니다.

4.6.3 수평 정렬:절대로 필요하지 않음

용어 참고: 수평 정렬은 thepractice 를 추가하는 변수의 번호를 추가적인 공간에 코드를 목표로 makingcertain 토큰 표시 직접 아래에 다른 특정 토큰에 대 라인입니다.

이 연습은 허용되지만 Google 스타일에서는 절대로 필요하지 않습니다. 그것은 이미 사용 된 장소에서 수평 정렬을 유지하는 데 필요합니다.

여기에 예고 없이 정렬,다음 사용하여 정렬:

private int x; // this is fineprivate Color color; // this tooprivate int x; // permitted, but future editsprivate Color color; // may leave it unaligned

팁:정렬을 원조할 수 있는 가독성이지만,그것은 문제를 만드 forfuture 유지 보수입니다. 한 줄만 만져야하는 미래의 변화를 생각해보십시오. 이 변경 사항은 이전에 기쁘게 서식을 엉망으로 만들 수 있으며 허용됩니다. 더 자주 코더(아마도 당신)가 인근 라인의 공백을 조정하도록 지시하고 계단식 일련의 재 형식화를 가능하게합니다. 그 한 줄의 변화는 이제”폭발 반경.”이 수 있는 최악의 결과에 무의미 busywork 지만,그것은 여전히 최고의 손상 버전 historyinformation,속도가 느려집 검토 및 악화시키고 병합 충돌이 발생합니다.

4.7 그룹화 괄호: 추천

선택적인 그룹화 괄호는 생략한 경우에만 저자의 검토에 동의가 있는 noreasonable 기회가 코드의 잘못 해석될지 않고 그들도 그들이 만든 codeeasier 읽을 수 있습니다. 그것은 합리적인다고 추정하는 모든 독자가 전체 Javaoperator 우선 순위 테이블을 기억하고 있습니다.

4.8 특정 구조

4.8.1 열거래

후 각각의 쉼표는 다음과 같이 enum 일정한 줄 바꿈 선택 사항입니다. 추가 블랭크 라인(일반적으로 단 하나)도 허용됩니다. 이것은 하나의 가능성입니다:

private enum Answer { YES { @Override public String toString() { return "yes"; } }, NO, MAYBE}

enum 클래스와는 방법이 없습니다리고 아무 문서에서 해당 상수도 선택적으로 formattedas 경우에는 배열을 이니셜라이저(섹션 참조 4.8.3.1onarray 이니셜라이저).

private enum Suit { CLUBS, HEARTS, SPADES, DIAMONDS }

열거 형 클래스는 클래스이므로 클래스 서식 지정을위한 다른 모든 규칙이 적용됩니다.

4.8.2 변수 선언

4.8.2.1 하나의 변수를 선언 당

모든 변수 선언(분야 또는 지역)선언을 하나만 변수 선언 같은int a, b;는 사용되지 않습니다.

예외: 여러 변수 선언은for루프의 헤더에서 허용됩니다.

4.8.2.2 필요할 때 선언

로컬 변수는 containingblock 또는 block-like construct 의 시작에서 습관적으로 선언되지 않습니다. 대신 로컬 변수는 범위를 최소화하기 위해(이유 내에서)사용되는 지점에 가깝게 선언됩니다. 지역 변수 선언은 일반적으로인티어 라이저 또는 선언 직후에 초기화됩니다.배열 이니셜 라이저 4.8.3 배열

4.8.3.1 배열 이니셜 라이저: “block-like”

모든 배열 이니셜 라이저는”block-likeconstruct”인 것처럼 선택적으로 포맷 될 수 있습니다.”예를 들어,다음과 같은 모든 유효한(아 exhaustivelist):

new int { new int { 0, 1, 2, 3 0,} 1, 2,new int { 3, 0, 1, } 2, 3} new int {0, 1, 2, 3}
4.8.3.2 없는 C 스타일 배열 선언

대괄호 형태의 부분은 형식이 아닌 변수:String argsString args.

4.8.4 스위치 문

용어 참고:aswitch 블록의 중괄호 안에는 하나 이상의 문 그룹이 있습니다. 각각의 문은 그룹으로 구성됩 하나 이상의 전환이블(중case FOO:default:)다음,하나 이상의 문의(또는,대한 마지막 문에 그룹,영이나 더 진술).

4.8.4.1 들여 쓰기

다른 블록과 마찬가지로 스위치 블록의 내용은 들여 쓰기+2 입니다.

스위치 레이블 뒤에 줄 바꿈이 있고 들여 쓰기 수준이+2 로 증가하면 블록이 열렸을 때 정확하게 나타납니다. 다음 스위치 레이블은 블록이 닫힌 것처럼 이전 들여 쓰기로 돌아갑니다.

4.8.4.2 폴 스루: 댓글

스위치 블록 내에서,각각의 문은 그룹 중 하나가 갑자기 종료(함께breakcontinuereturn또는 버려진 제외)또는 표시 commentto 을 나타내는 실행이나 계속될 수 있습으로 다음 문장 그룹입니다. Fall-through 의 아이디어를 전달하는 Anycomment 는 충분합니다(일반적으로// fall through). 이 특별한 주석은 필요하지 않습니다.스위치 블록의 마지막 명령문 그룹. 예시:

switch (input) { case 1: case 2: prepareOneOrTwo(); // fall through case 3: handleOneTwoOrThree(); break; default: handleLargeNumber(input);}

case 1:후에 주석이 필요하지 않음을 알 수 있습니다.

4.8.4.3default케이스는 현재

각 스위치의 문이 포함되어 있defaultstatementgroup 는 경우에도,그것은 포함하지 않 코드입니다.

제외 switch 문는enum유형 omitthedefault문는 경우,그룹 includesexplicit 경우는 모든 가능한 값의 유형이 있습니다. 이렇게하면 Ide 또는 다른 staticanalysis 도구가 어떤 경우를 놓친 경우 경고를 발행 할 수 있습니다.

4.8.5 주석

주석에 적용하는 클래스 메소드 또는 생성자를 나타나 후 즉시 설명서를 참조하십시오 블록,그리고 각각의 주석에 나와 자신의 라인(즉,하나 annotationper line). 이러한 줄 바꿈은 줄 바꿈(Section4.5,줄 바꿈)을 구성하지 않으므로 들여 쓰기 수준이 증가하지 않습니다. 예:

@Override@Nullablepublic String getNameIfPresent() { ... }

예외: 하나의 매개 변수가 없는 annotationmay 대신에 함께 표시의 첫 번째 줄을 서명은,예를 들어,

@Override public int hashCode() { ... }

주석에 적용 분야도 후 즉시 나타나는 문서를 차단하지만,이 경우,여러 주석(가능 매개 변수)나열될 수 있습니다 같은 줄에,예를 들어:

@Partial @Mock DataLoader loader;

특별한 규칙은 없 포맷에 대한 주석에서 매개변수,지역변수,또는 유형입니다.

이 섹션에서는 구현 주석을 다룹니다. Javadoc 은 별도로 해결됩니다.섹션 7,Javadoc.

모든 줄 바꿈은 임의의 공백 뒤에 구현 주석이 선행 될 수 있습니다.이러한 주석은 공백이 아닌 선을 렌더링합니다.

4.8.6.1 블록 코멘트 스타일

블록 코멘트가 들여와 같은 수준에서 주변의 코드입니다. 그들은/* ... */// .../* ... */**이전에 라인입니다.

/* * This is // And so /* Or you can * okay. // is this. * even do this. */ */

주석은 별표 또는 다른 문자로 그려진 상자로 묶이지 않습니다.

팁:여러 줄 주석을 작성할 때 자동 코드 포맷터를 원할 경우/* ... */// ...스타일 주석 블록에서 줄을 다시 줄 바꿈하지 않습니다.

4.8.7 수정

클래스와 멤버 수정,존재 하는 경우에 나타나 orderrecommended Java 언어 Specification:

public protected private abstract default static final transient volatile synchronized native strictfp

4.8.숫자 8 리터럴

longL접미사,neverlowercase(과 혼동을 피하기 위해 자리13000000000L3000000000l.

5

5.1 규칙은 모든 일반적인 식별자

식별자만 사용이 ASCII 문자와 숫자,그리고 소수의 경우 아래에서 설명,밑줄. 따라서 각 유효한 식별자 이름은 정규 표현식\w+와 일치합니다.

In Google Style, special prefixes or suffixes are not used. For example, thesenames are not Google Style: name_mNames_name and kName.

5.2 Rules by identifier type

5.2.1 Package names

Package names are all lowercase, with consecutive words simply concatenated together (nounderscores). For example, com.example.deepspace, notcom.example.deepSpace orcom.example.deep_space.

5.2.2 Class names

Class names are written in UpperCamelCase.

클래스 이름은 일반적으로 명사 또는 명문이다. 예를 들어CharacterImmutableList입니다. 인터페이스 이름을 수도 있습 명사 ornoun 구(예를 들어,List)할 수 있지만,때때로 beadjectives 또는 형용사구,대신(예를 들어,Readable).

주석 유형의 이름을 지정하기위한 특정 규칙이나 잘 정립 된 규칙이 없습니다.

테스트 클래스는 테스트중인 클래스의 이름으로 시작하여 endingwithTestHashTestHashIntegrationTest입니다.

5.2.3 메소드 이름

메소드 이름은 lowerCamelCase 에 기록됩니다.

메소드 이름은 일반적으로 동사 또는 동사 구입니다. 예를 들어sendMessagestop입니다.

밑줄은 각 구성 요소가 lowerCamelCase 에 기록 된 thename 의 논리 구성 요소를 분리하기 위해 JUnit 테스트 메소드 이름에 나타날 수 있습니다.하나는 일반적인 패턴은<methodUnderTest>_<state>pop_emptyStack. 테스트 메소드의 이름을 지정하는 정확한 방법은 없습니다.

5.2.4 상수 이름

상수 이름은CONSTANT_CASE:모든 uppercaseletters 를 사용하며 각 단어는 다음 단어에서 단일 밑줄로 구분됩니다. 그러나 aconstant 는 정확히 무엇입니까?

상수는 내용이 깊이 불변하고 메서드가 노드 할 수있는 부작용이있는 정적 최종 필드입니다. 여기에는 프리미티브,문자열,불변 유형 및 불변 유형의 immutablecollections 가 포함됩니다. 인스턴스의 관찰 가능한 상태 중 하나가 변경 될 수있는 경우 aconstant 가 아닙니다. 단순히 객체를 돌연변이시키지 않으려 고하는 것만으로는 충분하지 않습니다. 예:

// Constantsstatic final int NUMBER = 5;static final ImmutableList<String> NAMES = ImmutableList.of("Ed", "Ann");static final ImmutableMap<String, Integer> AGES = ImmutableMap.of("Ed", 35, "Ann", 32);static final Joiner COMMA_JOINER = Joiner.on(','); // because Joiner is immutablestatic final SomeMutableType EMPTY_ARRAY = {};enum SomeEnum { ENUM_CONSTANT }// Not constantsstatic String nonFinal = "non-final";final String nonStatic = "non-static";static final Set<String> mutableCollection = new HashSet<String>();static final ImmutableSet<SomeMutableType> mutableElements = ImmutableSet.of(mutable);static final ImmutableMap<String, SomeMutableType> mutableValues = ImmutableMap.of("Ed", mutableInstance, "Ann", mutableInstance2);static final Logger logger = Logger.getLogger(MyClass.getName());static final String nonEmptyArray = {"these", "can", "change"};

이러한 이름은 일반적으로 명사 또는 명사구입니다.

5.2.5 비 상수 필드 이름

비 상수 필드 이름(정적 또는 기타)은 writtenin lowerCamelCase 입니다.

이러한 이름은 일반적으로 명사 또는 명사구입니다. 예를 들어computedValuesindex입니다.

5.2.6 매개 변수 이름

매개 변수 이름은 lowerCamelCase 에 기록됩니다.

공용 메서드의 한 문자 매개 변수 이름은 피해야합니다.

5.2.7 로컬 변수 이름

로컬 변수 이름은 lowerCamelCase 에 기록됩니다.

최종 및 불변 일지라도 지역 변수는 상수로 간주되지 않으며 상수로 스타일을 지정해서는 안됩니다.

5.2.8 유형 변수 이름

각 유형 변수의 이름 중 하나에서 두 가지 스타일:

  • 단일 대문자여 필요에 따라 하나의 숫자로(같은ETXT2)
  • 에 이름을 양식을 사용한 클래스(섹션 참조 5.2.2,클래스 이름을)뒤에 자본 글자TRequestTFooBarT).

5.3 낙타 케이스:정의

때로는 하나 이상의 합리적인 방법을 변환하는 영어 표현으로 낙타 케이스와 같은 경우는 약어 또는 특이한 구조”IPv6″또는”iOS”존재한다. Improvepredictability 하기 위해,구글 스타일은 다음과 같은(거의)결정 체계를 지정합니다.

이름의 산문 형태로 시작:

  1. 문구를 일반 ASCII 로 변환하고 아포스트로피를 제거하십시오. 예를 들어”뮐러의 알고리즘”은”뮬러 알고리즘”이 될 수 있습니다.
  2. 이 결과를 단어로 나누고 공백과 나머지 구두점(일반적으로 하이픈)으로 나눕니다.
    • 추천:면 모든 말씀은 이미 기존의 낙타-케이스 모양에서 일반적인 사용,분으로 이것을 구성하는 부품(예를들면,”애드워즈””되는 광고 단어”). 참고 단어 등의”iOS”하지 않아 낙타는 경우 자체;그것을 무시한 모든 컨벤션,그래서 이 권장사항이 적용되지 않습니다.
  3. 이 소문자로 모든 것을(를 포함하여 약어),그때는 대문자만의 첫 번째 문자:
    • … 각 단어,상위 낙타 경우,또는
    • 를 산출합니다… 각 단어의 첫 번째를 제외하고,수익률이 낮은 낙타는 경우
  4. 마지막으로,참여하는 모든 단어로 단일 식별자입니다.

원래 단어의 케이싱은 거의 완전히 무시됩니다. 예:

Prose form Correct Incorrect
“XML HTTP request” XmlHttpRequest XMLHTTPRequest
“new customer ID” newCustomerId newCustomerID
“inner stopwatch” innerStopwatch innerStopWatch
“supports IPv6 on iOS?” supportsIpv6OnIos supportsIPv6OnIOS
“YouTube importer” YouTubeImporter
YoutubeImporter*

*Acceptable, but not recommended.

Note: Some words are ambiguously hyphenated in the Englishlanguage: for example “nonempty” and “non-empty” are both correct, so the method namescheckNonempty andcheckNonEmpty are likewise both correct.

6 Programming Practices

6.1 @Override: 항상 사용 된

메서드는@Override주석으로 표시됩니다. 이 포함되어 있는 클래스 메소드를 재정의 수퍼 클래스 메소드,클래스 methodimplementing 인터페이스 방법,그리고 인터페이스 방법 respecifying a superinterfacemethod.

예외:@Override@Deprecated인 경우 생략 될 수 있습니다.

6.2 잡은 예외:무시하지 않

아래를 제외하고,그것은 아주 드물게 정확하지 아무것도에 대한 응답 caughtexception. (일반적인 응답은 그것을 기록하거나”불가능”으로 간주되는 경우AssertionError로 다시 생각해보십시오.)

catch 블록에서 어떠한 조치도 취하지 않는 것이 진정으로 적절할 때,이것이 정당화되는 이유는 주석에 설명되어 있습니다.

try { int i = Integer.parseInt(response); return handleNumericResponse(i);} catch (NumberFormatException ok) { // it's not numeric; that's fine, just continue}return handleTextResponse(response);

제외에서 테스트를 잡은 예외가 될 수 있습 ignoredwithout 의견한 경우 그 이름 또는 시작으로expected. 다음과 같은 관용적인을 보장하는 코드는 아래에서 테스트가 던지 예외가 예상의 유형,그래서 코멘트가 불필요한 여기에.

try { emptyStack.pop(); fail();} catch (NoSuchElementException expected) {}

6.3 정적 회원 자격을 갖춘 클래스를 사용하는

을 참조하려고 하는 경우 정적 등 회원이 정규화해야 합니다,그것은 자격이 해당 클래스 ‘sname,지 않을 참조하거나 표현하는 클래스의 유형입니다.

Foo aFoo = ...;Foo.aStaticMethod(); // goodaFoo.aStaticMethod(); // badsomethingThatYieldsAFoo().aStaticMethod(); // very bad

6.4 종료자:사용하지 않

그것은 매우 드문하여 재정의Object.finalize.

팁:하지 마십시오. 절대적으로해야만한다면,먼저 효과적인 Java 항목 7,”Finalizers 피하기”를 매우 조심스럽게 읽고 이해 한 다음 수행하지 마십시오.

7Javadoc

7.1 서식

7.1.1 일반 형식

Javadoc 블록의 기본 서식은이 예제에서 볼 수 있듯이

/** * Multiple lines of Javadoc text are written here, * wrapped normally... */public int method(String p1) { ... }

… 또는이 한 줄 예제에서

/** An especially short bit of Javadoc. */

기본 양식은 항상 허용됩니다. Javadoc 블록(주석 마커 포함)의 entiretyof 가 단일 라인에 적합 할 수있는 경우 단일 라인 양식이 대체 될 수 있습니다. 이 경우에만@return와 같은 블록 태그가 없을 때 적용됩니다.

7.1.2 단락

중 하나 빈 줄이는 라인을 포함하는 만에 정렬을 선도 별표(*)—나타나는 단락 사이며,그룹 전에는 블록의 태그 ifpresent. 각 단락이지만 첫 번째 단락은 첫 번째 단어 바로 앞에<p>뒤에 공백이 없습니다.

7.1.3 블록의 태그

어떤 표준의”블록”태그에 사용되는 순서에 나타납@param@return@throws@deprecated,그리고 이러한 네 가지 유형 neverappear 빈 설명합니다. 사 태그에 맞지 않는 한 줄에서 계속 linesare 들여 네 가지(또는 그 이상)공간의 위치에서@.

7.2 요약 조각

각 Javadoc 블록은 간단한 요약 조각으로 시작합니다. 이것은 매우 중요합니다.클래스 및 메소드 인덱스와 같은 특정 컨텍스트에 나타나는 텍스트의 유일한 부분입니다.

이것은 완전한 문장이 아닌 명사구 또는 동사구 인 단편입니다. 지 않을 시작으로A {@code Foo} is a...This method returns...지 않으며,완전한 필수적 sentencelikeSave the record.. 그러나 조각은 대문자와완전한 문장 인 것처럼 표현됩니다.

팁:일반적인 실수는/** @return the customer ID */형식으로 간단한 Javadoc 을 작성하는 것입니다. 이것은 올바르지 않으므로/** Returns the customer ID. */로 변경해야합니다.

7.3Javadoc 사용

에서 최소한 Javadoc 존재에 대한 모든publicpublicprotected회원의 이러한 클래스,몇 exceptionsnoted 다.

7.3.4 절에 설명 된 바와 같이 Javadoc 이 필요하지 않은 추가 Javadoc 내용도 존재할 수 있습니다.

7.3.1 예외:자명하는 방법

Javadoc 은 선택 사항”simple,obvious”방법을 다음과 같getFoo경우에는 정말로 진정으로 isnothing 다른 보람있는 말을 하지만”반환합니다 foo”.

중요: 그것은 적절한 인용하는 이 예외를 justifyomitting 관련 정보를 전형적인 독자가 알아야 할 수도 있습니다. 예를 들어,methodnamedgetCanonicalName/** Returns the canonical name. */)는 경우에는 전형적인 리더가 없을 수 있습니다 ideawhat 용어는”표준 이름”의 의미!

7.3.2 예외:오버라이드

Javadoc 이 수퍼 타입 메소드를 오버라이드하는 메소드에 항상 존재하는 것은 아닙니다.

7.3.4 비 필수 Javadoc

다른 클래스와 멤버는 필요하거나 원하는대로 Javadoc 을 갖습니다.

Related Posts

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다