それではどのようなエラーになったのか見てみましょう。ふむふむ。1つ目は苗字と名前が保存された2つの変数をつなげようとしていて、2つ目は挨拶文に苗字の変数を入れようとしたらそれぞれエラーになったのですね。
<cfset LastName="サムライズ"> <cfset FirstName="太郎"> <cfset FullName=Variables.LastName Variables.FirstName> <cfoutput>#FullName#</cfoutput>
次の情報は、Web サイト開発者のデバッグに役立ちます。 | |||||||||
リクエストを処理する際に、エラーが発生しました。 | |||||||||
|
<cfset LastName="サムライズ"> <cfset Message=Variables.LastName+"さん、こんにちは!"> <cfoutput>#Message#</cfoutput>
次の情報は、Web サイト開発者のデバッグに役立ちます。 | |||||||
リクエストを処理する際に、エラーが発生しました。 | |||||||
|
エラー@、Aのどちらも3行目で正しい連結文字を入れていないのでエラーが発生しています。
エラー@は、変数と変数の間にスペースを入れていますが、スペースはCFタグで、タグや属性とを区別するのに使用します(<cfoutput query="qTemp" group="id">のようにスペースでタグ名とquery属性・group属性を区切っています)。変数同士の連結文字としては使用できず、無効なCFML construct(構文)エラーになってしまったのです。
エラーAは、変数と文字列の間に連結文字として “+” を使っています。他のプログラム言語では、値が文字列であれば “+” で連結できるものもありますが、ColdFusionでこの文字を使用すると、計算処理として認識し、前と後ろの値を(たとえ文字列だろうと)計算してしまいます。今回の場合、もちろん苗字の変数に入っているのは文字列ですので、数字に変換できないエラーになってしまいました。
ColdFusionで変数と変数(または文字列)の連携文字は“&(半角のアンドマーク)”です。エラーが発生している3行目の区切り箇所に&マークを指定する事で、前と後ろをつなげ、適切に処理を行います。
エラー@
<cfset FullName=Variables.LastName & Variables.FirstName>
エラーA
<cfset Message=Variables.LastName & "さん、こんにちは!">
ColdFusionでは、変数を作成する際にデータ型(文字列・数値・ブール値・複合データ・オブジェクト など)を指定しません。しかし実際には、変数の値には型があり、計算処理や関数で使用する際に、自動的に適切な型に変換されます。
誤った連結文字を指定しないように気をつけてプログラミングして下さい。また、エラーが発生した時は、そのメッセージを確認して、予期しない型の変換が行われていないかも注意しましょう。
もう一点。エラー@の FullName のセット方法だと、苗字と名前がくっついてしまいます。空白を入れたい時はどうすれば良いでしょうか?
答えは、変数 & 空白の文字列 & 変数と指定することです。要は文字列としてスペースを追加すれば良いです。
<cfset FullName=Variables.LastName & " " & Variables.FirstName>
連結文字を使わない方法としては、変数の値を文字列としてセットし、そこに変数の呼び出しを埋め込みます。
エラー@
<cfset FullName="#Variables.LastName##Variables.FirstName#">
エラーA
<cfset Message="#Variables.LastName#さん、こんにちは!">
連結文字を使わない分、こちらの方がコードが見やすい場合もありますが、逆の言い方をすると、「文字列」と「変数の参照」の区別がつきにくいプログラムになります。どちらが良いかは判断に悩む部分がありますが、両方の書き方が混在しないよう、(なるべく)どちらかに統一してプログラムされる事をお勧めします。