Proper Parentheses Placement In Ternary Statements

Posted: October 13, 2011 in ColdFusion

Consider the following code:

a = b = c = 1000000;
r = (a > 10000) ? a/1000 : a & "/" & (b > 10000) ? b/1000 : b & "/" & (c > 10000) ? c/1000 : c;

(if you think the first line is odd – see Chaining ColdFusion Assignment Operators)

My thought was r would return “1000/1000/1000” — however it actually returned “1000”. Where did I go wrong?

Now if I change a,b,c to 1000 it would blow up to a “cannot convert the value “1000/NO” to a boolean” error.

So what’s going on? The third argument of the statement becomes another ternary statement but can not convert the evaluated “1000/NO” to a Boolean – thus blowing up. If a,b,c = 1000000 then the operation never gets to the third argument and returns only “1000” never considering the ampersand in its logic.

So correct code would be:

a = b = c = 1000000;
r = (a > 10000 ? a/1000 : a) & "/" & (b > 10000 ? b/1000 : b) & "/" & (c > 10000 ? c/1000 : c);

Or depending upon your preference:

a = b = c = 1000000;
r = ((a > 10000) ? a/1000 : a) & "/" & (b > 10000) ? b/1000 : b) & "/" & (c > 10000) ? c/1000 : c));

Now there are three seperate ternary statements concatenated together with a slash between them.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s