Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

does the condition after && always get evaluated

I have this if statement that tests for the 2 conditions below. The second one is a function goodToGo() so I want to call it unless the first condition is already true

$value = 2239;  if ($value < 2000 && goodToGo($value)){    //do stuff }  function goodToGo($value){    $ret = //some processing of the value    return $ret;  } 

My question is about the 2 if conditions $value < 2000 && goodToGo($value). Do they both get evaluated or does the second one only get evaluated when the first one is true?

In other words, are the following 2 blocks the same?

if($value < 2000 && goodToGo($value)) {    //stuff to do }  if($value < 2000) {     if (goodToGo($value)){        //stuff to do     } } 
like image 677
brett Avatar asked Mar 29 '10 02:03

brett


People also ask

What is conditional statement in Javascript?

Conditional StatementsUse if to specify a block of code to be executed, if a specified condition is true. Use else to specify a block of code to be executed, if the same condition is false. Use else if to specify a new condition to test, if the first condition is false.

Does else if execute after if Javascript?

if else statements will execute a block of code when the condition in the if statement is truthy . If the condition is falsy , then the else block will be executed.

Does Java evaluate both conditions?

No, java uses short-circuit evaluation on expressions using || and && . See here for more info. Not all "boolean expressions"; you can use & and | with booleans, and they are not short-circuiting.


2 Answers

No--the second condition won't always be executed (which makes your examples equivalent).

PHP's &&, ||, and, and or operators are implemented as "short-circuit" operators. As soon as a condition is found that forces the result for the overall conditional, evaluation of subsequent conditions stops.

From http://www.php.net/manual/en/language.operators.logical.php

// -------------------- // foo() will never get called as those operators are short-circuit  $a = (false && foo()); $b = (true  || foo()); $c = (false and foo()); $d = (true  or  foo()); 
like image 137
sblom Avatar answered Oct 03 '22 13:10

sblom


Yes. The two blocks are the same. PHP, like most (but not all) languages, uses short-circuit evaluation for && and ||.

like image 27
Stephen Canon Avatar answered Oct 03 '22 13:10

Stephen Canon