What does this mean?
I have problem understanding this because I'm not using this kind of format.
Can anyone translate this condition?
(D == 4 ? (i % 2 == 0 ? 10 : 14) : 10);
What does this mean?
I have problem understanding this because I'm not using this kind of format.
Can anyone translate this condition?
(D == 4 ? (i % 2 == 0 ? 10 : 14) : 10);
 
    
     
    
    This is two ternary operators. The ternary operator compresses an if-else statement into one line. (expression ? fireOnTrue() : fireOnFalse()) For example
if(D == 4) {
    explode();
} else {
    explodeTwice();
}
could be written as:
D == 4 ? explode() : explodeTwice()
Therefore, if we take (D == 4 ? (i % 2 == 0 ? 10 : 14) : 10); and break it down we get:
if(D == 4) {
    (i % 2 == 0 ? 10 : 14);
} else
    10;
}
breaking that down one more step gives us:
if(D == 4) {
    if(i % 2 == 0) {
        10;
    } else {
        14;
    }
} else
    10;
}
 
    
    Let's go through that monster piece by piece.
(D == 4 ? (i % 2 == 0 ? 10 : 14) : 10)
This line uses the ternary operator x ? y : z, which returns
y if x == truez if x == false(D == 4 ? (i % 2 == 0 ? 10 : 14) : 10) first checks whether D is equal to 4:
D is equal to 4 it returns (i % 2 == 0 ? 10 : 14)D is not equal to 4 it returns 10.If D happens to be equal to 4 then expression (i % 2 == 0 ? 10 : 14) will be parsed:
(i % 2 == 0 ? 10 : 14) first checks whether i % 2 == 0 is true or false. % is the remainder aka modulo operator which returns the remainder of the division a/b for a % b.
Comparing that result to 0 is the same as saying "divides evenly", i.e. no remainder.
The remainder for dividing by 2 can be either 0 or 1, thus:
0 if i is an even number1 if i is an odd numberIn other words, (i % 2 == 0 ? 10 : 14) will return 10 if i is even, or 14 if i is odd.
In conclusion, (D == 4 ? (i % 2 == 0 ? 10 : 14) : 10) has can evaluate to either 10 or 14 depending on D and i, like this:
D == 4 and i is even, it evaluates to 10D == 4 and i is odd, it evaluates to 14D != 4, it evaluates to 10Thus, the expression could be simplified as a method to this:
int return10or14(int D, int i) {
    if (D != 4 || i % 2 == 0)
        return 10;
    else
        return 14;
}
 
    
    The expression a ? b:c simply means if(a) then b , else c. Thus assuming your expression evaluates to retval, it can be written as:
if(D == 4)
{
    if(i%2 == 0) 
      retval = 10;
    else 
      retval = 14;
}
else  retval = 10;
