== true로 큰 거래를합니까?


105

끊임없이 쓰는 내 동료가 있습니다.

if (someBool == true)

그것은 나를 벽으로 몰아 넣는다! 내가 그것을 많이해야합니까 아니면 그냥 떨어 뜨려야합니까?


12
나는 명시 if (some_flag == true)적이지만 암시 적 if (is_something)또는을 선호합니다 if (has_something). 변수 이름을 적어 둡니다.
fredoverflow

69
동료에게 유형 someBool == true도 부울 이라는 점을 상기 시키십시오 . 따라서 동일한 논리에 따라이어야합니다 if ((someBool == true) == true).
Mike Seymour

2
@GSto : 나는 당신이 그것을 알고 있다고 생각하지만, PHP에서 당신은 아무것도 부울에 "캐스트"하고 실제로 유용 할 수 있습니다.
zneak

2
@zneak 또는 더 명확하고 사용할 수 있습니다 $var = (bool) some_expression. 그리고 대부분의 경우 PHP가 필요한 변환을 동적으로 수행하므로 중요하지 않습니다.
waiwai933

4
실수로 == 대신에 =를 입력 한 경우 (true == someBool) 인 경우 항상 상수를 먼저 먼저 확인하십시오. [예, 농담이야!]
Steven A. Lowe

답변:


126

삶이나 죽음이 아닌 중복 코드 일뿐입니다. 하나....

많은 일 someBool이 일어나면 이름 이 어떻게 지정 되는지 문제가 될 수 있습니다 . 좋은 이름은==true

if(IsSomeCondition)

또는

if(hasCondition)

또는

if(somethingExists)

예를 들어.


이것은 나에게 가장 진실합니다. 명확성 및 명명 기술에 관한 모든 것, 원래의 구문은 그렇게 나쁘지는 않지만 더 나은 코드의 올바른 경로입니다.
TJB

2
날 이길! 적절한 이름을 지정하지 않으면 더 간결한 동등성이 전혀 의미가 없습니다.
Troy Hunt

4
someBool == true명확성을 위해 레거시 코드에 여러 번 사용해야 했습니다. 그러나 처음부터 쓰면 변수의 이름을 적절하게 지정하고if (isSomething)
nimcap

이름이 SomeBool이라고 가정하면 이름을 지정하면이 문제를 해결할 수 있지만 모든 유형을 의미 할 수 있습니다 (어쩌면 배열의 부울 수량과 같은 정수?). 부울에는 일종의 실존 동사가 필요합니다. 그렇지 않으면 항상 자체적으로 읽기가 어렵습니다.
Morgan Herlocker

나는 가독성에 관한 모든 것에 동의합니다. 변수의 이름이 잘 지정되어 있으면 필요하지 않습니다. 표현식이 더 잘 읽 히면 "== true"로 갈 것입니다. (추악한) "if (! ())"대신 "== false"를 사용하면 일관성이 있습니다.
Ronny Brendel

71

내가 볼 때 someBool == true, 나는 프로그래머가 평가에 대한 아이디어를 내재화하지 않은 것처럼 느낄 수는 없다 . 이것은 근본적인 결함이다.

그러나 나는 아이들에게 대학 교육 프로그램에서 몇 여름을 보냈기 때문에 내 시각이 왜곡되었습니다. 일단 개념을 파악한 후에는 중복성이 분명해졌습니다.

다른 유능한 전문 프로그래머에게는 그렇지 않을 것입니다. 아마도 그들은 초기 프로그래밍에서 개발 한 나쁜 습관 일 것입니다. 그러나 누군가 인터뷰에서 내가 본 첫 번째 일이라면 여전히 겁이 날 것입니다.


나는 이것을 습관에 너무 빨리 분필하지 않을 것입니다. 나는 전문 프로그래머의 입에서 정말 놀라운 것들을 들었습니다. 보통 grokkers 중 하나에 의해 그후 곧 이어 "이 어떻게했는지 지금까지 일을?"
dash-tom-bang

12
평가에 대해 전적으로 동의하십시오. 행사에서 나는 "어디서 멈춰?" if (((((x == true) == true) == true)! = false) // 등등 ...
yawmark

1
때때로 나는 글을 쓸 if (c == true) return true; else return false;것이지만 99 %의 시간 (1 %는 내가 어떤 것을 놓치지 않았다는 것을 확신 할 수 없기 때문에 존재한다) 즉시 모든 것을 알아 차리고로 바꿀 것이다 return c. 나는 대부분의 유능한 프로그래머들이 경력 초기에 습관을 개발한다면 비슷한 일을해야한다고 기대할 것입니다. 내가 기대하지 않는 것은 wtf 응답입니다.
Lie Ryan

1
오 소년, 사고의 예술. 나는 말 그대로 지난 주 우리의 코드베이스에서이 우연히 만났다. if (!someCondition) { someCondition = false; }코드에서 일부 (그리고 많은) 중복성과 일부 불가능 성을 보았지만 실제로는 누군가가 실제로 작성했다고 생각하기에 너무 단순하지만 심해졌습니다. 심지어 여러 번.
Anthony Pegram

1
몇 가지 사례가 if(x) x=true;중복되지는 않았지만 x=!!x;(정규화는 x를 0/1로)
jkerian

58

그것은 나를 미치게하지만, 나는 그들에게 중복성을 건설적인 방식으로 언급하고 그들이 일치하지 않더라도 그것을 포기한다고 말하고 싶습니다.

또는이 방법을 시도해 볼 수 있습니다 .
사용자 : 부울을 평가하기 위해 다음 코드 규칙을 사용할 수 있습니까?

if (someBool==true)&&(true==true) {}

그들 : 우리는 왜 그렇게할까요? 이 문장의 후반부는 중복되며 항상 참으로 평가됩니다.

당신 : 조지, 당신 말이 맞아요. 바보 나. 그런 다음 모든 중복성이없는 버전을 사용하십시오. 어때요?

if (someBool) {}

6
예, 동의했습니다. 어리석은 일이지만 싸움을 골라야 하며이 코드는 실제로 동료가하는 일을하고 있습니다. "도대체 뭐가 잘못 됐어?" 그런 다음 떨어 뜨립니다. 비록 그들이 "if (someBool! = true)"또는 "if (! someBool == true)"또는 다른 그러한 회선과 같은 크랩을 당기기 시작한다면, 그것은
따를

3
if (someBool == true)보다 (someBool == false)가 어떻게 나쁩니 까?
FinnNk

5
true=true컴파일되지 않습니다, 당신은 할 수없는 지정true;-)
fredoverflow

1
나는 if(somebool == false)또는에 익숙해 !=졌지만 항상 거짓이 아니라 사실이 아닙니다. 나는 그것을 중복 발견하지만 코딩 표준은 if()함수 호출처럼 보이는 부분이 공백 사이의 공백을 읽도록 도와줍니다. 내 자신의 바보는 바보이지만 if (somePointer)날지 않습니다. if (somePointer != NULL)포인터가 부울이 아니기 때문에 선호합니다 .
dash-tom-bang

5
비논리적이거나 (마이크로) 중복성이 아닌 가독성에 관한 것
Ronny Brendel

45

동료와의 사소한 문제가 사소한 일이라면 스스로 운이 좋다고 생각합니다.


5
잘 들어, 완벽을 위해 노력하지만 좋은 더 큰 물고기가 있습니다
TJB

3
토론 할 가치가있는 모든 문제에 대해이 말을한다고 생각합니다.
Dave Van den Eynde

2
잠재적으로 훨씬 더 큰 문제를 나타냅니다. 차고의 천장에 작은 갈색 얼룩이 큰 것처럼 보이지 않을 있지만 큰 누수가 발생할 수 있습니다.
Josh

42

이 나쁜 습관을 반드시 중단해야합니다. 부드럽게...

코드를 다음과 같이 바꾸는 등호를 쓰는 것은 잊어 버리기 쉽습니다.

if (someBool = true)

예를 들어 C #에서는 오류가 아닌 경고 만 생성합니다. 따라서 경고를 오류로 취급하지 않으면 코드가 실행되고 변수를 true로 설정하고 항상 조건을 입력하십시오.


6
이것은 관련 논쟁이 아닙니다. 그런 언어로 일하고 있다면, 사실을 다른쪽으로 옮기면됩니다. 문제는 사실을 포함할지 여부에 관한 것입니다.
Cam

8
@Cam : 당신이 요점을 놓치고 있습니다. 거꾸로 논리 나는 제안하지 않습니다.
Guffa

15
@Cam-그는 이것이 문제가 될 수있는 실제 사례를 제시하고 있습니다. 나는 이것이 매우 관련이 있다고 말할 것입니다.
ChaosPandion

1
@ 구파 캠은 매우 맞습니다. 이것이 if 블록에서 == (anyType) 사용을 중지하는 이유는 아닙니다.
Ronny Brendel

2
@Ronny : 아니요, 언어가 실제로 유형을 조건으로 허용하지 않는 한 모든 유형에서 발생할 수 없습니다. 이 if (answer = 42) {}표현은 부울이 아니기 때문에 단순히 컴파일되지 않습니다.
Guffa

21

나는 당신에 동의하지만, 나는 악마의 옹호자를 여기서 할 것입니다 :


언어와 변수 이름에 따라 x == true가 적절합니다.

정수 유형에 대한 정적 입력 및 유형 강제가있는 언어에서 다음 상황을 고려하십시오.

if (actionsAllowed){
    //do actions, since they are allowed
    //...
}

코드의이 섹션을 읽는 사람은 actionsAllowed가 부울 변수라는 것을 즉시 인식하지 못할 수 있습니다. 또한 허용되는 작업 수를 나타내는 정수일 수도 있습니다. 따라서 == true를 추가하면 x가 부울이고, 부울에 강제되는 정수가 아닌 것이 분명해집니다.

if (actionsAllowed == true){
    //do actions, since they are allowed
    //...
}

13
가독성 ==
GoodThing

5
if ((readability ==
GoodThing

1
bool isGoodThing = 가독성? true : (codingStandards? true : (internalizationOfConcept? true : false));
johnc

17
변수 이름을 바꿉니다 actionsAreAllowed.
Graeme Perrow

9
if (x) { ...을 쓰면 이미 x부울이거나 부울로 변환 할 수 있다고 주장하는 것 입니다. 당신이 부르는 것은 관련이 없습니다.
Daniel Earwicker

15

nullable bools는 어떻습니까?

bool? MyFlag = null;

if (MyFlag == true)
    ;  

if (MyFlag)  // error, doesn't compile!
    ; 

if (MyFlag.Value)
johnc

1
모든 언어에 nullable bool이있는 것은 아니며 많은 언어가 두 번째 구문을 허용합니다.
zneak

1
@johnc : "if (MyFlag.Value)"는 MyFlag가 null 인 경우 (MyFlag.HasValue를 확인하여 테스트 할 수있는 경우) 예외를 발생시킬 수 있으므로 실제로 원하는 것을 수행하지 않을 수 있습니다.
Ludovic Chabant

4
이것은 nullable bools와 함께 내 애완 동물 친구입니다 :)
Jarrod Dixon

3
부울? isValid = null; if (isValid ?? false);
skolima

11

일반적으로, 해당 컨벤션이 프로젝트를 중대한 방식으로 방해하지 않는 한 코딩 컨벤션을 크게 활용하고 싶지는 않습니다. 코드 영역과 주요 밑줄만큼 작은 것들에 대해 많은 논쟁이 제기되는 것을 보았습니다.

== true, 조건문에 추가하는 데 아무런 문제가 없습니다 . 사실, == false부정적인 조건을 테스트 할 때 느낌표가 아니라 사용하는 습관이 있습니다. 더 읽기 쉽다고 생각합니다.

기존의 협약이 있다면 변경할 이유가없는 한 따르십시오. 그러나 실제로 악취가 나는 것은 가치가 없습니다.


1
언어에 따라 someValue가 true로 평가 되더라도 반드시 true와 같을 필요는 없습니다. 예를 들어 (9 == True)Python에서는 false로 평가되며 C ++에서도 비슷한 것으로 생각합니다.
dash-tom-bang

코드 영역과 주요 밑줄로 인해 사람들의 얼굴을 펀치하고 싶습니다.
MGOwen

11

Ack. 나는 그 사람입니다. 수치심, 수치심 그것은 내가 배운 방법이고, 내가 머리에서 "자동 서식"하는 방법입니다. 내가 Joel의 선호하는 구문을 사용하는 유일한 것은 bool 변수에 "is"와 같은 동사 접두사가있을 때입니다. 동사가 필요합니다. "is", "can", "did"또는 그렇지 않으면 "="동사를 제공하기 위해 ==가 필요합니다. 나는 그 습관을 잃지 않을 것이므로, 길거리에서 나에게 '안녕하세요'라고 말하지 않으면 이해할 것입니다.


7
나쁜 것이 아닙니다. 실제 텍스트처럼 읽는 코드는 암시 적 foo보다 훨씬 좋습니다. 가독성을 위해 습관을 유지하십시오.
Ronny Brendel

11

"부울 광기 코드"를 상기시킵니다.

if(someBool == true)
   otherBool = false;
else
   otherBool = true

대신에:

 otherBool = !someBool

재밌 네요. 난처한 사람들이있는 시스템을 유지해야 했어요. 그것은 나를 미쳤다.
Tjaart

8

개인적으로, 나는 C 기반 언어로 "하지"라고 말하는 방법을 강하게 싫어합니다. 그 작은 느낌표는 간과하기 쉽지 않습니다.

따라서 나는 그것을 완전히 작성합니다 :

if (someCondition == false) {

잠시 읽은 후에도 대칭을 원합니다

if (someCondition == true) {

따라서 !대신을 사용하여 C의 인공물이라고 생각하십시오 not.


3
C ++ 에는 실제로 not연산자 있으며 C도 마찬가지입니다 (한 번 표준 헤더 포함 <iso646.h>). 이 헤더를 사용하고 싶지 않거나 (또는 ​​Java 또는 C #으로 붙어있는 경우) 느낌표 뒤에 공백을 두는 것이 좋습니다 if (! condition). 이것은 다소 눈에 띄게 만듭니다.
Konrad Rudolph

1
나는 자바를한다. not옵션이 아닙니다.

6

언어에 따라 다르지만 일반적으로 나쁜 생각입니다 ...

C에서는 절대로 이렇게 하지 마십시오. 테스트중인 값이 false (0이 아님)가 아니라 "true"로 정의 된 단일 값과 같지 않은 상황을 찾기가 너무 쉽습니다.

Ruby에서는 부울 true를 제외한 모든 항목에서 실패하려는 경우에만이 작업을 수행하십시오.

부울 유형의 C ++ 및 기타 정적 언어에서는 중복 되며 주석 =대신 ==언급 된 대신 잘못 입력 하거나 승격 오류가 발생하면 프로그래밍 오류가 발생할 수 있습니다 .


실제로 할당 연산자가 C ++와 같은 값을 반환하는 언어에서는 if (b == true) {중복이 아닙니다. 실수로에 할당되었을 수도 있으므로 약간 위험 true합니다 b.
Stephen C

4
C ++에서는 중복되지 않고 위험합니다. 당신이 작성하는 경우 if (b == true), 그리고 b부울 아닌, 형식 변환은 잘못된 방향으로 이동합니다. A는 bool당신이 쓰는 경우 일반적으로 값 1과 적절한 정수 계열 형식으로 승격되는 필수 유형, 말, int b(2); if (b == true)다음 true하게 int비교의 목적을 위해 값 1이 아닌이 b형태를 강요하고 bool올바른 결과를 줄 것이다.
David Thornley

@DavidThornley, 컴파일러에서 경고를 설정하십시오. 경고를 오류로 취급하는 것은 피하는 것보다 방어적인 프로그래밍 기술 ==입니다.
Abyx

5

그게 나쁘다고 생각하니? 어때요?

if(someCondition) {
  return true;
} else {
  return false;
}

2
내가 이것을 몇 번이나 보았는지. 이는 ReSharper와 같은 도구에 적합합니다.
Job

예-덩어리를 고용하는 경우 ReSharper를 구입하십시오.
커크 브로드 허스트

4

나는 선호한다

if (bVal)

또는

if (!bVal)

그러나, 나는 그것을 키우는 것이 사람들을 화나게 할 것을 두려워합니다. 그래서 나의 충고는 그것을 잊어 버리는 것입니다. 죄송합니다!


4
그것이 처음이 아니 if (!bNotVal) 거나 if (bNotVal)심지어 는 성스러운 모든 것을 사랑 하십시오. 이름이 음수이면 모든 것을 읽기가 어렵습니다.
dash-tom-bang

2
나는 멍청한 개발자가 NotNoted라는 것을 알고 있었다. if (isNotConnected == true) ... yuck
johnc

4

그가 잘못하고 있다고 말해야합니다.

그...

if (true == someBool) {

}

그가 하나를 잊어 버린다면 그는 글쓰기 스타일에 큰 어려움을 겪고 있습니다.


3

어때요?

if (x == "true")

왜 STRING입니까?!


레거시 PHP 코드를 올바르게 작성하고 있으며 때로는 다음과 같은 것을 발견합니다 if(preg_match('/title/', implode($_POST))){. PHP는 더 나은 직업을 찾아야한다고 말했다.
Keyo

4
예, 또한 (x == "1")인지 확인하지만 일반적으로 DB 디자인이 좋지 않습니다.
atfergs

x사용자 입력 (예 : 구성 파일 또는 웹 서비스)에서 나온 유사한 구문을 사용했습니다 . 그러나 나는 보통 다른 가치가있는 값을 허용하므로 더 비슷하게 끝납니다if x.lower().strip() in ["true", "yes", "on", "1"]
eswald

3

실제로 널 입력 가능하면 x == true 테스트가 필요합니다. :)


3

그런 코드를 작성합니다!

이유는 다음과 같습니다.

"if bla == true"는 문장처럼 읽습니다. "if bla"는 많은 경우에 사용되지 않습니다. 실제 코드를 읽을 때 잘못 들립니다.

또한 컴파일러는 if 블록의 할당에 대해 경고하므로 == true를 사용할 때 실제로 위험은 없습니다. (=와 혼동)

"== true"를 쓰지 않는 사람도 "== false"에 "! ()"를 사용합니까? 정말 못 생겼어 "== false"를 사용하는 경우 진실을 확인하는 두 가지 방법이 아니라 "== true"도 사용하는 것이 매우 일관됩니다.


3
"if bla"이 문장처럼 읽히지 않는다고 말하면 ... 변수의 이름이 올바르게 지정되지 않았 음을 의미합니다 ... 이것의 문제점 : if (userHasRights) doSomething ()
JoelFan

"많은 경우에". 네, 맞아요. 이름 바꾸기도 좋습니다. "if (QWidget :: acceptDrops () == true)"를 사용하면 이름을 바꿀 수 없습니다. 아마 그것의 이름을 doesAcceptDrops ()로 지정하는 것이 좋을 것입니다 ... 너무 번거 로움 (그리고 API에서 생략 규칙을 사용하여 일관성을 유지하는 것은 불가능합니다), 다른 "== whatever"-ifs와 일치 나는 그것을 생략하지 말 것을 강력히 추천한다. 그래서 그것은 다르게 보이거나 일관성이 없다.
Ronny Brendel

3

팀의 일원으로 일하고 있으므로 이러한 일을 함께 해결해야합니다. "다른 사람들과 잘 어울린다"는 초등학교 이후에도 여전히 중요한 성격 특성입니다. :)


2

일반적으로 '== true'는 생략하지만 팀의 코딩 표준에 포함되어 있지 않으면 잠시 논의 할 가치가 없습니다.


3
또한 팀의 코딩 표준에있는 경우 이와 같은 퀴즈를 제거하기 위해 표준을 다시 평가해야합니다.
JohnFx

동의했다! 그래도
만약을 위해서

2

주로 C # 개발자로 동의하지만 이것이 항상 그런 것은 아닙니다. 예를 들어, Javascript에서 ===는 유형 유착을 수행합니다. var x = 3 이라고 가정하면 다음과 같습니다.

if(x) --> true

동안

if (x === true) --> false

JS에서도 if (x == true)를 사용하지 않고 생각해야 할 것이기 때문에 ==와 다릅니다 .

내 사무실에 나타난 다른 점에 대한 이런 종류의 접촉.

bool b = false;

C #에서, 부울 b; 충분하고 bfalse로 초기화 합니다. 그러나 위의 줄을 작성하는 것이 더 명확하며 최적화 중에 컴파일러가이를 제거해야합니다.

그래서 내 요점은 항상 그렇게 분명하지는 않지만 좋은 습관이 아니며 많은 것이 언어 기능 / 단점뿐만 아니라 선호도에 달려 있다고 생각합니다.


bool b;b필드 인 경우에만 false로 초기화됩니다 . 로컬 변수를 명시 적으로 초기화해야합니다.
Matthew Flaschen

+1 동의했습니다. 다른 (스크립트) 언어와 동일한 문제입니다. 부울 true또는 "true" 를 테스트하려면 명시 적이어야합니다 . 예를 들어, 비어 있지 않은 문자열은 일부 언어에서는 고려 == true되지 않습니다 === true.
Martin Wickman

2

예,하지만 변수가 널 입력 가능하면 어떻게됩니까? (부울?)

일부 언어 (C #)는 'true'와 비교하거나 캐스팅하거나 비교해야합니다.

bool? isAccepted = true;

if((bool)isAccepted)
{...}

if(isAccepted == true)
{...}

2

젊은이는 규칙을 알고 있지만 노인은 예외를 알고 있습니다.)

최신 C#에서을 다루는 경우 null-able bool다음을 수행해야합니다.

bool? x = null;
bool? y = true;
bool? z = false;
if (x == true || y == true || z == true) {
    // That was the only way that is reasonably readable that I know of
    // to accomplish this expression.
}

tristate가 문제가되지 않는 경우, 보통 무언가를 true/ 와 비교할 이유가 없어야합니다 True. 그러나과 Python같은 다른 언어 에서는 부울이 아닌 식을 C/C++수행 할 수 있습니다 if. 이 언어에는 정수, 포인터, 목록 등을 참 또는 거짓으로 해석하는 고유 한 규칙이 있습니다. 때때로 당신은 그것을 원하지 않습니다. 예를 들어,이 Python 스 니펫에서 :

x = True
y = 'abcdef'
z1 = x and y
z2 = (x == True) and (y == True)

여기 z있어야 True하지만, z2있어야합니다 False. 자, Clojure이 - 언어는 또 다른 방법으로이 문제를 접근 and기능은 반드시에 평가하지 않습니다 bool,하지만이 if그것을 처리 할 수 있습니다.

에 관계없이 언어, 언제든지 당신은 자신이 뭔가를 비교 발견 True하거나 False, 아마 주석 가치가있다.


첫 번째 문제는 끔찍한 변수 이름을 사용하여 잘못된 전제 IMO에서 비롯됩니다. x, y, z의 이름 notExceptButHasXexceptNotButIsntY,, doNotUnlessIsExceptZ? 이것이 문제의 가독성을 어떻게 만드는가? x, y, z의 이름을 "isEnabled", "isEffective", "hasProperty"와 같은 이름으로 지정하면 명령문이 or isEnabled || isEffective || hasProperty보다 비교하기 훨씬 쉽습니다 . truefalse
Thomas

1

그러한 코딩은 저에게도 잘못된 길을 문지른 것입니다. 예제 식별자의 이름이 "someBool"이지만 부울로 보장되지 않은 변수에서 실수로 해당 코딩 스타일을 사용하면 의도하지 않은 동작이 발생할 수 있습니다. "someBool"값이 "true"또는 "false"가 아닌 경우 결과는 false입니다.

나는 작년에 그러한 구성에 대해 눈이 빛나기 때문에 식별하기 어려운 코딩 스타일로 인해 매우 미묘한 버그가 발생했습니다. "어떻게 틀렸을 까?" "(var)"또는 "(! var)"와 같이 잘 이해 된 표현식의 경우에도 동작을 확인하지 않고 읽거나 코딩합니다.

그래서 코드베이스에 그러한 버그의 존재를 줄이기 위해 몇 가지 코딩 표준을 도입했으며 그러한 미묘한 버그가 나중에 언젠가 우연히 발생할 가능성을 제시했습니다.

  1. 모든 표현은 의도에 따라 괄호로 묶어야합니다.
  2. 모든 부울 테스트는 "suchBool! = false"와 같이 음수로 표시해야합니다.

새로운 스타일에 맞지 않는 코드를 정리함으로써 그러한 미묘한 버그의 몇 가지 사례를 더 찾아 내 수정했습니다.


1
someBool이 TRUE / FALSE 이외의 다른 것이 될 수있는 것은 나쁜 코딩 관행입니다.
AttackingHobo

@AttackingHobo, 그것은 언어에 부울 유형이 없거나 원하는 행동을 제공하기 위해 클래스를 사용하지 않는 함정 중 하나입니다.
Huperniketes

1

다음과 같은 이유로 ActionScript 2에서이 기능을 항상 사용해야했습니다.

var something:Boolean = org.black.box.unknown.ThisMightNotExistYet();

// this is slightly ambiguous
if(something)
{
}

// because if you allow undefined you might actually mean
if(false != something)
{
}

// which can mean something different than
if(true == something)
{
}

// and comparing against what you actually MEAN is less script than
if(undefined != value && value)
{
}

따라서 거의 항상 구체적으로 작성하는 것이 가장 좋습니다.


1

동의한다. 특히 강력한 유형의 언어로 된 중복 구조입니다.

부울을 잘못 오용하기 위해 Javascript에서 이러한 종류의 구성을 여러 번 발견했습니다 (특히 100 + 라인과 같이 일부 스파게티와 같은 괴물 함수에서).

//create the variable, not initializing it
var flag;
//...
//assing a value to the var, by the example 
flag=$("mycheckbox").selected;
//...

//and at the moment of use it:
if(flag!=true) {
   //code to execute when the checkbox is unchecked
}

이 언어에서 엄격한 유형 정의가 없기 때문에 일부 프로그래머는 false|undefined값을 엉망으로 만들 필요가 없습니다 .


1

다음과 같은 코드를 가진 동료가 있습니다.

if(something == true)

그런 다음 일종의 테스트 / 디버깅을 위해이 블록을 호출하지 않기를 원하므로 다음과 같이 변경합니다.

if(something == true && false)

그리고 때때로 그는 그것을 다음과 같이 바꿀 것입니다 :

if(false)

최악의 점은, 이런 유형의 디버깅이 때때로 저를 문지르고 다른 개발자가 읽는 것이 실제로 나쁘다는 것입니다!


0

코드베이스에서 일관성이 중요하다고 말하고 싶습니다. 따라서 조직에서 주로 사용되는 스타일을 사용해야합니다 . 선호하는 스타일을 공식 회사 코딩 지침의 일부로 만드십시오. 이미 지침에 있다면 따르십시오.

(즉, 그것은 또한 실제로 나를 귀찮게 할 것입니다. 그러나 아마도 그것을 크게 만들 수는 없습니다.)


0

extra == true를 배치하지 않는 것이 좋지만 실수로 실수로 포함시키고 눈치 채지 못하는 경우가 있습니다. 그 사람은 알지 못하고 실수로 배치하지 않았을 수 있습니다. 내 코드를 다시 읽고 때로는 여분의 == true를 배치하여 == true를 제거하는 것을 알 수 있습니다. 나는 때때로 그것을 알아 차리지 못하고 그것을 중복 배치했다는 것을 누군가에게 행복하게 환영 할 것입니다.


0

어때요?

int j = 1;
for (int i=1; i>=j; i++) ...

그래, 나는 그것을 보았다.

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