ColdFusionでは関数や変数をシャープ記号(#)で囲むことで、単なる文字列なのか、それとも関数や変数なのかを区別します。
ColdFusionで作成するページには、CFによる動的な処理の他に通常のHTMLのコンテンツも含まれる場合があります。ColdFusionにとってはページに記載されている文字列がColdFusionによって処理されるべき内容かどうかを判断するために、シャープ記号(#)を関数や変数名を囲む形で記載します。
ColdFusionで処理が行われるCFタグや<cfoutput>〜</cfoutput>で囲まれている箇所でシャープ記号で囲まれている関数や変数があると、ColdFusionは指定された値を評価し、関数の実行結果や変数の値が置かれます。
セットしたローカル変数を画面に表示する場合は、<cfoutput>〜</cfoutput>で囲まれた範囲の中で、変数名をシャープで囲むことでローカル変数の値が反映されます。
<cfset lastName="サムライズ"> <cfset firstName="テスト"> <cfoutput>私の名前は、#lastName# #firstName# です。</cfoutput>
ある変数を別の変数に代入する際は、引用符やシャープで囲まないことでローカル変数の値が反映されます。下記の例は、変数fullNameに、変数firstNameとlastNameの値を代入しています。&は、変数と変数、または変数と文字列の区切りで使用します。
<cfset fullName = lastName & firstName>
この例では、苗字と名前との間に空白が含まれていないため、区別が難しいかもしれません。そこで、苗字と名前の間に空白を入れます。半角のスペースの"文字"を挿入したと解釈すると良いでしょう。
<cfset fullName = lastName & " " & firstName>
関数の場合も、関数の引数として指定する値が、変数や別の関数をネスト(入れ子)する値の場合は、引用符やシャープ記号で囲まなくても実行(参照)されます。
<cfset p1 = "-5"> <cfset p2 = Abs(p1)>
画面に表示するメッセージやHTMLのタグで、文字列としてシャープ記号を使いたい場合があります。ColdFusionの処理が及ぶ範囲(つまりCFタグや<cfoutut>〜</cfoutput>の範囲内、変数の値など)でシャープ記号を使う場合は、エスケープを行って下さい。エスケープは(#)を重ねて(##)と記載します
<cfset lastName="サム##ラ##イズ"> ←変数の値の場合 <cfoutput>私の[##苗字##]は、#lastName# です。</cfoutput> ← cfoutputの範囲内の場合