'&'대 '&&'사용
나는 이것을 발견했다 :
bool Isvalid = isValid & CheckSomething()
bool Isvalid = isValid && CheckSomething()
두 번째 경우는 단락 시나리오가 될 수 있습니다.
그래서 우리는 항상 &
대신 사용할 수 는 &&
없습니까?
&는 비트 단위 "AND"로, 비트 수준에서 작동 함을 의미합니다. &&는 논리 "AND"로 부울 (true / false) 수준에서 작동 함을 의미합니다. 논리 AND는 단락 (첫 번째 부분이 거짓 인 경우 두 번째 부분을 검사 할 필요가 없음)을 사용하여 초과 코드 실행을 방지하고 비트 단위 AND가 필요한 모든 비트를 통해 값을 얻습니다.
논리 AND (&&)를 사용해야합니다. 그게 원하는 것이기 때문입니다 (&가 잠재적으로 옳은 일을 할 수 없음).하지만 부작용을 평가하려면 메서드를 별도로 실행해야 할 수도 있습니다.
var check = CheckSomething();
bool IsValid = isValid && check;
&&에서 두 번째 표현식은 첫 번째 표현식이 참인 경우에만 평가됩니다.
& &는 true & true = true, true & false = false 등과 같은 두 표현식을 연결하는 방법입니다.
C #에는 부울에 대한 두 가지 유형의 논리 연산자가 있습니다.
x & y
논리적 AND- 다음 과 같은
true
경우에만 결과가 발생 합니다.x
y
true
- 평가 모두
x
와y
.
- 다음 과 같은
x && y
조건부 논리 AND- 다음 과 같은
true
경우에만 결과가 발생 합니다.x
y
true
x
먼저 평가 하고로x
평가 되면 평가 하지 않고 즉시false
반환false
합니다y
( short-circuiting ).
- 다음 과 같은
따라서 두 가지 모두에 의존 x
하고 y
평가를 받으면 &
연산자를 사용할 수 있습니다. 비록 부작용이 항상 독자에게 명확하지 않기 때문에 거의 사용되지 않고 읽기가 어렵지만 연산자를 사용할 수 있습니다 .
참고 : 이항 &
연산자는 비트 논리 AND를 수행 하는 정수 유형 에도 존재합니다 .
나는 당신이 뭔가를 놓치고 있다고 믿습니다. 두 번째 시나리오에서는 isValid가 false이면 CheckSomething이 평가되지 않습니다.
조건부 AND 연산자 (&&)는 bool 피연산자의 논리 AND를 수행하지만 필요한 경우 두 번째 피연산자 만 평가합니다.
http://msdn.microsoft.com/en-us/library/2a723cdk(v=vs.71).aspx
내가 지금까지 가지고있는 최고의 사용
void BooleanTestV1 (){
int num = 0;
bool IsOne = false;
for (int i = 0; i< 100; i++){
num = i;
if (IsOne == false) {
IsOne = num == 1;
}
}
if (IsOne) {
// Yeay it works!
}
}
void BooleanTestV2 (){
int num = 0;
bool IsOne = false;
for (int i = 0; i< 100; i++){
num = i;
if (IsOne == false && (IsOne = num == 1)) {
// Do Somehing...
}
}
if (IsOne) {
// Yeay it works!
}
}
void WhyUseOneAND() {
int num = 0;
bool IsOne = false;
for (int i = 0; i < 100; i++) {
num = i;
if (num < 0 & (IsOne == false && (IsOne = num == 1))) {
// If we are using &&
// isOne will never checking (num == 1)
// Because && will stop running after found a false (num < 0)
// Good for caching (here "IsOne" is the variable we cached)
// Note: anything here will not be executed, cuz num < 0 will never be true
}
}
if (IsOne) {
// Yeay it works!
}
}
참조 URL : https://stackoverflow.com/questions/5537607/usage-of-versus
'IT TIP' 카테고리의 다른 글
java : Rpc / 인코딩 된 wsdl은 JAXWS 2.0에서 지원되지 않습니다. (0) | 2021.01.07 |
---|---|
Java의 HttpServletRequest에서 원시 게시물 데이터를 검색하는 방법 (0) | 2021.01.07 |
자바 : org.w3c.dom.document에서 xpath 문자열을 통해 요소를 찾는 방법 (0) | 2021.01.07 |
isset () 대 strlen ()-빠르고 명확한 문자열 길이 계산 (0) | 2021.01.07 |
SQL Server Express (2012)와 LocalDB간에 차이가 있습니까? (0) | 2021.01.07 |