자동으로 작성 되는 규칙 몇가지 예를 들어보겠다.
1 . 두 statement(문장) 라인종결자(엔터)로 구분 된다.
2. 두 statement(문장) 닫는 중괄호('}')로 구분 된다.
3. break, continue, return, throw 등은 라인종결자(엔터)로 구분 된다.
4. 웬만해서는 엔터로 구분되고 예외사항이 있다고 생각하는 것이 좋을 정도로 많은 부분이 자동적으로 입력된다. 이는 대부분의 기본서에서도 언급하는 내용이기도 하다. 괜히 메신저에서 어미에 ;를 붙이는 것이 습관화 된 사람이 많은게 아니다.
입력된 코드 | 자동으로 입력된 세미콜록 | 원래 작성하려고 했던 코드 |
---|---|---|
<출처: https://en.wikibooks.org/wiki/JavaScript/Automatic_semicolon_insertion>
세미콜론을 꼭 써야하는 경우는 아래와 같을 수 있다.
var hello = 'world'
[1, 2, 3].forEach(addNumber)
위의 코드를 보면 세미콜론을 사용하지 않는 경우에는
var hello = 'world'[1, 2, 3].forEach(addNumber);
이와 같이 해석 될 것이다.
[, (, +, *, /, -, ,, .또는 단일 표현식의 두 토큰 사이에서만 찾을 수 있는 다른 이항 연산자로 시작합니다. 즉 저 토큰들은 자동 세미콜론이 적용 되지 않는다.
아래 내용은 eslint.org에서 소개하고 있는 내용이다.
/*eslint no-unexpected-multiline: "error"*/
var foo = bar
(1 || 2).baz();
var hello = 'world'
[1, 2, 3].forEach(addNumber);
let x = function() {}
`hello`
let x = function() {}
x
`hello`
let x = foo
/regex/g.test(bar)
var foo = bar
(1 || 2).baz();
위의 코드를 아래와 같이 쓰게 하는 옵션을 no-unexpected-multiline로 제공 하고 있다.
var foo = bar;
(1 || 2).baz();
var foo = bar
;(1 || 2).baz()
세미콜론을 쓰지 않는 사람들의 경우에는 일반적으로 후자를 택하고 있다.
<출처: https://eslint.org/docs/latest/rules/no-unexpected-multiline>
마무리
세미콜론을 꼭 쓰는 사람도 세미콜론을 깜빡 할때도 있을 것이도 잘못 찍을 때도 있을 것이다. 세미콜론을 안찍는 사람의 경우에도 꼭 찍어야 하는 경우 안 찍는 경우가 있을 것이다. 일반적으로 이런 경우를 위해서 es-lint를 사용하는 이유중 하나이다. es-lint를 사용하여 최대한 에러가 날 수 있는 혹은 개발자가 애매하게 해석할 수 있는 경우를 제거 하는 것이다.
위의 no-unexpected-multiline의 코드가 그런 상황이다. 이 개발자가 세미콜론을 쓰는 경우의 사람인지 아닌지 애매한 것이다. 그러니 팀원들간 조율을 하여 잘 맞춰서 개발을하는 것 밖에 없다.
댓글
댓글 쓰기