開発部だより 第23回
こんにちわ!
ソーセージは絶対ボイル派の burnercrew です。
みなさんColdFusion コンポーネント(以降、CFC)って使っていますか?
「カスタムタグやUDFで十分だよね?」
「パフォーマンス的にどうなの?」
「Javaのクラス呼び出した方が全然速いよね?」
などの理由で積極的に使用していなかった開発者の方々も多いかと思います。
しかーし、ColdFusion 8になって飛躍的にパフォーマンスが上がりました。
(Adobeより公開されている
パフォーマンス評価ガイド(PDF)では
CFCの生成やCFC内のメソッド呼び出しはColdFusion 7のおよそ20倍高速になっていると記載されています。)
そこで、
「おおw、そんなに速くなっているならCFCを使って開発してみようか」
という方の為に、今回はCFCを使用するにあたり重要になる、CFC独自の動きをする以下の変数スコープについて確認してみたいと思います。
・Thisスコープ
・Variablesスコープ
■Thisスコープ
Thisスコープに定義した変数はCFCに対してパブリックな変数になります。
[定義例]
<cfset This.userName="Michael" />
*ちなみにJavaではThisキーワードはプライベートスコープになります。
■Variablesスコープ
Variablesスコープに定義にした変数はCFCに対してプライベートな変数になります。
[定義例]
<cfset Variables.userName="Michael" />
また、CFC内でスコープを指定せずに定義された変数もVariablesスコープに定義されたものとして扱われます。
実際に変数定義のみの簡単なCFCを作成して確認してみます。
[Scope.cfc]
<cfcomponent>
<cfset This.a = "Thisスコープに定義" />
<cfset Variables.b = "Variablesスコープに定義" />
<cfset c = "スコープ指定無しで定義" />
<cffunction name="init" returntype="Scope">
<cfreturn This />
</cffunction>
</cfcomponent>
[cfm内で変数を出力]
<cfset scopeCFC = CreateObject("component","Scope").init() />
<cfoutput>
a:#scopeCFC.a#<br />
b:#scopeCFC.b#<br />
c:#scopeCFC.c#<br />
</cfoutput>
cfmで確認すると、変数aは出力されますが、
変数b、及び変数cにはCFCの外部からアクセス出来ない為、エラーになります。
いかかでしたでしょうか。
CFCを使用することによりColdFusionでもJava等のオブジェクト指向言語と同等のフローで開発することが可能になります。
また、大規模な開発でなくても、ワンポイント的にライブラリ化したい機能がある場合にもCFCはかなり便利です。
いままでCFCの使用を敬遠していた方も、この機会に是非お試しください。
それではまたw