나는 개발자가 사용하기로 결정 코드베이스가 AND
와 OR
대신 &&
과 ||
.
나는 연산자의 우선 순위에 차이가 있다는 것을 알고 있지만 ( &&
앞에 가야 함 and
) 주어진 프레임 워크 ( PrestaShop 이 정확함)를 사용하면 분명히 이유가 아닙니다.
어떤 버전을 사용하고 있습니까? and
보다 읽기 쉬운 가요 &&
? 아니면 차이가 없습니까?
나는 개발자가 사용하기로 결정 코드베이스가 AND
와 OR
대신 &&
과 ||
.
나는 연산자의 우선 순위에 차이가 있다는 것을 알고 있지만 ( &&
앞에 가야 함 and
) 주어진 프레임 워크 ( PrestaShop 이 정확함)를 사용하면 분명히 이유가 아닙니다.
어떤 버전을 사용하고 있습니까? and
보다 읽기 쉬운 가요 &&
? 아니면 차이가 없습니까?
답변:
AND
and 를 사용 OR
하면 결국 다음과 같은 문제가 발생합니다.
$this_one = true;
$that = false;
$truthiness = $this_one and $that;
무엇이 $truthiness
일치 하는지 추측하고 싶 습니까?
당신이 말했다면 false
...
$truthiness
위의 값이 true
있습니다. 왜? =
가 더 높은 우선 순위 이상을 and
. 묵시적 순서를 보여주기 위해 괄호를 추가하면 다음이 더 명확 해집니다.
($truthiness = $this_one) and $that
첫 번째 코드 예제 &&
대신 대신 사용하면 and
예상대로 작동하고입니다 false
.
아래 주석에서 논의했듯이 괄호가 다음보다 우선 순위가 높기 때문에 올바른 값을 얻습니다 =
.
$truthiness = ($this_one and $that)
and
or
대해 우선 순위를 바꾸어 변경해야 합니다. 나는 너무 많은 사람들이 그들이 똑같은 것이라고 생각하고 여기에 대한 답변은 더 많은 평가입니다.
$foo and bar()
if 문에 대한 지름길 인와 같은 구문을 허용 합니다. 예기치 않은 동작 (잘못된 문서에서 읽거나 읽지 않음)으로 인해 PHP 사용에 대해 전혀 이야기하지 않은 것을 사용하지 않는 이유가 있습니다.
사용 방법에 따라 필요할 수도 있고 편리 할 수도 있습니다. http://php.net/manual/en/language.operators.logical.php
// "||" has a greater precedence than "or"
// The result of the expression (false || true) is assigned to $e
// Acts like: ($e = (false || true))
$e = false || true;
// The constant false is assigned to $f and then true is ignored
// Acts like: (($f = false) or true)
$f = false or true;
그러나 대부분의 경우 @Sarfraz와 같은 CodeIgniter 프레임 워크에서 본 모든 발생과 같은 개발자의 취향이 더 많은 것처럼 보입니다.
if ($f = false or true) $f = true;
-결과는 $f
전체적으로 참으로 평가되기 때문에 결국 참이됩니다.
$f
false가 할당되지만 조건이 true로 평가되므로 $f
덮어 씁니다. 조건이 거짓으로 평가되면 $f
어느 쪽도 덮어 쓰지 않습니다.
and
이상 &&
, and
작품 일부 상황과 예상대로 &&
모두 예상대로 작동 상황.
안전을 위해, 나는 항상 비교를 괄호로 묶고 비워 둡니다. 그렇게하면 연산자 우선 순위에 의존 할 필요가 없습니다.
if(
((i==0) && (b==2))
||
((c==3) && !(f==5))
)
"and"- "&&"- "&"의 차이점을 설명하겠습니다.
"&&"및 "and"는 모두 논리 AND 연산 이며 동일한 작업 을 수행하지만 연산자 우선 순위는 다릅니다.
연산자의 우선 순위 (우선 순위)는 두 표현식을 "단단하게"묶는 방법을 지정합니다. 예를 들어, 식 1 + 5 * 3에서 곱셈 ( "*") 연산자는 더하기 ( "+") 연산자보다 우선 순위가 높기 때문에 답은 18이 아니라 16입니다.
단일 작업으로 함께 혼합하면 항상 && 사용을 권장 하는 경우에 예기치 않은 결과가 발생할 수 있지만, 이것이 귀하의 선택입니다.
반면 "&"는 비트 단위 AND 연산 입니다. 정수 값 내에서 특정 비트의 평가 및 조작에 사용됩니다.
예를 들어 (14 & 7) 결과는 6입니다.
7 = 0111
14 = 1110
------------
= 0110 == 6
어떤 버전을 사용하고 있습니까?
특정 코드베이스에 대한 코딩 표준이 코드를 작성하는 데 사용할 연산자를 지정하는 경우 반드시 사용해야합니다. 그렇지 않은 경우 코드에서 사용해야 할 항목을 지정 하고 (종종 쉽게 해결할 수없는 경우) 사용하겠습니다. 그렇지 않으면 아마도 &&
.
'&&'보다 'and'가 더 읽기 쉬운가요?
그것은 더 읽기가 당신에게 . 답은 예, 아니오입니다 . 연산자 주변의 코드와 실제로 읽는 사람을 포함한 많은 요소에 따라 다릅니다!
|| ~ 차이가 있습니까?
나는 (실수로) 그것들을 섞으면 바람직하지 않은 행동을 일으킬 수 있지만 맛의 문제라고 생각합니다.
true && false || false; // returns false
true and false || false; // returns true
따라서 && 및 || 가장 높은 우선 순위를 갖기 때문에 더 안전합니다. 가독성과 관련하여 이러한 연산자는 보편적이라고 말할 수 있습니다.
업데이트 : 두 작업 모두 false를 반환한다는 의견에 대해 ... 음, 실제로 위의 코드는 아무것도 반환하지 않습니다. 애매한 점으로 인해 죄송합니다. 명확히하기 위해 : 두 번째 경우의 동작은 작업 결과가 어떻게 사용되는지에 달려 있습니다. 운영자의 우선 순위가 여기에서 어떻게 작용하는지 관찰하십시오.
var_dump(true and false || false); // bool(false)
$a = true and false || false; var_dump($a); // bool(true)
그 이유 $a === true
는 다른 답변에서 이미 잘 설명했듯이 할당 연산자가 논리 연산자보다 우선하기 때문입니다.
다음은 약간의 반대 예입니다.
$a = true;
$b = true;
$c = $a & $b;
var_dump(true === $c);
산출:
bool(false)
나는 오타 이런 종류의 (만큼 같은 방식으로 훨씬 더 가능성이 교활한 문제가 발생하는 것입니다라고 말하고 싶지만 =
대 ==
)와보다주의 할 훨씬 적은 가능성 adn
/ ro
구문 오류와 같은 의지 플래그 오타. 나는 또한 읽거나 훨씬 쉽게 읽을 수 있습니다. FWIW, 선호도를 나타내는 대부분의 PHP 프레임 워크는 (대부분은 그렇지 않습니다) 지정 및 / 또는 지정합니다. 또한 문제가되지 않은 실제의 미심쩍은 사건에 처한 적이 없습니다.
대입 연산 if
없이 명령문을 사용하는 또 다른 좋은 예 =
입니다.
if (true || true && false); // is the same as:
if (true || (true && false)); // TRUE
과
if (true || true AND false); // is the same as:
if ((true || true) && false); // FALSE
AND
우선 순위가 낮기 때문에 ||
우선 순위가 높습니다.
이들의 경우 다른 true, false, false
과 true, true, false
. 자세한 예제는 https://ideone.com/lsqovs 를 참조 하십시오 .
~
비트 현명한 NOT 연산자와 논리가 아닙니다. ;-)