開発部だより 第88回
こんにちは!
iPhone4の鬼スペックぶりに、思わず3GSを遠投しそうになった ij です。
今回は、ColdFusion(以下、CF)で構造体にキーを追加する時に注意したいことをご説明したいと思います。
読者の皆様はCFで構造体にキーを追加する時、どのようにしていますでしょうか?
「そんなのStructInsert()を使うでしょ?」
と即答されそうですが、実は StructInsert() を使わなくても出来てしまいます。
下記のコードをご覧ください。
struct1、struct2という2つの構造を作り、同じ名前のキーを追加する簡単なサンプルです。
<cfscript>
//StructInsert()を使う
struct1 = StructNew();
StructInsert(struct1,"prop", "SATT");
//StructInsert()を使わない
struct2 = StructNew();
struct2.prop = "SATT";
</cfscript>
struct2の方は、StructInsert()を使っていませんが、エラーにもならずキーを追加出来てしまいます。
一見するとstruct1、struct2 ともにキー"prop"が追加されたように見えますが、実は違います。
以下のコードでダンプしてみましょう。
struct1<br />
<cfdump var="#struct1#" />
<br />
struct2<br />
<cfdump var="#struct2#" />
結果はこうなります。
StructInsert()を使わなかったstruct2のキー"prop"が大文字になっていますね。
*ColdFusionの設定によっては上記のような結果にならない場合もあります。
CFで完結するアプリケーションであればあまり気にする必要は無いのかもしれませんが、RemoteObjectを利用して値をFlash、Flexアプリケーション等に返す場合は、当然の事ながら大文字/小文字を区別するので注意しなくてはなりません。
普通にStructInsert()を使用していれば、まず問題にはならないのですが、FlashでActionScriptを記述しているところからColdFusionを使い始めた私は、ついつい上記のサンプルコードのstruct2のような記述をしてしまいハマる事がありました^^;
教訓:面倒くさがらずにStructInsert()を使いましょう(笑
ではまた!!