/
2018-03-12 20:53:34
16
2104

[펌] 자바스크립트, 세미콜론을 써야 하나 말아야 하나


https://bakyeono.net/post/2018-01-19-javascript-use-semicolon-or-not.html


자바스크립트에서는 세미콜론(;)을 사용하지 않아도 정상적으로 실행됩니다.

위의 글에서는 세미클론을 굳이 사용하지 않아도 되는 이유를 자세히 설명하고 있습니다.


관심있는 분은 참고바랍니다.

0
0
  • 댓글 16

  • 앙앙이
    2k
    2018-03-12 22:00:34

      세미 콜론 필요 없다 근거로 제시한 예제를 보니 돌에서 물 쥐어 짜내려는 느낌이네요.

    0
  • hyperion
    488
    2018-03-12 22:37:27

    좋은 글 잘 봤습니다.
    정말 재미있는 글이네요.

    그런데 제가 예전에 본 컬럼에서는 자바스크립트의 오류를 피하기 위해서 반드시 세미콜론을 넣어주는 게 좋다고 보았는데요.

    그 이유가 ASI가 괄호에는 동작을 하지 않기 때문으로 알고 있습니다.

    가령 아래와 같은 코드가 있다면...

    // 테스트 코드
    var obj = {
    	attributes: []
    }
    
    console.log('test')
    (obj.attributes || []).forEach(function(i) {})


    실제로 자바스크립트 엔진이 실행하는 코드는 아래처럼 변형되어 에러를 일으키게 됩니다.

    var obj = {
    	attributes: []
    };
    
    console.log('test')(obj.attributes || []).forEach(function(i) {})


    그래서 저는 저런 혹시 모를 오류를 피하기 위해 반드시 세미콜론을 넣어줘야 된다고 생각합니다.
    이상 제 사견이었습니다.

    ※ PS : 제가 봤던 컬럼의 링크를 찾을 수 있으면 좋을텐데...도무지 기억이 나질 않네요...
    다른 능력자분이 올려주시길 조심스레 바래봅니다...

    2
  • 방황하는젊은이
    681
    2018-03-12 23:03:47

    hyperion

    var obj = {
    	attributes: []
    };
    
    console.log('test');(obj.attributes || []).forEach(function(i) {})
    
    console.log 에 ; 빠져 아래코드 애러나네요 


    0
  • hyperion
    488
    2018-03-12 23:56:23

    방황하는젊은이

    네, 저도 알고 있습니다.

    제가 예시코드를 저렇게 작성한 이유는 /님이 링크로 소개한 글을 읽으시면 아실 거예요.

    하루 잘 마무리하시고 굿밤되길 바라요~



    0
  • 앙앙이
    2k
    2018-03-13 00:34:48 작성 2018-03-13 00:35:12 수정됨

      THE C PROGRAMMING LANGUAGE 는 c 언어 책중 고전중의 고전이지만

    시간이 지날수록 이 책을 소개 받아 공부했다는것에 감사한 마음이 있습니다.

    컴파일러 과목 들었을때 다시한번 그 책의 마지막 부분에 대해서 감탄을 하게 되었고

    후에 이 내용은 XML 공부할때도 도움이 되었습니다.


    자바스크립트 세미 콜론 필요 없다는 글을 읽다 보니

    옛날 읽었던 아래 스샷이 너무 생각나서 올려 봅니다.


    -----------------

    제목 : THE C PROGRAMMING LANGUAGE second Edition
    저자 Brian W. Kernighan • Dennis M. Ritchie

    참고 주소 : 

    http://cs.indstate.edu/~cbasavaraj/cs559/the_c_programming_language_2.pdf


    0
  • isNotEmpty
    2k
    2018-03-13 08:47:36

    브라우저마다 세미콜론을 붙여주는 해석이 다르지 않나요?

    예전에 크롬에서는 정상적이고, 파이어폭스에서 실행이 안 된 버튼 이벤트가 있었는데요.

    이벤트 함수 내에 세미콜론을 다 붙여주니까 정상적으로 실행된 경우가 있었어요.

    0
  • treetory
    81
    2018-03-13 11:03:35

    최근 Vue.js 스터디 해본다고 끄적거리다 보니...

    javascript test 도구에서 세미콜론 있으면 죄다 오류를 뱉어내더군요.

    Mocha 아니면 Jest 였던 거 같은데...

    그래서 요즘은 세미콜론 잘 안 붙이나 보다하고 받아들이고 있는 중이었드랬지요...

    0
  • 겸손합시다
    237
    2018-03-13 12:14:21 작성 2018-03-13 12:17:00 수정됨

    글 읽는 중간중간 각 의견들이 제시하는 샘플 코드를 보고 걸렀습니다.


    // 원래 코드
    function getData() {
        return
            {
                title: 'Maintainable Javascript',
                author: 'Nicholas C. Zakas'
            }
    }
    
    // 파서가 생각하는 코드
    function getData() {
        return;
            {
                title: 'Maintainable Javascript',
                author: 'Nicholas C. Zakas'
            };
    }

    이건 애초에 스타일 자체가 잘못 된 코드를 ASI의 문제랍시고 세미콜론을 써야한다는 주장도 웃기고

    (K&R 스타일이다가 Alman 스타일은 뭔데;;)


    class Foo {
      constructor () {
        if (baz) {
          return 42; // ok
        };           // <– AVOID!
        return 12;   // ok
      };             // <– AVOID!
    };               // <– AVOID!

    중괄호 세미콜론 스타일이 성가시다고 세미콜론을 쓰면 안된다라는 주장도 겁나 웃김

    (이 예제는 진짜 앙앙님 말씀처럼 의견 어필하려는 어거지 느낌 200%)


    전 C부터 접해서 그렁가 자바스크립트 할때도 세미콜론을 쓰자 주의이지만 두 의견 다 어거지라고 생각...

    1. 암묵적 VS 명시적의 의견 대립은 후자가 피곤하지만 결국 클린 코드다 라는 의견이 대다수

    2. 컴파일러, Lint의 경고는 어머니의 잔소리와 같은거임 웬만하면 무시하지말고 지키자.
       자다가도 클린코드가 나온다.
       클린 코드, 클린 코드 외치는 개발자님들이 Lint 경고는 무시?? (jslint에선 세미콜론 사용하지 않으면 기본적으로 경고를 내뿜습니다.)

    0
  • 앙앙이
    2k
    2018-03-13 13:06:14

      문법에서 세미콜론 사용하라면 사용해야 하는거구

    사용하지 말라면 말라는겁니다.


    자바스크립트 문법에서 세미 콜론 필요합니까? 아닙니까?

    이 문제부터 따져 물어야지

    이렇게 했더니 이렇고 저렇게 했더니 저렇다 이게 무슨 의미가 있습니까..

    문법 파싱기도 버그 있을 수 있고 느슷하게 문법 체크를 할 수 도 있습니다.

    느슷하게 문법 체크하는곳에 돌아간다고 강력하게 문법 체크하는 것이 틀린것은 아니지 않습니까?


    저는 웹프로그래머로 시작했습니다.

    스크립트 개발자라고 하대하는 시선에 대해서 의식을 안할 수 없습니다.

    이 글 보면 참 여러가지로 생각이 겹칩니다.

    자바스크립트로 c 컴파일러를 만드는 분도 계십니다.

    원천 기술을 가진 사람이 어떠한가 잘 보여주는거지요.

    여기서 다시 한번 질문 던집니다.

    자바 스크립트 프로그래머라고 하대 받을 이유가 있을까요?

    무술 영화속 대사처럼 내 문파의 무공이 패한거라는 말에

    "천만에 당신이 약해서 그렇다" 라고 답한것이 정답이 아닐까 합니다.


    "JavaScript로 개발하는 C Compiler" 참고 주소 : https://opentutorials.org/course/1715/9712

    0
  • 초코쪼꼬
    6k
    2018-03-13 13:55:06

    흥미로운 주제네요. 연구대상입니다.

    개인적으로 오류의 유무를 떠나서도 세미콜론이 있는 코드가 가독성이 좀더 좋은관계로 전 계속 쓸거 같네요.

    (* 테스트해보려 여러 코드를 짜보았는데.. 세미콜론이 없는 코드는 뭔가 어색하네요 ㅎㅎ..)

    0
  • aeba
    1k
    2018-03-13 14:55:05 작성 2018-03-13 15:20:09 수정됨

    세미콜론이 아예 없거나(파이썬) 일반적으로 없는 언어(스칼라) 쓰다가 JS를 쓰면 쓰다가 안쓰다가 하는거 같아요. 전 첨에는 붙이려고 하다가 듬성듬성 있는걸 보고 보기싫어서 어느 시점부터 아예 포기하고 세미콜론을 안 넣습니다. 


    추가:

    스칼라와 JS는 세미콜론이 필수적이지 않다는 점에서 같습니다만 스칼라에서 세미콜론 매번 붙이면 아마 이상한 취급을 받을겁니다. 

    동작하는 방식은 JS는 스칼라와는 살짝 다릅니다. 스칼라에선 괄호의 짝이 다 맞은 상태이고 줄이 끝나면 다음 줄의 내용에 대한 고려 없이 무조건 세미콜론이 삽입됩니다. 그렇긴 하지만 제 의견으로는 이건 큰 차이는 아닌거 같습니다.


    실수는 어느 방식으로든 가능합니다. 하지만 세미콜론 빼먹는건 너무 자주 일어나는 일이라고 생각해요. 특히 글에서도 나왔지만 어느 블록 뒤에는 세미콜론이 붙어야되고 어느 블록 뒤엔 안붙여야 된다는 룰때문에 (왜 그런 룰이 생겼는지는 백프로 이해가 가도) 실수가 잦았습니다. C/C++ struct나 C++ class 생각나네요. 전 그래서 아예 안써서 실수할(신경써야 할) 면적을 줄인다는 말에 동의합니다.

    0
  • moonti
    932
    2018-03-13 18:55:50
    저는 붙이자는 주의 였는데요.
    지금 와보니 굳이 필요한가 싶네요.
    실수하루 여지가 많지 않고 코드를 명확히 짜면
    되지 않나 생각합니다.. 개행으로 코드가 떨어질때 문제인데
    요새는 간략하게 문법도 지원하고..
    0
  • NoDe
    2k
    2018-03-15 13:18:03

    저는 그래도 사용하렵니다.

    저건 저 사람의 주장이지 모든 프로그래머가 저렇게 할 필요는 없지 않나요 ??

    자바스크립트 compress 버전을 만들때도 세미콜론이 중요한 역할이기에 모듈 만드는 개발자로서는

    사용해도 나쁘지 않다고 라고 주장하고 싶네요.

    스코프 내의 함수끝나는 부분까지 쓰지는 않겠지만 큰 단락 하나 끝나는 부분에는 써주는게 좋지않나

    싶습니다.

    0
  • neapo
    122
    2018-03-18 03:31:51

    반대로 왜 쓰지 말아야하죠?

    가독성, 안전성, 범용성, 간략함이 있나요.

    전 유지보수하면서 스크립트마다 특정 브라우저 또는 특정 버전에서 안되는 경우가 잦다는 걸 알았습니다. 

    처음에만 만들고 돌아가면 그만이 아니라 사용자가 잘 사용할 수 있어야죠.

    돌아가면 그만이라는, 내가 개발할 때는 잘되는데. 이런 마인드가 좋은지 반문하고 싶네요.


    0
  • 유용
    34
    2018-03-20 10:55:38

    좋은 정보 감사합니다~

    0
  • basscraft
    1k
    2018-03-23 09:32:06

    별로 설득력은 빈약하지만...

    이런 엉뚱한 상상을 하는 자들의 아이디어가 모여져서 세상이 변화된다고 생각합니다.

    다만 내 주변에는 없었으면 좋겠다는 생각... 누가 저렇게 짜놓은 소스를 내가 수정하게 된다면... 겁나게 피곤해요.

    저는 세상을 변화하는데 기여하는 것보다는 현재의 질서를 잘 유지하자는 보수 주의자 인것 같습니다.

    0
  • 로그인을 하시면 댓글을 등록할 수 있습니다.