LHJ

I'm a FE developer.

4.1.3 공백

19 Apr 2020 » js_lj

대부분의 경우 자바스크립트는 줄바꿈 문자를 포함해, 추가 공백을 신경 쓰지 않습니다.
(return 문 뒤에 줄바꿈 문자를 쓰면 문제가 생깁니다. 여기에 대해서는 6장에서 더 설명합니다.)
스페이스 하나는 스페이스 10개나 마찬가지고, 스페이스 10개나 빈줄 10개나 마찬가지입니다.
그렇다고 해서 공백을 아무렇게나 쓰라는 말은 아닙니다.
예를 들어 앞에서 쓴 while 문은 다음 코드와 동등합니다.

while(funds > 1 && funds < 100)

	funds = funds + 2;

하지만 위 코드는 두 문 사이에 어떤 연관이 있다는 느낌을 주지 않습니다.
이런 코드는 오해의 소지가 다분하므로 피해야 합니다.
다음 코드도 같은 일을 하는데, 이런 스타일은 비교적 흔히 쓰이는 편이며 모호해 보이지도 않습니다.

// 줄바꿈이 없습니다.
while(funds > 1 && funds < 100) funds = funds + 2;

// 줄바꿈 없이 문 하나를 블록 안에 썼습니다.
while(funds > 1 && funds < 100) { funds = funds + 2; }

프로그래머 중에는 제어문 바디를 항상(단 하나의 문이라도) 블록 안에 써서 일관성을 유지하고 의미를 명료하게 표현해야 한다고 주장하는 사람들이 있습니다.
필자는 그런 주장에 적극적으로 동참하는 편은 아니지만, 부주의한 들여쓰기는 이런 논쟁에 기름을 붓는 행동이라는 점은 지적해 두고 싶습니다.

while(funds > 1 && funds < 100)
	funds = funds + 2;
	funds = funds - 1;

위 식은 언뜻 보면 while 루프의 바디에서 2개 문(2보 전진, 1보 후퇴)을 실행하는 것처럼 보입니다.
하지만 여기에는 블록이 없으므로 자바스크립트는 위 코드를 다음과 같이 해석합니다.

while(funds > 1 && funds <100)
	funds = funds + 2; // while 루프 바디
	
funds = funds - 1; //while 루프가 끝난 다음 실행됩니다.

필자는 개인적으로 문 하나만 쓸 때는 블록을 생략하는 편이지만, 들여쓰기는 항상 의미가 명확히 드러나도록 써야 합니다.
또한, 팀이나 오픈 소스 프로젝트에서 협력하고 있다면 거기서 선택한 스타일 가이드를 따라야 하며 개인적인 의견은 양보해야 합니다.

문 하나를 블록 안에 쓰느냐 마느냐 하는 논쟁은 제쳐두더라도, 문법적으로는 유효하지만 거의 모든 사람에게 환영받지 못하는 스타일이 있습니다.
같은 if 문 안에서 블록문과 블록 없는 문을 섞어 쓰지 마십시오.

// 이렇게 하지 마십시오.
if (funds > 1) {
	console.log("There's money left!");
	console.log("That means keep playing!");
} else
	console.log("I'm broke! Time to quit.");
	
// 이렇게도 하지 마십시오.
if (funds > 1)
	console.log("There's money left! Keep playing!");
else {
	console.log("I'm broke!");
	console.log("Time to quit.");
}