2016-06-28 3 views
1

IDEA는 (object.method() == CONSTANT)(CONSTANT == object.method())과 같이 비교할 것을 제안하지만 이유는 없습니다. 두 번째 방법이 실제로 더 나은가요? 그렇다면 왜?왜 IntelliJ IDEA는 비교에서 처음으로 상수를 선호합니까?

단락 회로 연산자 &&||에 대한 순서가 중요하지만 다른 이진 연산자의 경우 함수가 반드시 평가되어야한다는 것을 알고 있습니다. 내가 여기서 무엇을 놓치고 있니?

IntelliJ IDEA 2016 1.3을 사용합니다.

+1

제안을 수락하면 다시 뒤집을 것을 제안합니다. 가장 가독성이 높은 것을 찾는 것은 당신에게 달려 있습니다. 그렇지 않으면 중요하지 않습니다. –

+1

또한 [Yoda 조건 wiki 페이지] (https://en.wikipedia.org/wiki/Yoda_conditions)에서 이점 (일부는 아래 답변에 표시)과 비평 인 – Morfic

+0

을 모두 볼 수 있습니다 @JBNizet'while (tree.children(). length == 1)'의 경우, 한 번 뒤집어서 뒤집기를 제안하지만 뒤집기를 수락하면 아무 것도하지 않습니다. –

답변

7

IntelliJ IDEA는 먼저 상수를 선호하지 않습니다. "비교의 왼쪽에있는 상수"와 "비교의 오른쪽에있는 상수"라는 두 가지 검사가 있는데, 둘 다 기본적으로 비활성화되어 있습니다. 경고로 강조 표시된 object.method() == CONSTANT과 같은 코드가 표시되면 프로젝트 코드 스타일에서이 코드가 사용 가능해졌으며 추론을 위해 프로젝트 스타일을 구성한 사람에게 물어보십시오. 일부 코드 스타일에서는 실수로 == 대신 =을 사용하면 상수에 할당 할 수 없기 때문에 코드를 컴파일하지 못하게하기 위해 왼쪽에 상수를 넣는 것을 선호합니다.

비교 작업을 뒤집을 의도가 있습니다. 의도 작업은 특정 코드 편집 작업을 자동화하는 데 적용 할 수있는 도구입니다. 이들의 가용성은 IntelliJ IDEA 측의 선호도를 나타내지는 않습니다. 그것들은 단지 코드 편집 도구 일뿐입니다.

1

이것은 아마도 checkstyle 환경 설정 일 가능성이 높습니다. 두 팀 모두 다른 팀/프로젝트에서 선호하는 것을 보았습니다. 실제로 이것은 개인적인 취향의 문제 일뿐입니다.

IntelliJ가 작동하도록 구성된 checkstyle 구현을 확인하십시오. 언제든지 다른 것을 다운로드하여 대신 사용할 수 있습니다.

2

여러 가지 분석 검사는 코딩 기준이있는 개발 팀에게 제공되며 이유 중 하나 또는 다른 이유로 특정 작업 순서를 선호합니다. 조직의 정책에 따라 정책을 설정하거나 해제 할 수 있으며 정책을 개발자에게 배포하여 일관성을 유지할 수도 있습니다. 이 때문에 분석의 일부는 모순입니다. 일부 조직은 편도와 다른 조직을 선호하기 때문입니다. 이런 경우 조직이 다른 조직보다 나은 이유를 설명하는 것은 조직에 달려 있습니다.

지금까지이 기본적으로이 방법이 왜, 내가 == 피연산자의 순서로 할 필요가없는, 두 가지 이유를 제시 할 수 있지만, 순서가 equalsassertEquals 비교를 합리적하기 때문에 코딩 표준이를 할 수 있습니다로 == 비교를 위해 동일하게하기 위해서.

먼저 상수를 먼저 입력하는 것이 더 안전합니다. foo는가 null의 경우 첫 번째는 NPE을받지 않습니다 때문에 예를 들어, 표현

if(CONSTANT.equals(foo)){...} 

은 안전보다는

if(foo.equals(CONSTANT)){...} 

이다.

둘째, 코드를 단순화 할 수 있습니다. 예를 들어, 다음은 동일합니다

if(foo != null && foo.equals(CONSTANT)){...} 

if(CONSTANT.equals(foo)) 

또 다른 이유는 아마도 값이 시험 전에 몇 가지 API를에서 "예상"값이 일반적으로 예상되는 경우 잘못된 진단 정보를 산출 할 때 JUnit의 assertEquals 같이 오는 것입니다 가치가 먼저 오지 않는다.

내가 과거에 들었던 이유는 비교에서 예상되는 값이 먼저 올 때 더 읽기 쉽다는 것입니다. 첫 번째라면 식에서 검사 할 값을 찾아야 할 필요가 없습니다.

관련 문제