문제

나 개인적으로 좋 독점 또는, ^, 운영 감각을 할 때의 컨텍스트에서는 부울 값을 검사하기 때문에 그것의 간결함.호,쓰기

if (boolean1 ^ boolean2)
{
  //do it
}

if((boolean1 && !boolean2) || (boolean2 && !boolean1))
{
  //do it
}

그러나로 혼란에서 보이는 다른 경험이 풍부한 개발자는 Java(하지만 초보자),및 때때로 댓글이는 방법에 대해 그만 사용해야 합 위한 비트 작업입니다.

나는지 궁금하에 관한 모범 사례 사용 ^ 연산자입니다.

도움이 되었습니까?

해결책

간단히 사용할 수 있습니다 != 대신에.

다른 팁

나는 당신이 당신의 자신의 질문에 대답했다고 생각합니다 - 당신이 사람들로부터 이상한 외모를 얻는다면, 더 명백한 옵션을 가지고 갈 수있을 것입니다.

당신이 그것을 댓글을 달아야한다면, 당신은 아마도 더 장황한 버전으로 교체하고 사람들이 처음에 질문을하지 않는 것이 좋습니다.

나는 비슷한 대화를 많이한다는 것을 알았습니다. 한편으로, 당신은 목표를 달성하는 작고 효율적인 방법을 가지고 있습니다. 반면에, 당신은 당신의 팀의 나머지 사람들이 이해하지 못하는 것이있어 미래에 유지하기가 어렵습니다.

저의 일반적인 규칙은 사용되는 기술이 프로그래머가 일반적으로 알고있는 것이 합리적인지 묻는 것입니다. 이 경우 프로그래머가 부울 연산자를 사용하는 방법을 아는 것이 합리적이라고 생각합니다. 따라서 IF 문에서 XOR을 사용해도 괜찮습니다.

괜찮지 않은 것의 예로, XOR을 사용하여 임시 변수를 사용하지 않고 두 변수를 바꾸는 속임수를 찍으십시오. 그것은 내가 모두가 익숙해지기를 기대하지 않는 트릭이므로 코드 검토를 통과하지 못할 것입니다.

댓글을 달면 괜찮을 것 같아요 // ^ == XOR.

당신은 항상 그것을 함수로 랩핑하여 장황한 이름을 줄 수 있습니다.

public static boolean XOR(boolean A, boolean B) {
    return A ^ B;
}

그러나 ^ 운영자가 Google을 위해 무엇인지 모르는 사람이라면 정말 빠르지 않은 것 같습니다. 처음으로 기억하기 어렵지 않을 것입니다. 다른 용도를 요청했기 때문에 비트 마스킹에 XOR을 사용하는 것이 일반적입니다.

당신은 또한 수 XOR을 사용하여 세 번째 임시 변수를 사용하지 않고 두 변수로 값을 교환합니다..

// Swap the values in A and B
A ^= B;
B ^= A;
A ^= B;

여기에 있습니다 XOR 스와핑과 관련된 StackOverFlow 질문.

나는 최근 직장에서 JavaScript 프로젝트에서 XOR을 사용했고 결국 7 줄의 주석을 추가했습니다 무슨 일이 있었는지 설명합니다. 그 맥락에서 XOR을 사용하는 것에 대한 정당화는 용어 중 하나였습니다.term1 아래의 예에서)) 두 가지가 아니라 세 가지 값을 취할 수 있습니다. undefined, true 또는 false 다른 반면 (term2) 될 수 있습니다 true 또는 false. 추가 점검을 추가해야했을 것입니다. undefined 사례이지만 XOR의 경우 XOR이 첫 번째 용어를 강제로 강제로 부울로 평가하여 다음과 같이 충분했습니다. undefined 치료 받으십시오 false:

if (term1 ^ term2) { ...

결국에는 약간의 과잉 이었지만 어쨌든 부활절 달걀로 보관하고 싶었습니다.

if((boolean1 && !boolean2) || (boolean2 && !boolean1)) 
{ 
  //do it 
} 

IMHO이 코드는 단순화 될 수 있습니다.

if(boolean1 != boolean2) 
{ 
  //do it 
} 

코드는 명확성에서 마음,내 생각은 사용하는 것입니다 XOR 에 boolean 검사하지 않는 것이 일반적 사용량에 대한 배타적 비트 or 연산자입니다.내 경험에서 비트 XOR Java 일반적으로 를 구현하는 데 사용 마스크 flag toggle 행동:

flags = flags ^ MASK;

문서 Vipan Singla 설명 사용한 경우 더 세부 사항입니다.

을 사용해야 하는 경우에는 비트 OR 로에를 들어,댓글을 왜 당신이 사용하기 때문에,그것을 가능성이 필요 심지어는 비트 or 연산은 글을 읽고 고객를 중지에서 자신의 트랙을 왜 이해 당신은 그것을 사용하고 있습니다.

는 경우 사용 패턴을 정당화 그것이,왜?하는 동안 귀하의 팀을 인정하지 않은 운전자,바로 시간과 그들은 수 있습니다.인간은 새로운 단어를 배울 수 있다.왜에서 프로그래밍이 가능한가요?

만주의가 국가는"^"있지 않는 단락 의 의미가 두 번째 부울 확인합니다.당신이 정말로 필요한 단락 의 의미,다음 정적 util 방법도 작동합니다.

public static boolean xor(boolean a, boolean b) {
    return (a && !b) || (b && !a);
}

나는 개인적으로 간결함으로 인해 "boolean1 ^ boolean2"표현을 선호합니다.

내가 당신의 상황에 처해 있다면 (팀에서 일하면), 나는 "isdifferent (boolean1, boolean2)"와 같은 설명적인 이름을 가진 함수의 "boolean1 ^ boolean2"논리를 캡슐화함으로써 타협을 일으킬 것입니다.

예를 들어, "boolean1 ^ boolean2"를 사용하는 대신 "isdifferent (boolean1, boolean2)"라고 부릅니다.

if (isDifferent(boolean1, boolean2))
{
  //do it
}

"isdifferent (boolean1, boolean2)"기능은 다음과 같습니다.

private boolean isDifferent(boolean1, boolean2)
{
    return boolean1 ^ boolean2;
}

물론,이 솔루션은 표면적으로 외부 함수 호출을 사용하는 것을 수반합니다.이 기능은 그 자체로 모범 사례를 조사 할 수 있지만, 장점 (및 못생긴) 표현 "(boolean1 &&! boolean2) || (boolean2 &&! boolean1)를 피합니다. "!

! = 두 변수를 비교해도 괜찮습니다. 그러나 다중 비교에서는 작동하지 않습니다.

str.contains("!=") ^ str.startsWith("not(")

나보다 더 좋아 보인다

str.contains("!=") != str.startsWith("not(")

약간의 연산자로서 XOR은 다른 어떤 수단보다 훨씬 빠릅니다. 따라서 성능 중요하고 확장 가능한 계산의 경우 XOR이 필수적입니다.

나의 주관적인 개인적인 의견 : 부울에게 평등 (== 또는! =)을 사용하는 것은 어떤 목적 으로든 절대적으로 금지되어 있습니다. 그것을 사용하면 기본 프로그래밍 윤리와 기본 사항이 부족합니다. 당신에게 혼란스러운 외모를주는 사람은 누구나 부울 대수의 기초로 다시 보내야합니다 (나는 여기에 "믿음의 강에"글을 쓰려고 유혹을 받았습니다 :)).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top