Spacious Formatting For Inline ColdFusion Variable Evaluation

Posted April 30, 2007 at 7:52 AM by Ben Nadel

Tags: ColdFusion

I was just reading Elliott Sprehn's test cases for Ray Camden's Friday Puzzler when I came across something very interesting: at the end of his file, he has his hash signs (#) and his variables on different lines for inline evaluation. I have never seen this before, so naturally I had to test it:

  • <!--- Set up girl object. --->
  • <cfset objGirl = StructNew() />
  • <cfset objGirl.Hair = "Brunette" />
  • <cfset objGirl.Cuteness = 9.5 />
  • <cfset objGirl.Hotness = 7.5 />
  • <cfset objGirl.Athletic = false />
  • <cfset objGirl.Curvey = true />
  •  
  •  
  • <!---
  • Determine general "hotness". This may or may
  • not correlate to the hotness factor.
  • --->
  • Girl Is Hot:
  •  
  • #
  • ListFind( "Brunette,Black", objGirl.Hair ) AND
  • (
  • (
  • objGirl.Athletic AND
  • (objGirl.Hotness GTE 8.5)
  • )
  • OR
  • (
  • objGirl.Curvey AND
  • objGirl.Cuteness GTE 8
  • )
  • )
  • #

Running that (to make sure we don't get any ColdFusion errors), we get:

Girl Is Hot: YES

Notice how spaced out the code is? I am not saying that I would necessarily do it this way, but I have variable evaluations that are very long and highly unreadable. It is nice to know that I can make things a bit more readable by breaking it up by lines. I am just shocked that the hash signs don't have to be directly next to either a variable or an expression. Very cool.

Remember people, 80% of the cost of a project goes into maintenance... make your code readable!



Reader Comments

Apr 30, 2007 at 8:07 AM // reply »
5 Comments

I don't find that very readable at all. Im sure ever situation is different and you are forced to write code like that sometimes, but if it starts getting unreadable, and especially if you are having to do the same code more than once, why not pull the logic out into a udf? even if its on the same page, it would be a ton more readable than that.


Apr 30, 2007 at 8:12 AM // reply »
11,314 Comments

@Ryan,

I agree, so far as pulling repeated code out into a UDF. Yes, there is a rare case where something like this would need to be done. And, while you might not find this readable, I am sure it is more readable than having that all on one line.


Apr 30, 2007 at 10:03 AM // reply »
15 Comments

You guys have missed the point. What I really want to know is did your Weird Science girl materialise? :-)


Apr 30, 2007 at 10:41 AM // reply »
11,314 Comments

Still working out the bugs in the computer program ;)


May 1, 2007 at 5:03 AM // reply »
19 Comments

Yeah it works, for the same reason you can do that kind of thing inside a <cfset> statement.

ColdFusion defines the cfset statement as:

<cfset ((Identifier|String) =)? expression>

Where the left hand side of the statement is optional, and the right hand side is an expression that evaluates to some value. Whitespace between any of the parts is valid, CF doesn't care if there's new lines or spaces before, or after the Identifier/String, expression or assignment operator.

The pound syntax in CF, which can be defined as #expression#, is just the right hand side of the cfset statement. We know this because CF forbids placing the left hand side of the statement inside pound signs. (ex. #foo = 1# is a compiler error).

Thus we can reason that whatever is allowed on the right hand side of a cfset is also allowed inside pound signs.

This has some curious implications as far as syntax goes because you can do something like:

<cfloop collection="#

server

#" item="name">
<cfoutput>#name#</cfoutput>
</cfloop>

We can also reason that:

"2sheep" EQ "#

1
+
1

#sheep"

And all kinds of other fun syntactic craziness. I'd not say this kind of thing is best practice for most cases, but it illustrates what CF sees when you use expressions.


May 1, 2007 at 7:15 AM // reply »
11,314 Comments

Yeah, certainly not best practices, but nice to know what can be done in a pinch.


Post A Comment

Comment Etiquette: Please do not post spam. Please keep the comments on-topic. Please do not post unrelated questions or large chunks of code. And, above all, please be nice to each other - we're trying to have a good conversation here.

Please review the following issues:

Author Name:


Author Email:

Author Website:

Comment:

Supported HTML tags for formatting: <strong>bold</strong>   <em>italic</em>   <code>code</code>







  • Help Wanted - Find Your Next ColdFusion Job
Ben Nadel's Company - Epicenter Consulting Recent Blog Comments
Jun 20, 2013 at 6:56 AM
Experimenting With The Amazon Simple Storage Service (S3) API Using ColdFusion
" Meaning, if I PUT an object into S3, can I (as the PUT executer) read that object from S3 immediately? " "It depends" : http://aws.amazon.com/s3/faqs/#What_data_consistency_mo ... read »
Jun 20, 2013 at 3:15 AM
A Billion Wicked Thoughts By Ogi Ogas And Sai Gaddam
nice post i love it thanks 4 u :) ... read »
seb
Jun 20, 2013 at 2:32 AM
Working With Inherited Collections In AngularJS
@mike, @ben, The best article about scope and prototypal prototypical inheritance in angularjs is http://stackoverflow.com/questions/14049480/what-are-the-nuances-of-scope-prototypal-prototypical- ... read »
Jun 20, 2013 at 2:17 AM
ColdFusion NumberFormat() Exploration
Nice read thanks Ben, Is there a way to mask a negative number? Long story short in the finance sector when you go 'short' on a stock you want the price to fall this is a good thing because you are ... read »
Jun 20, 2013 at 1:09 AM
The Beauty Of The jQuery Each() Method
my html code : <html> <head> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="nss.js"> ... read »
Jun 19, 2013 at 11:31 PM
Directive Link, $observe, And $watch Functions Execute Inside An AngularJS Context
@Ben, bunch to learn indeed, but thats fun part : ) ... read »
Jun 19, 2013 at 10:41 PM
Referencing ColdFusion Query Columns In A Loop Using Both Array And Dot Notation
Burdock-roots Are you going fat day by day? You need to be good for your family and make some money too. So we bring for you a best product that helps you to be more energetic every day. You will b ... read »
Jun 19, 2013 at 9:52 PM
Working With Inherited Collections In AngularJS
I recognize the applicability of your solution, and how easy it makes to share data across multiple views or even "submodules" of rather simple application. But it seems to me that it creat ... read »
InVision App - Prototyping Made Beautiful With Prototyping Tools