IT story

JavaScript의 한 줄 문장에 중괄호가 필요합니까?

hot-time 2020. 6. 23. 07:23
반응형

JavaScript의 한 줄 문장에 중괄호가 필요합니까?


한 줄짜리 문장에 중괄호를 남겨두면 JavaScript에서 해로울 수 있다고 들었습니다. 더 이상 추론을 기억하지 못하고 Google 검색이 큰 도움이되지 못했습니다.

JavaScript에서 중괄호 안에있는 모든 문장을 둘러싸는 것이 좋은 아이디어가 있습니까?

모두가 그렇게 보이기 때문에 묻습니다.


아니

그러나 그들은 추천합니다. 성명을 확장하면 성명서가 필요합니다.

이것은 완벽하게 유효합니다

if (cond) 
    alert("Condition met!")
else
    alert("Condition not met!")

그러나 항상 중괄호를 사용하는 것이 좋습니다. 본인이나 다른 사람이 명령문을 확장하는 경우에는 명령문이 필요하기 때문입니다.

이 방법은 모든 C 구문 스타일 언어에서 브레이스가 적용됩니다. C, C ++, Java, 심지어 PHP도 모두 중괄호없이 한 줄 명령문을 지원합니다. 당신은 당신이 두 문자 만 저장 하고 일부 사람들의 브레이싱 스타일로 줄을 저장하지 않는다는 것을 알아야합니다 . 나는 전체 괄호 스타일 (다음과 같은)을 선호하므로 조금 더 길어집니다. 코드 가독성이 매우 명확하다는 사실을 잘 알고 있습니다.

if (cond) 
{
    alert("Condition met!")
}
else
{
    alert("Condition not met!")
}

가독성 측면이 있습니다. 복합 문장이있을 때는 혼동 될 수 있습니다. 들여 쓰기는 컴파일러 / 통역사에게 도움이되지만 의미하는 것은 아닙니다.

var a;
var b;
var c;

//Indenting is clear
if (a===true)
  alert(a); //Only on IF
alert(b); //Always

//Indenting is bad
if (a===true)
  alert(a); //Only on IF
  alert(b); //Always but expected?

//Nested indenting is clear
if (a===true)
  if (b===true)
    alert(a); //Only on if-if
alert (b); //Always

//Nested indenting is misleading
if (a===true)
  if (b===true)
    alert(a); //Only on if-if
  alert (b); //Always but expected as part of first if?

//Compound line is misleading
//b will always alert, but suggests it's part of if
if (a===true) alert(a);alert(b); 
else alert(c); //Error, else isn't attached

그리고 확장 성 측면이 있습니다.

//Problematic
if (a===true)
  alert(a);
  alert(b); //We're assuming this will happen with the if but it'll happen always
else       //This else is not connected to an if anymore - error
  alert(c);

//Obvious
if (a===true) {
  alert(a); //on if
  alert(b); //on if
} else {
  alert(c); //on !if
} 

생각은 항상 괄호가 있다면 그 블록 안에 다른 문장을 삽입하는 것을 알고 있습니다.


질문은 한 줄로 진술에 대해 묻습니다. 그러나 제공된 많은 예는 여러 줄로 된 문장을 기반으로 중괄호를 생략하지 않는 이유를 보여줍니다. 원하는 코딩 스타일 인 경우 한 줄에 대괄호를 사용하지 않는 것이 안전합니다.

예를 들어, 질문은 이것이 정상인지 묻습니다.

 if (condition) statement;

이것이 정상인지 묻지 않습니다.

 if (condition)
   statement;

나는 대괄호를 생략하는 것이 덜 불필요한 구문으로 코드를 더 읽기 쉽게 만들기 때문에 바람직하다고 생각합니다.

내 코딩 스타일은 코드가 블록이 아닌 한 대괄호를 사용하지 않는 것입니다. 한 줄에 세미콜론으로 구분하여 여러 명령문을 사용하지 마십시오. 나는 이것이 읽기 쉽고 명확하며 'if'문법에 대한 범위 지정 문제가 결코 없다는 것을 알았습니다. 결과적으로 단일 if 조건문에 대괄호를 사용하려면 3 행이 필요합니다. 이처럼 :

 if (condition) {
   statement;
 }

if 문은 세로 공간을 덜 사용하고 코드가 더 작기 때문에 if 문을 사용하는 것이 좋습니다.

다른 사람들 이이 방법을 사용하도록 강요하지는 않지만 저에게 효과적이며 괄호를 생략하면 코딩 / 범위 지정 오류가 발생하는 방법에 대한 예제에 더 동의하지 않습니다.


기술적으로는 아니지만 그렇지 않으면 절대적으로 그렇습니다 !!!

"개인 취향", "코드가 제대로 실행", "나를 위해 잘 작동했습니다", "더 읽기 쉬운", yada yada BS를 잊어 버리십시오. 실수를하고 코딩 할 때 실수를 저지르는 것이 매우 쉽다고 생각하면 이것은 매우 심각한 문제로 이어질 수 있습니다 (믿지 마라?, 유명한 Apple이 버그에 실패 하는 것을 확인하십시오 ).

주장 : "개인 취향"

전혀 그렇지 않다. 당신이 화성으로 떠나는 한 남자 팀이 아니라면 대부분의 경우 다른 사람들이 코드를 읽거나 수정합니다. 심각한 코딩 팀에서는 이것이 권장되는 방식이므로 '개인 취향'이 아닙니다.

인수 : "코드가 제대로 실행됩니다"

스파게티 코드도 마찬가지입니다! 생성해도된다는 의미입니까?

주장 : "그것은 나에게 잘 작동했다"

내 경력 에서이 문제로 인해 너무 많은 버그가 발생했습니다. 'DoSomething()''SomethingElse()'전화를 받았는지에 대해 몇 번이나 논평 하고 당황 했는지 기억하지 못할 것입니다 .

if (condition) 
    DoSomething();
SomethingElse();

또는 'SomethingMore'를 추가했는데 호출되지 않는 것을 보지 못했습니다 (들여 쓰기에 다른 의미가 있음에도 불구하고).

if (condition)
  DoSomething();
  SomethingMore();

여기 내가 가진 실제 사례가 있습니다. 누군가가 모든 로깅을 해제하여 find & replace "console.log"=>를 실행하려고했습니다 //"console.log".

if (condition) 
   console.log("something");
SomethingElse();

문제가 보입니까?

"이것은 너무나 사소한 일이지만 결코 그렇게하지 않을 것입니다."라고 생각하더라도; 항상 당신보다 열등한 프로그래밍 기술을 가진 팀원이 있다는 것을 기억하십시오. (팀에서 최악이 아닙니다!)

인수 : "더 읽기 쉽다"

프로그래밍에 대해 배운 것이 있다면 간단한 것들은 매우 빠르게 복잡해집니다. 이것은 매우 일반적입니다 :

if (condition) 
    DoSomething();

다른 브라우저 / 환경 / 사용 사례로 테스트되거나 새로운 기능이 추가 된 후 다음으로 바뀝니다.

if (a != null)
   if (condition) 
      DoSomething();
   else
      DoSomethingElse(); 
      DoSomethingMore();
else 
    if (b == null)
         alert("error b");
    else 
         alert("error a");

그리고 이것을 이것과 비교하십시오 :

 if (a != null) {
    if (condition) { 
       DoSomething();
    }
    else {
       DoSomethingElse();
       DoSomethingMore();
    }
 } else if (b == null) {
    alert("error b");
 } else {
    alert("error a");
 }

추신 : 보너스 포인트는 위의 예에서 버그를 발견 한 사람에게 전달됩니다.


유지 보수성 문제가 없습니다!

여러분 모두의 문제는 모든 곳에 세미콜론을 두는 것입니다. 여러 명령문에 중괄호가 필요하지 않습니다. 문장을 추가하려면 쉼표 만 사용하십시오.

if (a > 1)
 alert("foo"),
 alert("bar"),
 alert("lorem"),
 alert("ipsum");
else
 alert("blah");

이것은 예상대로 실행되는 유효한 코드입니다!


@Josh K (Java, C 등에 적용됨)에서 언급 한 이유 외에도 JavaScript의 특별한 문제 중 하나는 자동 세미콜론 삽입 입니다. Wikipedia 예제에서 :

return
a + b;

// Returns undefined. Treated as:
//   return;
//   a + b;

따라서 다음과 같이 사용하면 예기치 않은 결과가 발생할 수도 있습니다.

if (x)
   return
   a + b;

쓰는 것이별로 좋지 않습니다.

if (x) {
   return
   a + b;
}

그러나 어쩌면 여기에서 오류를 감지하기가 조금 더 쉽습니다 (?)


스타일 문제이지만, 중괄호는 다른 사람의 매달려있는 것을 방지하는 데 좋습니다 .


한 줄 문장에 중괄호를 사용해야하는 프로그래밍 이유는 없습니다.

This only comes down to coders preferences and readability.

Your code won't break because of it.


Here is why it's recommended

Let's say I write

if(someVal)
    alert("True");

Then the next developer comes and says "Oh, I need to do something else", so they write

if(someVal)
    alert("True");
    alert("AlsoTrue");

Now as you can see "AlsoTrue" will always be true, because the first developer didn't use braces.


I'm currently working on a minifier. Even now I check it on two huge scripts. Experimentally I found out: You may remove the curly braces behind for,if,else,while,function* if the curly braces don't include ';','return','for','if','else','while','do','function'. Irrespective line breaks.

function a(b){if(c){d}else{e}} //ok  
function a(b){if(c)d;else e}   //ok

Of course you need to replace the closing brace with a semicolon if it's not followed by on other closing brace.

A function must not end in a comma.

var a,b=function()c;  //ok *but not in Chrome
var b=function()c,a;  //error  

Tested on Chrome and FF.


There are many problems in javascript. Take a look at JavaScript architect Douglas Crockford talking about it The if statement seems to be fine but the return statement may introduce a problem.

return
{
    ok:false;
}
//silent error (return undefined)

return{
    ok:true;
}
//works well in javascript

I found this answer searching about a similar experience so I decided to answer it with my experience.

Bracketless statements do work in most browsers, however, I tested that bracketless methods in fact do not work in some browser.

As of February 26th 2018, this statement works in Pale Moon, but not Google Chrome.

function foo()
   return bar;

Not responding the question directly, but below is a short syntax about if condition on one line

Ex:

var i=true;
if(i){
  dosomething();
}

Can be written like this:

var i=true;
i && dosomething();

Sometimes they seem to be needed! I couldn't believe it myself, but yesterday it occurred to me in a Firebug session (recent Firefox 22.0) that

if (! my.condition.key)
    do something;

executed do something despite my.condition.key was true. Adding braces:

if (! my.condition.var) {
    do something;
}

fixed that matter. There are myriards of examples where it apparently works without the braces, but in this case it definitely didn't.

People who tend to put more than one statement on a line should very definitely always use braces, of course, because things like

if (condition)
    do something; do something else;

are difficult to find.


I would just like to note that you can also leave the curly braces off of just the else. As seen in this article by John Resig's.

if(2 == 1){
    if(1 == 2){
        console.log("We will never get here")
    }
} else 
    console.log("We will get here")

There is a way to achieve multiple line non curly braces if statements.. (Wow what english..) but it is kinda tedius:

if(true)
   funcName();
else
   return null;


function funcName(){
  //Do Stuff Here...
}

The beginning indentation level of a statement should be equal to the number of open braces above it. (excluding quoted or commented braces or ones in preprocessor directives)

Otherwise K&R would be good indentation style. To fix their style, I recommend placing short simple if statements on one line.

if (foo) bar();    // I like this. It's also consistent with Python FWIW

instead of

if (foo)
   bar();   // not so good

If I were writing an editor, I'd make its auto format button suck the bar up to the same line as foo, and I'd make it insert braces around bar if you press return before it like this:

if (foo) {
  bar();    // better
}

Then it's easy and consistent to add new statements above or below bar within the body of the if statement

if (foo) {
  bar();    // consistent
  baz();    // easy to read and maintain
}

Always found that

if(valid) return;

is easier on my eye than

if(valid) {
  return;
}

also conditional such as

(valid) ? ifTrue() : ifFalse();

are easier to read (my personal opinion) rather than

if(valid) {
  ifTrue();
} else {
  ifFalse();
}

but i guess it comes down to coding style


There are lots of good answers, so I won’t repeat, except as to say my “rule” when braces can be omitted: on conditions that ‘return’ or ‘throw’ (eg.) as their only statement. In this case the flow-control is already clear that it’s terminating:

Even the “bad case” can be quickly identified (and fixed) due to the terminating flow-control. This concept/structure “rule” also applies to a number of languages.

if (x)
    return y;
    always();

Of course, this is also why one might use a linter..

참고URL : https://stackoverflow.com/questions/4797286/are-braces-necessary-in-one-line-statements-in-javascript

반응형