関数
関数は、通常、データを処理して結果を返します。また、ユーザー定義関数(UDF)も作成できます。UDF はカスタム関数とも呼ばれます。
関数の一般的な形式を次に示します。
functionName([argument1[, argument2]]...)
Now 関数など、引数を持たない関数もあります。引数を持つ関数では、引数をカンマで区切って指定します。引数には必須のものとオプションのものがあります。すべての ColdFusion 関数は値を返します。例えば、Round(3.14159) は値 3 を返します。
ビルトイン関数
ColdFusion のビルトイン関数を使用すれば、様々なタスクが行えます。その例を次に示します。
- 配列、リスト、構造体などの、複雑なデータ変数の作成および操作
- クエリの作成および操作
- 文字列や日付時刻値の作成、解析、操作、および書式制御
- ダイナミックデータの値の評価
- 変数値の型の調査
- データの形式変換
- 数学演算の実行
- システム情報やリソースの取得
ColdFusion 関数のアルファベット順リストとカテゴリ別リストについては、『CFML リファレンス』の ColdFusion 関数を参照してください。
ビルトイン関数は、ColdFusion ページの任意の場所で使用できます。 cfset タグや cfoutput タグでは、表示するデータの作成などのためにビルトイン関数がよく使用されます。例えば次のコードは、October 24, 2007 の形式で今日の日付を表示します。
<cfoutput>#DateFormat(Now(), "mmmm d, yyyy")#</cfoutput>
このコードでは 2 つの関数をネストしています。Now 関数は、現在の日時を表す ColdFusion 日付時刻値を返します。DateFormat 関数は、Now 関数で返された値を指定の文字列表記に変換します。
関数は、CFScript スクリプトでも役立ちます。CFScript の中で ColdFusion タグを使用することはできないので、スクリプトで ColdFusion の機能にアクセスするには関数を使用する必要があります。
暗黙的な Get 関数と Set 関数
ColdFusion コンポーネントは、パブリックの setter および getter メソッドを持つプライベートプロパティをサポートします。この動作を利用してコンポーネントプロパティへの直接アクセスを防止することにより、オブジェクト指向プログラミングがサポートされます。
たとえば、myCFC コンポーネントの MyProp プロパティを設定して取得するには、次のコードを使用します。
myCFC.setMyProp(27); theProp = myCFC.getMyProp();
setter メソッドと getter メソッドを持つプロパティの特徴を次に示します。
- set メソッドで代入されたコンポーネントプロパティは、CFC に対してプライベートな Variables スコープに属します。get メソッドまたは set メソッドを呼び出す以外にプロパティを取得または再設定する方法はありません。
- プロパティに type 属性の値が含まれる場合は、setter 関数に渡されるデータが ColdFusion によって検証されます。default 属性はプロパティに影響を与えず、プロパティの初期値は設定されません。
- 直接代入ステートメント(myCFC.MyProp=27 など)を使用すると、 cfproperty タグでプロパティが指定されている場合でも、 標準の This スコープ変数が CFC に 作成されます タグで使用) This スコープ 変数は、set メソッドや get メソッドを使用してアクセスするプロパティとは独立しています。ただし、実際には、 This スコープ 変数の名前は、set メソッドや get メソッドを使用してアクセスするプロパティと同じ名前にすることができます。
- CFC 外部からの プロパティ へのアクセスを制御するには、cfproperty タグの getter 属性と setter 属性を使用します。setter 属性の値を true に設定すると、アプリケーションコードでプロパティを設定できるようになります(デフォルトの動作)。値を false に設定すると、CFC 内からのプロパティ設定のみが許可されます。getter 属性も同様に機能します。
- 明示的な set メソッドまたは get メソッドは、暗黙的な set メソッドおよび get メソッドよりも優先されます。したがって、CFC に明示的な setMyProp メソッドを持つ MyProp プロパティがある場合、アプリケーションコードで setMyProp() 関数を呼び出すと、暗黙的な関数ではなく、コード内で呼び出した関数が使用されます。
validate 属性と validateparams 属性
<cfproperty> の validate 属性では、このプロパティに対して暗黙的な setter が呼び出されたときにデータの検証に使用するバリデーターを指定します。指定可能なバリデーターには次のものがあります。
- string
- boolean
- integer
- numeric
- date
- time
- creditcard :mod10 アルゴリズムに準拠する 13 ~ 16 桁の数値です。
- email:有効な電子メールアドレスです。
- eurodate :日付時刻値です。いずれの日付の部分も dd/mm/yy の形式でなければなりません。区切り文字として /、-、 または . を 使用できます。
- regex: validateparams で指定されたパターンと入力を照合します。
- ssn :米国の社会保障番号です。
- telephone:米国の標準の電話番号です。
- UUID:Home Universally Unique Identifier(ユニバーサル固有識別子)です。形式は「XXXXXXXX-XXXX-XXXX-XXXXXXXXXXXXXXX」で、「X」は 16 進数です。
- guid :Universally Unique Identifier(ユニバーサル固有識別子)です。形式は「XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX」で、「X」は 16 進数です。
- zipcode:米国の 5 桁または 9 桁形式の郵便番号です。
<cfproperty> の validateparams 属性では、validate 属性で指定されたバリデーターに必要なパラメーターを指定します。これは、暗黙的な構造体表記法で指定する必要があります。
- min:validate が integer/numeric/ である場合の最小値
- max:validate が integer/numeric/ である場合の最大値
- minLength:validate が string である場合の文字列の最小長
- maxLength:validate が string である場合の文字列の最大長
- pattern:validate 属性で指定されたバリデーターが regex である場合の正規表現式
例えば、次のコードは、従業員の電子メール、郵便番号、および年齢に対するバリデーターを設定しています。
年齢に関しては、値が整数であるかどうかが validate で検査され、その値が指定された範囲内にあるかどうかが validateparams によって検査されます。
<! ---Setting validators for an employee's e-mail, age, and zipcode---> <cfcomponent> <cfproperty name="mail" validate="email"> <cfproperty name="zip" validate="zipcode"> <cfproperty name="age" validate="integer" validateparams="{min=18,max=60}"> </cfcomponent>
ユーザー定義関数
ユーザーが独自に作成した関数はユーザー定義関数(UDF)と呼ばれます。作成した関数は、ColdFusion 式や CFScript で使用できます。UDF は、ビルトイン CFML 関数を使用できる任意の場所で呼び出せます。UDF を作成するには、 cffunction タグまたは CFScript の function ステートメントを使用します。cffunction タグを使用して作成する UDF には 、 ColdFusion タグおよび関数を含めることができます。CFScript で作成する UDF には、関数のみを含めることができます。UDF はスタンドアローンの関数として作成することも、ColdFusion コンポーネント内にカプセル化することもできます。
ユーザー定義関数を使用すれば、頻繁に使用するロジックやオペレーションを 1 つのユニットにカプセル化できます。一度記述したコードは繰り返し使用できます。UDF を使用することで、コーディングの一貫性を維持し、CFML を効率よく構造化できます。
ユーザー定義関数の例としては、対数計算などの数学ルーチン、数字の金額を「2 ドル 3 セント」などの文字列に変換する文字列操作ルーチン、暗号化や復号化を行うルーチンなどがあります。
Common Function Library Project(www.cflib.org)には、ユーザー定義関数の無償ライブラリが多数あります。
ユーザー定義関数について詳しくは、ユーザー定義関数の作成と呼び出しを参照してください。