이 스타일 가이드에서는 must, must not, should, should not, may라는 문구를 사용할 때 RFC 2119 용어를 사용한다. 선호하다(prefer)와 회피하다(avoid)라는 용어는 각각 해야 한다(should)와 하지 말아야 한다(should not)에 대응한다. 각각 명령형과 선언형 진술은 규범적이며 반드시 해야 한다는 것에 상응한다.
(작성자 첨언: "권장한다", "지양하자" 라는 표현을 사용할 계획임)
제시된 모든 예는 스타일 가이드를 설명하는 데에만 사용된다. 즉, 예시가 Google 스타일로 되어 있지만 코드를 표현하는 유일한 세련된 방법을 보여주는 것은 아니다.
(작성자 첨언: 가이드의 예제를 기준으로 이해를 위한 예제를 덧붙일 계획임)
소스 파일은 UTF-8 인코딩을 권장한다.
소스 파일에서 ASCII 수평 공백 문자(코드값 0x20)가 유일하게 허용되는 공백 문자이다.
코드에 숨겨진(보이지 않는) 공백 문자나, 서로 다른 공백 문자들이 혼합될 경우, 코드 가독성과 동작에 영향을 줄 수 있다. 따라서 명확하게 허용된 ASCII 스페이스(0x20)만 사용하도록 제한한 것이다.
\u3000
등 사용금지문자열 리터럴(" "
또는 ' '
) 내의 공백 문자도 예외는 아니다.
특수 이스케이프 시퀀스가 있는 경우 숫자 기반 이스케이프는 사용하지 말자:
특수 이스케이프 시퀀스란?
특정 문자를 표현하기 위해 이스케이프 시퀀스를 사용한다. 여기서 특수 이스케이프 시퀀스란, 간결하게 특정 의미를 갖는 문자들을 표현하는 형태이다:
\'
: 작은따옴표 (Single Quote)\"
: 큰따옴표 (Double Quote)\\
: 백슬래시 (Backslash)\b
: 백스페이스 (Backspace)\f
: 폼 피드 (Form Feed)\n
: 새 줄 (New Line)\r
: 캐리지 리턴 (Carriage Return)\t
: 탭 (Horizontal Tab)\v
: 수직 탭 (Vertical Tab)숫자 기반 이스케이프란?
숫자로 문자를 표현하는 방식은 다음과 같다:
\xhh
: 16진수 2자리(ASCII)로 표현, (예: \x0a
→ 새 줄)\uhhhh
: 유니코드 16진수 4자리, (예: \u000a
→ 새 줄)\u{h}
: 유니코드 코드포인트 표현, (예: \u{a}
→ 새 줄)이러한 표현 방식은 가능하지만, 특수 이스케이프가 더 명확하고 간결하므로 피해야 한다.
Before
const newline = "\x0a";
After
const newline = "\n";
레거시 8진수 이스케이프는 사용하지 말자:
과거에는 8진수 이스케이프를 사용하는 방식이 있었다. 예를 들어, \012
는 ASCII 코드 값 10(새 줄)을 나타낸다.
하지만 8진수 이스케이프는 모호성과 혼란을 유발할 수 있으므로 현대 코딩 스타일 가이드에서는 사용하지 않는다.
비-ASCII 문자는 이스케이프 시퀀스 표현 대신에, 가능한 한 직접 입력하자:
비-ASCII 문자는 ASCII 범위를 넘어서는 문자들(예: 특수 기호, 유니코드 문자 등)이다.
비-ASCII 문자는 직접 코드에 포함시키는 것이 좋다. 예를 들어, 무한대 기호(∞)는 ∞처럼 직접 입력하는 것이 바람직하다.
비-ASCII 문자를 이스케이프 시퀀스(\u 또는 \x)로 표현할 수 있지만, 이런 방식은 코드 가독성을 낮추고 이해하기 어려울 수 있으므로 사용하지 말자.
Before
const units = '\u03bcs'; // Greek letter mu, 's'
After
const units = 'μs'; // 직접 입력하여 코드의 가독성이 높아짐
이스케이프 시퀀스 사용 시, 주석과 함께 사용하자:
Before
const output = '\ufeff' + content;
After
const output = '\ufeff' + content; // byte order mark
GitHub - google/gts: ☂️ TypeScript style guide, formatter, and linter.
Typescript Google Code Style Part 1
Typescript Google Code Style Part 2
Typescript Google Code Style Part 3