필요하지 않은 경우에도 논리 문에 괄호를 사용해야합니까?


100

부울 조건 이 있고보다 우선 순위가 높은 a AND b OR c AND d언어를 사용 한다고 가정 해 봅시다 . 이 코드 줄을 작성할 수 있습니다.ANDOR

If (a AND b) OR (c AND d) Then ...

그러나 실제로는 다음과 같습니다.

If a AND b OR c AND d Then ...

관련없는 괄호를 포함하거나 반대하는 주장이 있습니까? 실제 경험에 의하면 가독성을 위해 그것들을 포함시킬 가치가 있다고 제안합니까? 아니면 개발자가 진정으로 언어의 기초에 대해 자신감을 가져야한다는 신호입니까?


90
나는 게으르지 만, 대부분의 상황에서 가독성을 위해 괄호를 사용하는 것을 선호합니다.
thorsten müller

6
나도. 나는 내가 언어의 기초에 자신감 / 유능한 사람이 되기에는 너무 게으 르기 때문에 가독성을 높이기 위해 더 많이하고 있기를 바라고 있습니다.
Jeff Bridgman 2016 년

16
괄호를 잘 사용하는 것은 문법을 잘 사용하는 것과 같습니다. 2 * 3 + 2같은 수 있습니다 (2 * 3) + 2두 번째는 쉽게 읽을 수 있지만.
Reactgular

16
@Mathew 어쩌면 수학에 약하다면. 더 복잡한 경우에는 반드시 괄호를 사용하십시오. 그러나 맹목적으로 명백한 것 (BODMAS…)의 경우 혼란으로 인해 가독성 을 떨어 뜨리는 것보다 가독성이 떨어 집니다.
Konrad Rudolph

3
즉, Basic, Python, SQL에서 AND / OR의 우선 순위가 동일합니다 ... 내 인상은 이것이 현대 언어의 대다수 (모든 것은 아니지만)의 규칙이라는 것입니다.
Tim Goodman 2016 년

답변:


117

좋은 개발자는 명확 하고 올바른 코드를 작성하려고 노력 합니다 . 조건부 괄호는 엄격하게 요구되지 않더라도 둘 다에 도움이됩니다.

명확성을 위해 괄호는 코드의 주석과 같이 생각하십시오. 꼭 필요한 것은 아니며 이론적으로 유능한 개발자는 코드없이 코드를 알아낼 수 있어야합니다. 그러나이 단서는 다음과 같은 이유로 매우 유용합니다.

  • 코드를 이해하는 데 필요한 작업이 줄어 듭니다.
  • 개발자의 의도를 확인합니다.

또한 들여 쓰기, 공백 및 기타 스타일 표준과 같이 추가 괄호는 코드를 논리적으로 시각적으로 구성하는 데 도움이됩니다.

에 관해서는 정확성 , 괄호가없는 조건은 어리석은 실수를위한 조리법이다. 이러한 상황이 발생하면 찾기 어려운 버그 일 수 있습니다. 종종 잘못된 조건이 대부분 올바르게 작동하고 가끔 실패하기 때문입니다.

그리고 올바르게 이해하더라도 다음 코드 작성 담당자는 표현식에 오류를 추가하거나 논리를 이해하지 못하여 다른 곳에 오류를 추가 할 수 없습니다 (LarsH가 올바르게 지적한대로).

나는 항상 결합 and하고 or(우선 순위가 비슷한 유사한 산술 연산) 표현식에 괄호를 사용 합니다.


3
비록 주석이 사과하기 어렵다고 들었습니다. (읽기 어려운 / 읽기 어려운 코드에 대해) ... 더 잘 작성했을 가능성이 큽니다. 괄호에 대해서도 비슷한 것을 말할 수 있다고 생각합니다.
Jeff Bridgman 2016 년

6
정확성의 또 다른 측면은 변경을 통해 보존하는 것입니다. 원래 개발자는 처음에 목적과 맥락을 염두에두고 코드를 작성할 때 괄호없이 우선권을 얻을 수 있지만 나중에 와서 모두를 기억하지 못하는 다른 사람 표현식에 더 많은 용어를 추가하면 세부 사항이 엉망이 될 수 있습니다. (이것은 대부분 이미 암시되었지만 강조 할 가치가 있다고 생각했습니다.)
LarsH

1
@LarsH, 감사합니다.이 답변에 명시 적으로 추가했습니다.

8
+1 "개발자의 의도를 확인합니다." -모든 프로그래머 (아마도 전부는 아니지만 여기에있는 모든 사람)는 컴파일러가 가장 복잡한 논리로 수행 할 작업을 해결할 수 있습니다. 절대로 원래 개발자가 자신을 포함하여 몇 주 동안 가장 단순한 것을 넘어서는 목표를 달성 할 수있는 사람은 아무도 없습니다 ....
mattnz

2
@JeffBridgman은 "설명은 때때로 코드 냄새 일 수 있다 "라는 상당히 잘 알려진 견해를 참조하고 있다고 생각 합니다. 예를 들어 "댓글이 필요하지 않도록 코드를 리팩터링 할 수 있습니까?"라는 질문이 포함 된 Jeff Atwood의 요약 을 참조하십시오 . 나는 당신의 의견이 왜 코드가 그렇게 직관적이지 않은지를 설명한다면, 뭔가 잘못되었다는 힌트가 될 수 있다고 주장합니다. 이런 경우에는 코드를 단순화하는 것이 좋습니다. 그러나 귀하의 실제 답변에 완전히 동의하고 괄호를 씁니다.
Daniel B

94

그것은 덜 여부 문제 언어의 당신의 이해에 확신합니다. 더 중요한 것은 당신을 따르는 n00b의 언어를 이해하는 것입니다.

가장 명확하고 명확한 방법으로 코드를 작성하십시오. 추가 괄호는 종종 (항상 그런 것은 아님) 도움이됩니다. 한 줄에 한 줄만 쓰면 도움이됩니다. 코딩 스타일의 일관성은 종종 도움이됩니다.

괄호가 너무 많지만 조언이 필요하지 않은 상황 중 하나입니다. 볼 때 알 수 있습니다. 이 시점에서 코드를 리팩터링하여 괄호를 제거하지 않고 명령문의 복잡성을 줄입니다.


72
작년에 작고 피곤하거나 작년에 작성한 코드를 다룰 때 솔로 개발자 인 경우에도 잊지 마십시오. 귀하의 이해 수준이 n00b의 수준으로 줄어 듭니다.
Dan Neely

30
There is such a thing as too many parenthesis-당신은 분명히 거짓말 쟁이가 아닙니다;)
paul

18
나쁜 충고입니다. 멍청한 놈을 위해 글을 쓰지 마십시오 . 초보자 도서의 첫 두 장을 넘어 잘 확립 된 관용구를 사용할 수 없기 때문에 코드 품질 이 현저히 떨어질 것 입니다.
Konrad Rudolph

10
@KonradRudolph : 아마도 그렇습니다. 그러나 컴퓨터 프로그래밍 기술을 처음부터 끝까지 알고 있거나 나중에 코드를 디버깅 할 준비가되어 있고 왜 그런 일을했는지에 대한 단서가없는 사람을 위해 쓰지 마십시오. . 코드는 작성된 것보다 훨씬 많이 읽습니다.
haylem

15
@ dodgethesteamroller : 유능하고 존경받는 개발자들이 너무나 자주 눈에 띄지 않는 우선 순위 버그 (지금은 나쁜 하루를 보낸다)를 소개하는 것을 보았습니다. 우선 순위 규칙을 알고있는 훌륭한 개발자의 경우 감지되지 않은 실수 / 오타의 위험이 너무 높습니다. 다른 모든 사람들에게는 위험이 더 높습니다. 최고의 개발자는 언어의 우선 순위 규칙을 기억하는 데 사용 된 개발자이지만, 분명하지 않은 것에 대해서는 괄호를 습관적으로 사용했기 때문에 잊어 버렸습니다.
Brendan

31

항상 괄호를 사용해야합니다 ... 우선 순위를 제어하지 않습니다 ... 컴파일러 개발자가합니다. 괄호를 사용하지 않는 것에 대해 나에게 일어난 이야기가 있습니다. 이는 2 주 동안 수백 명의 사람들에게 영향을 미쳤습니다.

실제 이유

메인 프레임 응용 프로그램을 상속했습니다. 어느 날, 청록색에서 작동이 멈췄습니다. 그게 다야 .. 멈 췄어.

내 직업은 가능한 빨리 작동시키는 것이 었습니다. 소스 코드는 2 년 동안 수정되지 않았지만 갑자기 중단되었습니다. 코드를 컴파일하려고했는데 XX 줄에서 끊어졌습니다. XX 행을 보았는데 XX 행을 중단시킬 항목을 알 수 없었습니다. 이 응용 프로그램에 대한 자세한 사양을 요청했지만 아무것도 없었습니다. XX 행은 범인이 아니 었습니다.

코드를 인쇄하여 위에서 아래로 검토하기 시작했습니다. 나는 무슨 일이 일어나고 있는지에 대한 순서도를 만들기 시작했습니다. 코드는 너무 복잡해서 이해가 거의되지 않았습니다. 나는 순서도를 포기하려고 포기했다. 특히 응용 프로그램이 수행 한 작업이나 종속성 체인의 위치에 대한 세부 정보가 없기 때문에 해당 변경 사항이 프로세스의 나머지 프로세스에 어떤 영향을 미치는지 알지 못한 채 변경하기를 두려워했습니다.

그래서 소스 코드 맨 위에서 시작하여 코드를 더 읽기 쉽게하기 위해 whitespce와 line 브레이크를 추가하기로 결정했습니다. 어떤 경우에는 어떤 조건이 결합 AND되었고 OR어떤 데이터가 AND어떤 데이터와 어떤 데이터가 구별되고 있는지 명확하게 구분되지 않는 경우가 있음을 알게되었습니다 OR. 그래서 나는 더 읽기 쉽게하기 위해 ANDand 주위에 괄호를두기 시작했습니다 OR.

청소를 천천히 진행하면서 정기적으로 작업을 저장했습니다. 어느 시점에서 나는 코드를 컴파일하려고 시도했고 이상한 일이 일어났다. 오류가 코드의 원래 줄을 넘어서서 더 이상 내려갔습니다. 그래서 나는 계속해서, AND그리고 OR조건을 parens로 분리했습니다. 청소가 끝나면 효과가있었습니다. 그림을 이동.

그런 다음 운영 상점을 방문하여 최근에 메인 프레임에 새로운 구성 요소를 설치했는지 물어보기로 결정했습니다. 예, 우리는 최근에 컴파일러를 업그레이드했습니다. 흠.

이전 컴파일러는 관계없이 왼쪽에서 오른쪽으로 식을 평가했습니다. 컴파일러의 새로운 버전은 또한 불분명 조합을 의미를 잘하지만, 모호한 코드 왼쪽에서 식을 평가 AND하고 OR분석 할 수 없습니다입니다.

내가 배운 교훈은 ... 항상, 항상, 서로 결합하여 사용될 때 항상 AND조건 을 분리하기 위해 Parens를 OR사용합니다.

단순화 된 예

IF Product = 191 OR Product = 193 AND Model = "ABC" OR Product = 201 OR Product = 202 AND Model = "DEF" ...(여러 코드로 흩어진 코드)

이것은 내가 만난 것의 단순화 된 버전입니다. 복합 부울 논리 문이있는 조건도있었습니다.

나는 그것을 추격하는 것을 기억한다.
IF ((Product = 191 OR Product = 193) AND Model = "ABC") OR ((Product = 201 OR Product = 202) AND Model = "DEF") ...



사양이 없어서 다시 쓸 수 없었습니다. 원래의 저자는 오랫동안 사라졌습니다. 나는 강한 압력을 기억합니다. 전체 화물선이 항구에 좌초되어이 작은 프로그램이 작동하지 않아서 하역 할 수 없었습니다. 경고가 없습니다. 소스 코드가 변경되지 않았습니다. Parens를 추가하면 오류가 이동 한 것을 발견 한 후 네트워크 작업에서 수정 한 것이 있는지 물어 보았습니다.


22
좋은 컴파일러가 왜 중요한지에 대한 더 나은 그림처럼 보입니다.
ruakh

6
@CapeCodGunny : 당신이하지 않았다 확신합니다. 그러나 여기서 문제는 당신이 나쁜 변경을 한 나쁜 컴파일러 벤더가 있다는 것입니다. 더 나은 컴파일러를 사용하는 경우에도 "항상, 항상, 항상"이 문제를 해결하는 방법에 대한 교훈을 얻지 못했습니다.
ruakh

5
@ruakh-아니요, 공급 업체는 단순히 코드 파서를 변경했습니다. 저는 오래된 학교입니다. 코드를 작성했거나 관련된 모든 시스템을 기억할 수있는 능력에 의존하지 않습니다. 문서가 없으면 소스 코드 만 있으면됩니다. 소스 코드를 읽고 따르기가 어려우면 매우 스트레스가 많은 상황이됩니다. 공백을 사용하지 않는 프로그래머는 아마도 내가 직면했던 것과 같은 상황을 다루지 않았을 것입니다. 또한 다음과 같은 코드를 작성하는 것이 더 합리적이라는 것을 배웠습니다. See Dick; Jane을보십시오; Dick and Jane을 참조하십시오. 읽기 쉬운 주석은 ... 주석 처리하고 따르십시오.
Michael Riley-AKA Gunny

2
대단한 이야기이지만 괄호를 사용하는 것은 아닙니다. 그리고 / 또는 우선 순위는 거의 보편적이며 생각할 수있는 변화가 가장 적습니다. 이러한 표준, 기본 작업에 대해 일관된 동작에 의존 할 수없는 경우 컴파일러는 쓰레기이며 수행하는 작업에 관계없이 호스가 발생합니다. 당신의 이야기는 100 % 컴파일러 문제이고 0 %는 코드 문제입니다. 특히 기본 동작이 왼쪽에서 오른쪽으로 간단하게 평가되었다는 점에서 순서는 항상 명확 할 것입니다. 왜 괄호를 사용합니까?

7
나는 양쪽에 교훈이 있다고 생각합니다 ... 특히 대안이 모호한 코드와 관련하여 컴파일러의 문서화되지 않은 동작에 의존 할 때 괄호를 사용하는 것이 훨씬 좋습니다 . 프로그래머가 어떤 표현이 모호한 지 모른다면, parens를 사용하는 것이 좋습니다. 반면에 컴파일러의 동작을 변경하는 것은 위험하지만 동작이 변경된 경우에는 오류가 발생했습니다. 컴파일러 에서 오류가 발생 하지 않았지만 다르게 컴파일되기 시작 하면 더 나빴을 것 입니다. 이 오류는 눈에 띄지 않는 버그로부터 사용자를 보호했습니다.
LarsH

18

예, 'and'와 'or'가 혼합되어 있다면 가능합니다.

또한 논리적으로 하나의 검사가 무엇인지에 대한 좋은 아이디어입니다.

가장 좋은 방법은 잘 알려진 술어 함수를 사용하고 대부분의 점검 및 조건을 제거하는 것입니다.


6
사실, a AND b더 설명적인 이름을 가진 함수 또는 미리 계산 된 부울 값으로 대체해야 할 가능성이 매우 높습니다 .
Jeff Bridgman 2016 년

14

괄호는 의미 적으로 중복되므로 컴파일러는 신경 쓰지 않지만 붉은 청어입니다. 진정한 관심사는 프로그래머의 가독성과 이해입니다.

나는 여기서 과격한 입장을 취하고의 괄호에 진지한 "아니오"를 줄 것이다 a AND b OR c AND d. 모든 프로그래머는 부울 표현식에서 우선 순위가가는 그 마음으로 알아야 할 NOT> AND> OR 단지 기억처럼, 나의 친애하는 이모 샐리 실례 대수 표현식. 중복 구두점은 프로그래머가 읽을 수있는 이점없이 코드에 시각적 혼란을 더해줍니다.

또한 논리 및 대수 표현에 항상 괄호를 사용하면 "어딘가 까다로운 일이 있습니다. 조심하십시오"라는 표시로 사용할 수 있습니다. 즉, 기본 우선 순위 를 재정의 하고 곱하기 전에 또는 OR 전에 AND를 평가 하려는 경우 괄호는 다음 프로그래머에게 좋은 신호입니다. 필요하지 않을 때 너무 많이 사용하면 늑대를 부르는 소년이됩니다.

나는 C의 포인터 표현과 같이 대수 영역 (부울 또는 그렇지 않음) 외부의 것을 제외 하고 역 참조와 산술을 똑바로 유지하기 위해 표준 관용구보다 복잡한 것이 *p++있거나 p = p->next괄호로 묶어야합니다. 물론 Lisp, Forth 또는 Smalltalk와 같은 언어 표기법을 표현에 사용하는 언어에는이 중 어느 것도 적용되지 않습니다. 그러나 대부분의 주류 언어의 경우 논리 및 산술 우선 순위가 완전히 표준화됩니다.


1
+1, 명확성을위한 괄호는 괜찮지 만 ANDvs OR는 팀의 다른 개발자들이 알고 싶어하는 상당히 기본적인 사례입니다. 때때로 "명확성을 위해 괄호 사용"이 실제로 "괄호를 사용하므로 우선 순위를 배우기 위해 귀찮게 할 필요가 없다"고 걱정합니다.
Tim Goodman 2016 년

1
나는 함께 일하는 모든 언어에서 정기적입니다 .member전에 이항 연산자 전에, 단항 단항 연산자, *그리고 /이전 +-이전 <>==전에 &&이전에 ||할당하기 전에. 이러한 규칙은 연산자가 일반적으로 사용되는 방식 (예 : ==우선 순위가 높 +거나 1 + 1 == 2작동을 중단 하지 않음)에 대한 "상식"과 일치하기 때문에 기억하기 쉬우 며 우선 순위 질문의 95 %를 다루고 있습니다. .
Tim Goodman

4
@TimGoodman 네, 여러분의 의견에 정확히 맞습니다. 여기에있는 다른 응답자는 흑백 질문이라고 생각합니다. 항상 괄호를 사용하거나 예외는 없으며, 임의적이고 기억하기 어려운 규칙의 바다를 통해 바지 자리에 부주의하게 날아갑니다. 발견하기 어려운 버그가 있습니다. (혼합 된 은유는 매우 의도적입니다.) 분명히 올바른 방법은 적당히입니다. 코드 명확성이 중요하지만 도구도 잘 알고 있으므로 팀원의 프로그래밍 및 CS 원칙에 대한 최소한의 이해를 기대할 수 있어야합니다.
dodgethesteamroller 2016 년

8

내가 본대로 :

예, 장점 :

  • 작업 순서는 명시 적입니다.
  • 작업 순서를 이해하지 못하는 미래 개발자로부터 보호합니다.

단점 :

  • 혼란스럽고 읽기 어려운 코드가 발생할 수 있음

NO 장점 없습니다 :

  • ?

NO 단점 없습니다 :

  • 작업 순서는 암시 적
  • 작업 순서를 잘 이해하지 못하면 개발자가 코드를 유지 관리하기가 쉽지 않습니다.

잘 말하지만, "결과가 어수선 해져서 ​​읽기 어려운 코드" 가 다소 주관적 이라고 생각 합니다.
FrustratedWithFormsDesigner

2
코드의 의미를 명시 적으로 만드는 것은 어떻게 읽기가 어렵습니까?
메이슨 휠러

1
귀하의 "예 단점"에 대해 질문 할 때 다른 사람들에게 동의합니다. 나는 거의 항상 반대라고 생각합니다.

@Frustrated 반대 주장으로 주관적으로. 전혀 의미하지는 않습니다. 측정하기 어렵다.
Konrad Rudolph

1
@MasonWheeler : 많은 경우에 명시 적 패런이 매우 중요하다는 데 동의하지만 의미론을 명시 적으로 만드는 데 어떻게 도움이 될 수 있는지 알 수 있습니다. 내가 찾을 수 3 * a^2 + 2 * b^2보다 읽기 쉽게 (3 * (a^2)) + (2 * (b^2))형식과 우선 순위가 친숙하고 표준이기 때문에. 마찬가지로 코드의 의미를보다 명확하게하기 위해 함수와 매크로 (또는 컴파일러!)의 사용을 금지 할 수 있습니다. 분명히 나는 ​​그것을 옹호하지는 않지만, 왜 명시 적으로 만드는 데 한계 (균형)가 필요한지에 대한 귀하의 질문에 대답하기를 희망합니다.
LarsH

3

관련없는 괄호를 포함하거나 반대하는 주장이 있습니까? 실제 경험에 의하면 가독성을 위해 그것들을 포함시킬 가치가 있다고 제안합니까? 아니면 개발자가 진정으로 언어의 기초에 대해 자신감을 가져야한다는 신호입니까?

다른 사람이 내 코드를 다시 볼 필요가 없다면 신경 쓰지 않을 것입니다.

그러나 내 경험에서 :

  • 내 코드를 때때로 다시 본다 (때로는 몇 년이 지난 후)
  • 다른 사람들은 때때로 내 코드를 봅니다.
    • 또는 확장하거나 수정해야합니다!
  • 나 자신이나 다른 사람이 내가 쓸 때 생각했던 것을 정확하게 기억하지 못한다
  • 암호 문자를 최소화하는 암호를 작성하면 가독성이 떨어집니다.

나는 거의 항상 이것을한다. 왜냐하면 나는 다른 어떤 것보다 빨리 읽고, 작은 실수를 많이하지 않는 나의 능력을 신뢰하기 때문이다.

귀하의 경우 거의 확실하게 다음과 같은 작업을 수행합니다.

if (a AND b) then ab = true
if (c AND d) then cd = true
If (ab OR cd) Then ...

예, 더 많은 코드입니다. 예, 대신 멋진 부울 연산자를 사용할 수 있습니다. 아니요, 앞으로 1 년 이상 코드를 감추고 멋진 부울 연산자를 잘못 읽을 가능성이 마음에 들지 않습니다. AND / OR 우선 순위가 다른 언어로 코드를 작성하고이 문제를 해결하기 위해 뒤로 건너 뛰었다면 어떻게합니까? "아하! 나는 내가 한이 영리한 작은 일을 기억한다! 나는 작년에 글을 쓸 때 파 렌스를 포함시킬 필요가 없었다. 지금 기억하고있는 것은 좋은 일이다!" 그런 일이 발생하면 (혹은이 영리함을 알지 못했거나 "수정 가능한 빨리"유형의 상황에 처한 다른 사람)?

()로 구분하면 나중에 빠르게 탈지하고 이해하는 것이 훨씬 간단합니다 ...


7
그렇게하려고한다면 왜 안 ab = a AND b되겠습니까?
Eric

1
아마도 ab그렇지 않다면 변경되지 않은 채로있을 것 a AND b입니다.
Armali

3

일반적인 경우

C #에서 곱셈과 나눗셈은 덧셈과 뺄셈보다 우선합니다.

그럼에도 불구하고 코드베이스 전체에 공통 스타일을 적용하는 도구 인 StyleCop은 코드로 인해 명확하지 않을 수도있는 버그의 위험을 완화하기위한 SA1407 규칙을 따릅니다 . 이 규칙은 다음과 같은 코드로 경고를 생성합니다.

var a = 1 + 2 * 3;

StyleCop은 결과가 7이고 그렇지 않다는 것이 분명 9하지만 여전히 괄호를 넣을 것을 제안합니다.

var a = 1 + (2 * 3);

당신의 특별한 경우

특정한 경우에는 사용하는 특정 언어에서 AND와 OR보다 우선 순위가 높습니다.

이것이 모든 언어의 행동 방식은 아닙니다. 많은 사람들이 AND와 OR을 동등하게 취급합니다.

C #을 주로 사용하는 개발자로서, 처음 질문을보고 이전에 작성한 내용을 읽지 않고 코드를 읽을 때 첫 번째 유혹은 두 표현이 동일하지 않다는 의견이었습니다. 바라건대, 나는 주석을 달기 전에 전체 질문을 완전히 읽었습니다.

이 특수성과 일부 개발자가 AND 및 OR의 우선 순위가 같다고 믿기 때문에 괄호를 추가하는 것이 더욱 중요합니다.

당신이 똑똑하다는 것을 보여주기 위해 코드를 작성하지 마십시오. 언어의 모든 측면에 익숙하지 않은 사람들을 포함하여 가독성을 목표로 코드를 작성하십시오.


1
"이것은 매우 드문 일이다": Stroustrup2013에 따르면 C ++ 11은 AND와 OR의 우선 순위가 다르다 (p. 257). 파이썬 에서도 마찬가지
Dirk

10
Re : "내가 알고있는 모든 언어는 AND와 OR을 동일하게 취급합니다." 이 경우 입니다 사실, 당신은 모른다 어떤열 개에서 가장 인기있는 언어 (C, 자바, C ++, PHP, 자바 스크립트, 파이썬, C #을, 펄, SQL, 루비)를, 그리고에 대해 언급 할 수없는 위치에있다 "매우 드문"은 물론 "흔하지 않은"무엇입니까?
ruakh

1
나는 ruakh에 동의하고 C ++ 11, python, matlab 및 java를 찾았습니다.
Dirk

3
AND와 OR이 이진 연산자이고 AND보다 OR보다 우선 순위가 높은 언어는 작성자가 컴퓨터 과학과 같은 두뇌 손상을 입은 쓰레기입니다. 이것은 논리 표기법에서 비롯됩니다. 안녕하세요, "제품의 합계"란 아무 의미가 없습니까? AND에는 곱셈 (인수의 병치)을 사용하고 OR에는 + 기호를 사용하는 부울 표기법도 있습니다.
Kaz

3
@ruakh 당신은 나를 위해 내 요점을했다. 소수의 병리학 적 인 경우가 있기 때문에 표준 부울 우선 순위를 배우지 말아야하며 그렇지 않은 경우 입증 될 때까지 유지한다고 가정하지는 않습니다. 여기서는 임의의 설계 결정에 대해 이야기하지 않습니다. 부울 대수는 컴퓨터보다 오래 전에 발명되었습니다. 또한, 당신이 말하는 파스칼 사양을 보여주세요. 여기여기에 OR 앞에 AND가 표시됩니다.
dodgethesteamroller 2014 년

1

모든 사람들이 말했듯이 표현을 더 읽기 쉽게 만들 때마다 괄호를 사용하십시오. 그러나 표현식이 복잡 하면 하위 표현식에 새로운 함수도입하는 것이 좋습니다.


0

아니면 개발자가 진정으로 언어의 기초에 대해 자신감을 가져야한다는 신호입니까?

언어 를 단수로 엄격하게 사용한다면 어쩌면. 이제 이전부터 현대에 이르기까지, 컴파일에서 스크립팅, SQL, 지난 달에 개발 한 DSL에 이르기까지 모든 언어 를 사용하십시오.

보지 않고 각 언어에 대한 정확한 우선 순위 규칙을 기억하십니까?


1
위의 @Cape Cod Gunny가 언급했듯이, 언어가 차가운 것을 알고 있다고 생각하더라도 컴파일러 / 런타임은 아래에서 변경 될 수 있습니다.
Jordan

0

"필요하지 않은 경우에도 논리 문에 괄호를 사용해야합니까?"

두 사람이 도움이 될 것이기 때문에 그렇습니다.

  • 지식, 역량 또는 스타일을 가진 다음 프로그래머는 다를 수 있습니다

  • 나중에이 코드로 돌아 오는 미래!


-1

당신이, 음, 정확히 대수와 같은 꽤 많이 보이게 어떤 방법으로 작성하고, 당신은 확실히위한 괄호 사용하십시오 복잡한 조건문 "부울 대수가"있다가, 대수학 , 당신이하지 않을까요?

정말 유용한 규칙은 부정 규칙입니다.

!(A || B) <=> !A && !B
!(A && B) <=> !A || !B

또는 좀 더 명확한 형식으로 :

!(A + B) <=> !A * !B
!(A * B) <=> !A + !B

이것은 다음과 같이 쓸 때 실제로 대수적입니다.

-1*(A + B) = -A + -B
-1*(A * B) = -A * -B

그러나 대수 단순화 및 확장에 대한 생각을 적용 할 수도 있습니다.

(A && B) || (C && D) => 
((A && B) || C) && ((A && B) || D) => 
(AC && BC) && (AD && BD) =>
AC && BC && AD && BD

코드에서는 다음과 같이 작성해야합니다.

(A||C) && (B||C) && (A||D) && (B||D)

또는 좀 더 명확한 형식으로 :

(A + B) * (C + D) => 
((A + B) * C) + ((A + B) * D) => 
(AC + BC) + (AD + BD) =>
AC + BC + AD + BD

기본적으로 조건은 여전히 ​​대수적 표현이며 괄호를 명확하게 사용하면 "이 공식을 단순화 또는 확장"이라는 오래된 개념을 포함하여 이미 알고있는 다양한 대수 규칙을 표현에 더 쉽게 적용 할 수 있습니다.


2
반드시 사실이 아닌 것으로 가정하여 답변을 이끌어 가기 때문에 실제로 질문에 대답하고 있는지 잘 모르겠습니다. 대수에 괄호를 사용합니까? 항상 그렇지는 않아. 가독성에 도움이된다면 분명히 여기에 다른 사람들이 이미 표현했습니다. 수학 대수를 다른 형태로 확장하는 것은 프로그래밍과 정확히 일대일 대응이 아닙니다. 몇 개의 문자열 값의 상태를 확인하려면 어떻게해야합니까?
Derek

해당 부울 대수가 Parens를 보증하기에 충분히 복잡한 경우 조건부에서 Parens를 사용해야합니다. Parens를 보증하지 않을 정도로 간단하다면, 필요하지 않거나하지 않아도됩니다. 어느 쪽이든, 수학적 표현처럼 생각하면 문제가 명확해질 것입니다.
Narfanator 2016 년

위의 예에서는 2-4 개의 부울을 사용합니다. 두 개 이상의 문자열 값의 상태를 확인하면 매핑됩니다. 각 검사는 하나의 부울 변수에 해당합니다. 해당 검사가 정수 또는 문자열 동등인지 여부에 관계없이; 문자열, 배열 또는 해시 포함; 복잡한 표현 그 자체는 중요하지 않습니다. 중요한 것은 표현에서 참 / 거짓을 두 번 이상 측정한다는 것입니다.
Narfanator 2016 년

2
그냥 하찮은 일에 속 태우고 있지만,에서 !(A + B) <=> !A + !B-1*(A + B) = -A + -B운영자가에서 반전 된 안 +*두 번째 식?
Jeff Bridgman 2016 년

-1

선택 사항 인 경우에도 괄호를 사용합니다. 코드를 작성하는 사람과 해당 코드를 볼 준비가 된 사람 모두를 위해 더 잘 이해하는 데 도움이되는 이유는 무엇입니까? 귀하의 경우 부울 연산자조차도 처음에는 잘 작동 할 수있는 우선 순위가 있지만 모든 경우에 도움이 될 것이라고 말할 수는 없습니다. 그래서 나는 그것이 필요하거나 선택적으로 필요한 조건에서 사용자 괄호를 선호합니다.


-1

예. 코드가 더 명확하다고 생각되는 경우에 사용해야합니다. 코드 내에서 주석을 읽지 않고 다른 사람들이 이해할 수 있도록 코드가 명확해야합니다. 따라서 괄호와 중괄호를 사용하는 것이 좋습니다. 또한 회사 / 팀의 특정 관행에 따라 달라질 수 있습니다. 한 가지 접근 방식 만 유지하고 혼합하지 마십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.