2017-01-27 5 views
1

부울 '&'연산자가 발생하면 오류가 발생하고 '& &'연산자 만 사용할 수 있습니다 (숫자에 대한 비트 단위 작업을 위해 & 연산자가 계속 허용됨) ?Android Studio : '&'대신 '&&'를 적용하려면 lint를 사용 하시겠습니까?

TL; DR : 아마 알고있는 '& &'운영자가 거짓으로 평가 첫 번째 피연산자에서 피연산자 평가 정지하면서 상기 AND 연산을 수행하기 전에, 자바의 '&'연산자는 두 피연산자를 평가한다.

개인적으로이 구분은 혼란스럽고 무의미합니다. fn의 값을 호출하지 말아야한다는 것을 의미

if (a != null && fn (a)) { ... } 

다음 '& &'연산자를 사용하면 같은 일을 할 수 있습니다. 실수로 작성한 경우 :

if (a != null & fn (a)) { ... } 

전체 테스트는 완전히 의미가 없습니다. 이런 오타가 결코 생기지 않도록하고 싶습니다. 린터 규칙은 이것을 강제하는 완벽한 방법입니다.

linter 규칙은 피연산자 유형을 구분해야합니다. &을 숫자와 함께 사용하면 그 의미는 비트 단위로 연산자입니다. 나는 이것이 매우 유용하기 때문에 물론 이것을 금지하고 싶지 않습니다. 또한 OR 연산자 |||도 비슷한 방식으로 동작하므로 수치 연산을 허용하면서 부울 값에 |을 허용하지 않으려합니다. 그래서 기본적으로 :

int a = (3 & 4);    // OK 
boolean b = (true && false); // OK 
boolean c = (true & false); // linter error, hopefully 
int d = (5 | 7);    // OK 
boolean e = (true || false); // OK 
boolean f = (true | false); // linter error, hopefully 
+1

'&'는 적절한 상황에서 유용하며 무의미하거나 무용하지 않습니다. – AntonH

+0

모두 개인적인 취향입니다. C++과 JavaScript에서 나는 &&로 익숙해졌고 다른 것에 대한 필요성을 느끼지 못합니다. –

+0

@digorydoo \t 가끔 비트를 조작하고 싶습니까? –

답변

0

확실히 부울 '&'연산자의 발생이 오류의 원인 만 '& &'연산자를 수 있도록 안드로이드 스튜디오 린터 설정에서 옵션이 있습니까?

짧은 대답은 "아니오"입니다.

사용자 고유의 린트 규칙을 작성할 수 있지만 (샘플의 경우 here 참조) IntelliJ의 기본 옵션은 아닙니다.

"개인 취향"의 문제가 아닙니다. &&&은 모두 이유가 있기 때문에 |||처럼 존재합니다.

부울 명령문에 관해서는 차이점이 있습니다. 그러나 근본적인 차이점은 &은 비트 "and"이며 &&은 논리적 "and"입니다.

누군가가 비트 ","를 원할 수도있는 상황이 많아서 그 사용을 담요 오류로 만드는 것은 좋은 생각이 아닙니다. 가장 보편적 인 사용 사례는이를 마스크로 사용하는 경우입니다.

예를 들어, MotionEvent의 getAction() 메서드는 포인터 인덱스와 동작이 모두있는 정수를 반환합니다.액션을 얻으려면 반환 값을 마스크 (예 : getAction() & ACTION_MASK)해야합니다.

+0

부울 피연산자에 대해서만 &를 금지하고 싶은지 확인하기 위해 질문을 업데이트했습니다. 내 의견으로는, & _ 부울 피연산자 _는 사용할 수 없지만 물론 비트 연산자는 매우 유용합니다. –