Frodo
Frodo

Reputation: 101

Silly question about how you format long if statements

On long if statements where they take up more than one line, do you put the conditions like AND or OR on a new line like this:

               if (something
                   && something else)

Or like this:

               if (something &&
                   something else)

Upvotes: 10

Views: 4931

Answers (6)

Gawrion
Gawrion

Reputation: 87

I'm working in VSC and recently managed to not only write, but make readable very long conditions in nested if statements. Just use brackets and new lines like this. It should make automatic indentations:

foreach ($panstwa as $key => $value) {
                            if (is_object($value)) {

                                if (
                                    (
                                        ($value->checkbox1 === true) && (is_string($value->panstwoZListy)) && ($value->panstwoZListy !== 'none') && ($value->panstwo === '') && ($value->panstwoZListy !== '')
                                    ) ||
                                    (
                                        (
                                            ($value->checkbox2 === true &&
                                                ($value->checkbox2_1 === true || $value->checkbox2_2 === true || $value->checkbox2_3 === true || $value->checkbox2_4 === true || $value->checkbox2_5 === true || $value->checkbox2_6 === true)
                                            ) ||
                                            ($value->checkbox3 === true &&
                                                ($value->checkbox3_1 === true || $value->checkbox3_2 === true)
                                            ) ||
                                            ($value->checkbox4 === true &&
                                                (
                                                    (
                                                        ($value->checkbox4_1 === true || $value->checkbox4_2 === true || $value->checkbox4_3 === true || $value->checkbox4_4 === true || $value->checkbox4_5 === true || $value->checkbox4_6 === true || $value->checkbox4_7 === true) && ($value->checkbox4_8 === false)
                                                    ) ||
                                                    (
                                                        ($value->checkbox4_1 === false && $value->checkbox4_2 === false && $value->checkbox4_3 === false && $value->checkbox4_4 === false && $value->checkbox4_5 === false && $value->checkbox4_6 === false && $value->checkbox4_7 === false) && ($value->checkbox4_8 === true) && (sprawdzRegexTextInput($value->prawnieUzasadnionyInteres)) && (is_object($value->dokumentacjaOceny) || is_string($value->dokumentacjaOceny))
                                                    )
                                                )
                                            )
                                        ) &&
                                        (is_string($value->panstwo)) && ($value->panstwoZListy === 'none') && ($value->panstwo !== '') && (sprawdzRegexTextInput($value->panstwo)
                                        )
                                    ) &&
                                    ((is_int($value->panstwoid) && is_numeric($value->panstwoid)) || (is_bool($value->panstwoid) && $value->panstwoid === false)) &&
                                    (is_bool($value->zmiana))
                                ) {
                                    echo "ok";
                                    //nie robię nic
                                } else {
                                    $flagaPanstwa = false;
                                }
                            } else {
                                $flagaPanstwa = false;
                            }
                        }

Upvotes: 0

Praveen Lobo
Praveen Lobo

Reputation: 7187

I usually format using the IDE formatter and then rearrange a bit to make it look beautiful.

Upvotes: 0

Nicholas Carey
Nicholas Carey

Reputation: 74317

Given my druthers, I'd avoid long if tests in the first place. I'd rather do something like:

bool fTest1 = A == B ;
bool fTest2 = C ;
bool fTest3 = f(1,2,3) ;
bool fSuccess = ( fTest1 | ftest2 ) & fTest3 ;
if ( fSuccess )
...

Otherwise something like this:

if (  A == B
&& (  C == D
   || E == F
   )
&&    Z >  Y
) {
    ...
  }
else
  {
    ...
  }

YMMV, of course.

The former is far easier to debug, test, log, etc.

Upvotes: 1

hammar
hammar

Reputation: 139890

For complex conditions, consider extracting it into a function or a variable:

if (complexCondition(foo)) { ..

As a bonus, the name of the function or variable can be used to communicate what the condition means. This makes your code easier to read.

Upvotes: 6

wilbbe01
wilbbe01

Reputation: 1971

I prefer a rendition of the first. My reasoning is that deleting a condition via cut/paste/comment for any testing purposes is easier. It's a lot easier to comment out a line than it is to delete the and from the line above and comment out a line. This is more when I'm doing where clauses in SQL than in an if statement in any other given language, but is similar.

Upvotes: 1

patorjk
patorjk

Reputation: 2182

I typically do it the second way, since I can line up the statements. However, either way is fine when you're writing code, as long as you're consistent.

Upvotes: 2

Related Questions