マニュアル キャンセル

データ型開発ガイド

  1. ColdFusion デベロッパーガイド
  2. ColdFusion アプリケーションの開発
    1. ColdFusion の概要
      1. ColdFusion の概要
      2. ColdFusion について
      3. インターネットアプリケーションと web アプリケーションサーバーについて
      4. JEE と ColdFusion アーキテクチャについて
    2. ColdFusion の変更点
      1. ColdFusion の変更点
      2. JRun から Tomcat への変更
      3. セキュリティの機能強化
      4. ColdFusion WebSocket
      5. Java 統合の強化
      6. ColdFusion ORM 検索によるインデックス作成と検索
      7. Solr の機能強化
      8. スケジューラーの機能強化
      9. Microsoft Exchange Server 2010 との統合
      10. ColdFusion での RESTful web サービス
      11. ColdFusion でのクライアントとサーバー間の遅延読み込み
      12. Web サービスの機能強化
      13. 地理位置情報の表示
      14. クライアントサイドのチャート作成
      15. キャッシュ機能の強化
      16. ColdFusion Administrator を使用したサーバーの更新
      17. ColdFusion Administrator のセキュアプロファイル
    3. アプリケーション開発の概要
      1. ColdFusion を使用したアプリケーション開発の概要
      2. 本マニュアルの使用について
      3. デベロッパー向き Adobe ColdFusion ドキュメントについて
    4. CFML プログラミング言語
      1. CFML プログラミング言語
      2. CFML の要素
      3. ColdFusion 変数
      4. 式および番号記号
      5. 配列と構造体
      6. CFML スクリプト言語による ColdFusion ページの拡張
      7. 関数の正規表現
      8. ColdFusion での言語の機能強化
      9. 第一級オブジェクトとしての組み込み関数
      10. データ型開発ガイド
    5. ColdFusion アプリケーションのビルディングブロック
      1. ColdFusion アプリケーションのビルディングブロック
      2. ColdFusion 要素の作成
      3. ユーザー定義関数の記述と呼び出し
      4. ColdFusion コンポーネントの作成と使用
      5. カスタム CFML タグの作成と使用
      6. カスタム CFXAPI タグの作成
      7. メンバー関数の使用
      8. ColdFusion でのオブジェクト指向プログラミング
    6. CFML アプリケーションの開発
      1. CFML アプリケーションの開発
      2. ColdFusion アプリケーションのデザインと最適化
      3. エラーの処理
      4. 永続データとロックの使用
      5. ColdFusion スレッドの使用
      6. セキュリティで保護されたアプリケーション
      7. クライアントサイド CFML(モバイル開発向け)
      8. ColdFusion デバッガの使用
      9. アプリケーションのデバッグとトラブルシューティング
      10. グローバライズしたアプリケーションの開発
      11. ColdFusion での REST 機能強化
      12. OAuth による認証
      13. ソーシャルの機能強化
    7. モバイルアプリケーションの開発
      1. モバイルアプリケーションの開発
      2. モバイルアプリケーションの構築
      3. モバイルアプリケーションのデバッグ
      4. モバイルアプリケーションの検証
      5. モバイルアプリケーションのパッケージ化
      6. モバイルアプリケーションのトラブルシューティング
      7. デバイス検出
      8. クライアントサイド CFML
      9. モバイルテンプレート
      10. モバイルアプリケーションを作成するためのコード例
    8. データのアクセスと使用
      1. データのアクセスと使用
      2. データベースおよび SQL の概要
      3. データへのアクセスと取得
      4. データベースの更新
      5. クエリのクエリの使用
      6. LDAP ディレクトリの管理
      7. Solr 検索のサポート
    9. ColdFusion ORM
      1. ColdFusion ORM
      2. ColdFusion ORM の概要
      3. ORM アーキテクチャ
      4. ORM の設定
      5. ORM マッピングの定義
      6. オブジェクトの操作
      7. ORM セッション管理
      8. トランザクションと同時性
      9. HQL クエリの使用
      10. データベーススキーマの自動生成
      11. ORM における複数のデータソースのサポート
      12. ColdFusion ORM 検索
    10. ColdFusion と HTML 5
      1. ColdFusion と HTML 5
      2. ColdFusion Web Sockets の使用
      3. メディアプレーヤーの機能拡張
      4. クライアントサイドのチャート作成
      5. 地理位置情報データの表示
    11. ColdFusion での Flex と AIR の統合
      1. ColdFusion での Flex と AIR の統合
      2. Flash Remoting サービスの使用
      3. Flash Remoting 更新の使用
      4. オフライン AIR アプリケーションのサポート
      5. ColdFusion サービスのプロキシ ActionScript クラス
      6. LiveCycle Data Services ES アセンブラーの使用
      7. サーバーサイド ActionScript の使用
    12. 情報の要求と提示
      1. 情報の要求と提示
      2. データの検索とフォーマット設定
      3. cfform タグによるダイナミックフォームの作成
      4. データの検証
      5. Flash フォームの作成
      6. スキン可能 XML フォームの作成
      7. Ajax データおよび開発機能の使用
      8. Ajax ユーザーインターフェイスコンポーネントおよび機能の使用
    13. Office ファイルとの相互運用性
      1. Office ファイルとの相互運用性
      2. cfdocument の使用
      3. cfpresentation の使用
      4. cfspreadsheet の使用
      5. サポートされている Office 変換形式
      6. SharePoint の統合
    14. ColdFusion ポートレット
      1. ColdFusion ポートレット
      2. JBoss Portal Server での ColdFusion ポートレットの実行
      3. WebSphere Portal Server での ColdFusion ポートレットの実行
      4. portlet.cfc で使用する一般的なメソッド
      5. ColdFusion ポートレットコンポーネント
      6. JSR-286 のサポート
    15. ドキュメント、チャート、レポートの操作
      1. ドキュメント、チャート、レポートの操作
      2. ColdFusion での PDF フォームの操作
      3. PDF ドキュメントの組み立て
      4. ColdFusion 画像の作成および操作
      5. チャートとグラフの作成
        1. チャートについて
        2. 基本的なチャートの作成
        3. チャートの作成
        4. チャートの外観の設定
        5. チャートの作成:例
        6. チャートの管理
        7. 変数へのチャートの書き込み
        8. チャートのリンク先 URL の設定
        9. チャート作成の機能強化
      6. 印刷用のレポートとドキュメントの作成
      7. Report Builder を使用したレポートの作成
        1. Report Builder について
        2. 一般的なレポート作成作業と方法
        3. 簡単なレポートの作成
        4. はじめに
      8. スライドプレゼンテーションの作成
    16. Web 要素および外部オブジェクトの使用
      1. Web 要素および外部オブジェクトの使用
      2. XML と WDDX の使用
      3. Web サービスの使用
      4. ColdFusion web サービスの使用
      5. CFML アプリケーションへの JEE および Java 要素の統合
      6. Microsoft .NET アセンブリの使用
      7. CFML アプリケーションでの COM および CORBA オブジェクトの統合
    17. 外部リソースの使用
      1. E メールの送受信
      2. Microsoft Exchange Server との連携
      3. リモートサーバーとの連携
      4. サーバー上のファイルの管理
      5. イベントゲートウェイの使用
      6. カスタムイベントゲートウェイの作成
      7. Eclipse 用 ColdFusion 拡張機能の使用
      8. データサービスメッセージングイベントゲートウェイの使用
      9. データ管理イベントゲートウェイの使用
      10. FMS イベントゲートウェイの使用
      11. インスタントメッセージングイベントゲートウェイの使用
      12. SMS イベントゲートウェイの使用
注意:

ColdFusion(2021 リリース)では、CORBA が削除されました。CORBA 関連の特長、機能、タグを使用できなくなりました。

データ型

ColdFusion では、ユーザーが変数に型を割り当てたり、ColdFusion が変数名に型を関連付けたりすることはないので、タイプレスな環境であるように見えます。 しかし実際は、変数が表すデータには型があります。データ型は、式の評価や関数の引数の評価に影響を与えます。 ColdFusion では、式を評価するときに多くのデータ型を他のデータ型に自動的に変換できます。 数字や文字列のような簡単なデータについては、変数が式で使用されたり、関数引数として使用されたりする限り、データ型は重要ではありません。
ColdFusion 変数のデータ型は、次のいずれかのカテゴリに属しています。

  • 単純 1 つの値。 ColdFusion の式で直接使用できます。 数値、文字列、ブール値、日付時刻値などがあります。
  • バイナリ GIF ファイルや実行可能なプログラムファイルの内容などの生データ。
  • 複合 ** データのコンテナ。 通常、複数の値を表します。 ColdFusion のビルトイン複合データ型には、配列、構造体、クエリ、XML ドキュメントオブジェクトなどがあります。 配列などの複合変数は ColdFusion 式で直接使用できませんが、複合変数の単純データ型要素は式で使用できます。 例えば、myArray という一次元の数字の配列では、myArray * 5 という式を使用することはできません。ただし、myArray3 * 5 という式を使用して、配列の 3 番目の要素に 5 を掛けることはできます。
  • オブジェクト 複合構造。 データと関数演算の両方がカプセル化されているのが一般的です。 次の表に、ColdFusion で使用可能なオブジェクトのタイプと、使用方法の参照先を示します。

データ型に関する注意

ColdFusion 変数に型はありませんが、変数が表すデータの型の略記として「変数型」を使用するのは便利なことが多いです。
ColdFusion では、フォームフィールドおよびクエリパラメーターに含まれているデータの型を検証できます。詳しくは、変数の存在の確認の「変数の存在のテスト」および cfqueryparam によるセキュリティの強化の「cfqueryparam の使用」を参照してください。 cfdump タグは、変数(ColdFusion の複合データ構造体も含む)の内容をすべて表示します。 このタグは、複合データおよびそのデータを処理するコードのデバッグに便利です。ColdFusion には、変数のデータ型を識別するための次の関数が用意されています。

注意:

ColdFusion(2016 リリース)以前:

ColdFusion では、null データ型は使用されません。 ただし、データベースや Java オブジェクトなどの外部ソースから null 値を受け取った場合は、単純値として使用されるまで null 値が維持され、 その時点で、ColdFusion は null を空の文字列( "" )に変換します。また、Java オブジェクトを呼び出す際に JavaCast 関数を使用して、ColdFusion の空の文字列を Java の null に変換することができます。

NULL 変数サポート

ColdFusion 2016 リリース以前のバージョンでは、CFML は NULL 値をサポートしていませんでした。 ColdFusion は null 値を空の文字列に変換します。 SerializeJSON などの CFquery などの演算子では、Null 値は空の文字列(null ではない値)へ自動変換されます。

以下のコードは期待どおり動作します。

 

<cfscript>
 myvar=“”; // 空の文字列
 writeOutput(isNULL(myvar)); // returns NO
</cfscript>

以下のコードは例外を返します。

 

<cfscript>
 myvar=NULL; // 値が NULL です
 writeOutput(isNULL(myvar)); // 変数 NULL は未定義ですを返します
</cfscript>

ただし、JavaCast 関数を通じていつでも NULL を変数に割り当てることができます。 次に例を示します。

 

<cfscript>
 myvar=JavaCast(“null”,0); 
 writeOutput(isNULL(myvar)); // TRUE を返します
</cfscript>

ColdFusion の 2018 リリースは Null 値をサポートします。 デフォルトでは、Null サポートはオフになっています。 Null サポートを有効にするには、次の手順に従います。

  1. すべてのグローバル CF アプリケーション用に ColdFusion Administrator で NULL サポートを有効にします。 「サーバー設定/設定」で、チェックボックス「null 値サポートの有効化」を選択します。

    変更後、以下のコードは期待どおり機能します。

    <cfscript>
      myvar=NULL;
      writeOutput(isNull(myvar)); // TRUE を返します
    </cfscript>
    
  2. Memcached はアプリケーションレベルで Null サポートを有効化できます。 新しい変数 enableNULLSupport を使用すると、プロジェクトに NULL サポートを追加できます。

    例えば、以下のコードは Application.cfc で NULL サポートを追加します。

    component{
     this.enableNULLSupport=true;
    }
    

Null 文字列と null 値は異なります。writeDump か <cfdump> を使用して null 値をダンプすると、null 値は [null] として表示されます。次に例を示します。

例えば、enableNULLSupport フラグを true に設定し、null 値と null 文字列を使用して次のようにクエリを作成します。

注意:

メモ:

共有しているプロジェクトの一部として、この関数と他のスプレッドシート関数の CFFiddle デモを見つけることができます。

下のボタンをクリックして CFFiddle を起動します。

CFFiddle のワークスペースにプロジェクトをコピーするには、次の手順に従います。

  1. Gmail または Facebook の資格情報でログインします。
  2. 左側のパネルでプロジェクトに移動します。
  3. プロジェクトの cfm に変更を加えると、プロジェクトの保存を求めるポップアップが表示されます。
  4. プロジェクトに適切な名前を付けて「保存」をクリックします。
<cfscript>
 myquery=querynew(“id,name”,“integer,varchar”,[[null,“hello”],[1,“null”],[null,“null”]]);
 writedump(myquery);
 writedump(format=“text”,var=#myquery#);
</cfscript>

値をダンプすると、その null 値は [null] と表示されます。

Null 値
Null 値

注意:

NULL は予約語です。 例えば、null = “my new null value” は無効です。

null という名前の変数を作成することはできません。

NULL サポートがオンになっている場合:

  • isNull 関数は、NULL 値の有効なインスタンスをチェックします。 以前の動作では、未定義の変数を NULL と見なしていました。
  • null 値を含む変数の isDefined 関数は、TRUE を 返す ようになりました。 以前の動作では false が返されていました。
  • <cfoutput> または writeOutput() を使用して null 値を出力することはできません。 これは、Web ページを表示するユーザーにとって値は重要ではないためです。
  • 配列内の未定義の要素は自動的に NULL に設定されるようになりました。 以前のバージョンでは、これらは [未定義の配列要素] として表示されていました。
注意:

null サポートでは、文字列メンバー関数を null 値に割り当てると、NPE が返されます。

Null 結合演算子

注意:

Application.cfc ファイルまたは ColdFusion 管理者で NULL サポートを有効にすることで、ColdFusion がアプリの NULL 値を特定できるようにします。

NULL 結合 (??) 演算子は、左側の被演算子が null または undefined の場合に右側の被演算子を返す論理演算子です。それ以外の場合は、左側の被演算子を返します。

NULL 結合演算子を使用すると、開発者は nullable 型や参照型を処理する際にデフォルト値を提供し、コードの読みやすさを向上させ、ボイラープレートコードを削減できます。

シンタックス

result = possiblyNullValue ?? DefaultValue

この式の内容:

  • possiblyNullValue は NULL の可能性がある変数です。
  • defaultValue は、possiblyNullValueが null または undefined の場合に返される値です。

次に例を示します。

 

<cfscript>
    // null 結合 (??)演算子右側の被演算子を返す論理演算子です 
    // 左側の被演算子が null または undefined の場合、
    // その他の場合は、左側の被演算子を返します。
    foo=javacast(“null”,“”) ?? 「NULL結合」
    writeOutput(foo)
    writeOutput(“<br/>”)
    baz=0 ?? 45
    writeOutput(baz)
</cfscript>

出力

NULL 結合

0

このスクリプトは、null 結合演算子(??)を示しています。null 結合演算子を使用すると、左側のオペランドが null の場合にデフォルト値を指定できます。

??演算子は、変数が NULL の場合にフォールバック値を指定するのに ColdFusion で役立ちます。

  • foo は、最初は NULL を指定したので、「NULL 結合」が割り当てられます。
  • baz は、NULL ではないので 0 のままです。

詳細な例

例 1 - 関数の使用

<cfscript>
    writeOutput(“<br>”)
    function returnNull(){return NULL}
    name = returnNull() ?? 'Adobe ColdFusion'
    writeOutput(name & “<br>”)
</cfscript>

出力

Adobe ColdFusion

例 2 - 配列の使用

<cfscript>
        version = [1.1, NULL, “”]
        writeOutput(version[1] ?? 'false')
        writeOutput(“<br>”)
        writeOutput(version[2] ?? 'false')
        writeOutput(“<br>”)
        writeOutput(version[3] ?? 'false')
</cfscript>

出力

1.1

false

例 3 - 構造体の使用

<cfscript>
        // 構造体を使用します
        someStruct=StructNew('Ordered');
        someStruct.name = “User”;
        someStruct.age= 24;
        someStruct.isValidName = true;
        someStruct.isValidAge = 'NO';
        someStruct.address = NULL;
        for (i in someStruct){
                WriteOutput(“#someStruct[i]#” ?? 'false');
                writeOutput(“<br>”)
        }
        writeOutput(“<br><br>”)
</cfscript>

出力

ユーザー

24

true

NO

False

例 4 - クエリの使用

<cfscript>
        myTeam=QueryNew(“Jersey,Player_Name,Matches_Played,Win_Matches”,“integer,varchar,integer,integer”);
        RealMadrid={Jersey=1,Player_Name=“Keylor Navas”,Matches_Played=50,Win_Matches=null};
        QueryAddRow(myTeam,RealMadrid);
        RealMadrid={Jersey=7,Player_Name=“Cristiano Ronaldo”,Matches_Played=75,Win_Matches=70};
        QueryAddRow(myTeam,RealMadrid);
        

        cfloop(query = myTeam, startRow = 1, endRow = 2) {
            wins = Win_Matches ?? 'Not Recorded'
            writeOutput(“#Jersey# | #Player_Name# | #Matches_Played# | #wins#” & “<br/>”);
        }
</cfscript>

出力

1 | キーラーナバス | 50 | 未記録

7 | クリスティアーノロナウド | 75 | 70

データ型の保持

ColdFusion はタイプレスで、コード生成時に型情報を評価することや保持することはありません。 ColdFusion はランタイムでデータ型の推測を試みます。これによって予期せぬ動作が発生する場合があります。 例えば、数値が二重引用符で指定されている場合、ColdFusion では、JSON シリアル化時に文字列を数値に変換しようとします。 この試みが成功した場合、指定されたデータ型は、文字列として扱う必要があるかどうかに関係なく、数値として扱われます。

例えば、以前のバージョンの ColdFusion では、列のデータ型が定義されていない場合、CF はすべてを文字列としてシリアル化していました。 一方、データ型の保持機能では、データ型が定義されていない場合でもデータをシリアル化しながらデータを推測します。 以下のスニペットの場合:

 

<cfscript> 
 myQuery = queryNew(“id,name,ctype”,“”, 
  [ 
  {id=1,name=“1”,ctype=true}, 
  {id=2,name=“Two”,ctype=false}, 
  {id=3,name=“3”,ctype=“true”},
  {id=“4”,name=“4”,ctype=“false”}
  ]); 
 writeOutput ( SerializeJSON(myQuery) );
</cfscript>

新しい出力:

{“COLUMNS”:[“ID”,“NAME”,“CTYPE”],“DATA”:[[1,“1”,true],[2,“Two”,false],[3,“3”,“true”],[“4”,“4”,“false”]]}

古い出力:

{“COLUMNS“:[“ID“,“NAME“,“CTYPE“],“DATA“:[[“1“,“1“,“true“],[“2“,“Two“,“false“],[“3“,“3“,“true“],[“4“,“4“,“false“]]}

ColdFusion(2018 リリース)は、コンパイルタイプで変数のデータ型を推測します。 このリリースでは、デフォルトでこの機能が有効に設定されています。 ただし、この機能と以前の動作のフォールバックを無効化するため、新しいフラグが導入されました。 このフラグを jvm.config ファイルに追加できます。

-Dcoldfusion.literal.preservetype=“false/true”

フラグを機能させるため、次の項目を確認してください。

  • このフラグを有効化/無効化した後に ColdFusion を再起動する
  • <cf_install_root>/<instance_name>/wwwroot/WEB-INF/cfclasses からすべてのクラスファイルを削除するか、CFM テンプレートを再コンパイルする

SharePoint、dotnet、Web サービスなどの外部システムとやり取りする際には、既知の問題がいくつかあります。 詳細については、既知の問題のドキュメントを参照してください。

データ型の保持では、文字列 "yes" および "no" は、yes または no のままとなります(ブール値の true または false ではない)。

数値

ColdFusion では整数と実数がサポートされています。 式には整数と実数を混在させることができます。例えば、1.2 + 3 は 4.2 になります。

整数

ColdFusion では、-2,147,483,648~2,147,483,647(32 ビット符号付き整数)の範囲の整数がサポートされています。 この範囲外の値を変数に代入することもできますが、その場合は最初に文字列として保管されます。 数式でその文字列を使用すると、その値を保持したまま浮動小数点数値に変換されますが、次の例のように精度が低くなります。

 

<cfscript>
mybignum = 12345678901234567890;
mybignumtimes10=(mybignum * 10);
writeOutput(“mybignum is: #mybignum#” & “<br>”);
writeOutput(“mybignumtimes10 is: #mybignumtimes10#”);
</cfscript>

この例では次の出力が生成されます。

mybignum is: 12345678901234567890
mybignumtimes10 is: 1.23456789012E+020

実数

実数は小数部がある数値であり、浮動小数点数とも呼ばれます。 ColdFusion の実数の範囲は、約 -10300~10300 です。 実数の有効数字は最大 12 桁です。 整数と同様に、変数に 13 桁以上の値を代入することもできますが、その場合は文字列としてデータが保管されます。 その文字列を数式で使用すると、文字列が実数に変換されるので、精度が低くなることがあります。
実数は科学的記数法で表すことができます。この形式は _x_E_y_ です。x は 1.0 以上 10 未満の正または負の実数で、y は整数です。 指数表現の数値は、x の 10y 倍を表します。 例えば、4.0E^2^ は 4.0 の 10^2^ 倍、つまり 400 になります。 同様に、2.5E^-2^ は 2.5 の 10^-2^ 倍、つまり 0.025 になります。科学的記数法は、絶対値が非常に大きな数値や小さな数値を表現するときに役立ちます。

BigDecimal 数

ColdFusion には、任意の長さの 10 進数(1234567890987564.234678503059281 など)を表す特殊な BigDecimal データ型は用意されていません。このような数値は文字列として表現されます。ただし、BigDecimal 値を含む数式を受け取って計算し、結果の BigDecimal 値を文字列で返すことができる PrecisionEvaluate 関数があります。 詳細については、『CFML リファレンス』の PrecisionEvaluate を参照してください。

文字列

ColdFusion では、テキスト値は文字列で保管されます。 文字列を指定するには、文字列を単一引用符(')または二重引用符(")で囲みます。 例えば、次の 2 つの文字列は同じです。
“This is a string”
'This is a string'
空の文字列を次の方法で記述できます。

  • ""(間に何もない二重引用符のペア)
  • ''(間に何もない単一引用符のペア)
    文字列のサイズは、ColdFusion サーバーで利用可能なメモリの制限を受けるほかは自由です。ただし、長いテキストの取得(CLOB)に対するデフォルトのサイズ制限は 64K です。 ColdFusion Administrator を使用してデータベース文字列転送のサイズ制限を引き上げることは可能ですが、それによってサーバーのパフォーマンスが低下するおそれがあります。 この制限を変更するには、データソースの詳細設定ページにある長いテキストの取得を有効にするオプションをオンにします。

引用符と # 記号のエスケープ

単一引用符(')で囲まれている文字列に単一引用符を含めるには、2 つの単一引用符を使用します。これが単一引用符のエスケープです。 次の例では、エスケープされた単一引用符を使用しています。

writeOutput(“#mystring#”);

二重引用符(")で囲まれている文字列に二重引用符を含めるには、2 つの二重引用符を使用します。これが二重引用符のエスケープです。 次の例では、エスケープされた二重引用符を使用しています。

writeOutput(“#mystring#”);

文字列は二重引用符(")または単一引用符(')のどちらでも囲めるので、この 2 つの例では次に示す同じテキストが表示されます。
This is a single-quotation mark: ' This is a double-quotation mark: “
文字列に # 記号を挿入するには、次のように # 記号をエスケープする必要があります。

“This is a number sign ##”

リスト

ColdFusion にはリストを操作する関数はありますが、リストデータ型はありません。 ColdFusion のリストは、複数のエントリを区切り文字で区切った文字列として表されます。
リストのデフォルトの区切り文字はコンマ(,)です。他の文字を使用してリスト要素を区切る場合は、リスト関数で区切り文字を指定する必要があります。 複数の区切り文字を指定することもできます。 例えば、次のように、カンマまたはセミコロンを区切り文字と解釈するように指定できます。

writeOutput(“List length using ; and , as delimiters: #listlen(Mylist, “”;,“”)#
List length using only , as a delimiter: #listlen(Mylist)#”);

この例を実行すると、次の出力が表示されます。 

List length using ; and , as delimiters:5
List length using only , as a delimiter:3
区切り文字は 1 文字であることが必要です。例えば、2 つの連続したハイフンを区切り文字に指定することはできません。
リスト内で 2 つの区切り文字が連続している場合、空の要素は無視されます。例えば、MyList が "1,2,,3,,4,,,5" であり、区切り文字がコンマである場合は、リストの要素数は 5 つと見なされ、リスト関数では "1,2,3,4,5" として処理されます。

ブール値

ブール値は、真または偽を表します。 ColdFusion には、これらの値を表す 2 つの特殊な定数 True および False があります。 例えば、ブール式 1 IS 1 は True と評価されます。 式 "Monkey" CONTAINS "Money" は False と評価されます。
次の例のように、式の中でブール定数を直接使用できます。

UserHasBeenHere = True;

ブール式では、True、0 以外の数値、および文字列 "Yes"、"1"、"True" はすべて真を表し、False、0、および文字列 "No"、"0"、"False" はすべて偽を表します。

ブール値の評価では大文字と小文字は区別されません。 例えば、True、TRUE、および true はすべて同じです。

日付時刻値

ColdFusion では日付時刻値の演算がおこなえます。 日付時刻値では、西暦 100 年から 9999 年の日時を識別できます。 日付または時刻のみを指定することもできますが、ColdFusion では日付時刻オブジェクトと呼ばれる単一のデータ型を使用して、日付、時刻、および日付時刻値が処理されます。
ColdFusion には、日付時刻値を作成および操作する関数や、値の全部または一部をさまざまな形式で返す関数が多数用意されています。
次のように定数を使用して、cfset タグで日付時刻値を直接入力できます。

myDate = “October 30, 2001”;

この場合、情報は文字列として保管されます。 日付時刻関数を使用した場合は、別の単純データ型である日付時刻オブジェクトとして値が保管されます。 日時の指定には、できる限り CreateDate や CreateTime などの日付時刻関数を使用してください。日付時刻関数を使用すれば、無効な形式で日時を指定するおそれがなくなり、日付時刻オブジェクトを直接作成できます。

日時の形式

米国の標準の日付形式を使用して、日付、時刻、または日時を直接入力できます。 年の値が 2 桁で指定されている場合、0~29 は 21 世紀の日付として処理されます。30~99 は 20 世紀の日付として処理されます。 時刻値は、秒単位まで使用できます。 次の表に、有効な日時の形式を示します。

指定データ

使用形式

Date

October 30, 2003Oct 30, 2003Oct. 30, 200310/30/032003-10-3010-30-2003

時刻

02:34:122:34a2:34am02:34am2am

日付と時刻

有効な日付と時刻の組み合わせ形式(例:October 30, 2003 02:34:12Oct 30, 2003 2:34aOct.30, 2001 2:34am10/30/03 02:34am2003-10-30 2am10-30-2003 2am)。

ロケール固有の日時

ColdFusion には、現在のロケールに固有の形式で日時(および数値や通貨値)を入出力できる関数が用意されています。 ロケールとは、英語(米国)やフランス語(スイス)など、言語および地域を識別する情報のことです。 米国標準以外の形式で日時を入出力するには、これらの関数を使用します。ロケールを指定するには SetLocale 関数を使用します。 その例は次のとおりです。

writeOutput(“#LSDateFormat(Now(), “”ddd, dd mmmm, yyyy“”)#”);

この例では次のような行が出力されます。

mar., 03 juin, 2003
国際関数について詳しくは、Developing Globalized ApplicationsCFML リファレンスを参照してください。

ColdFusion での日時の保管方法

ColdFusion では、日時は日付時刻オブジェクトとして保管および操作されます。 日付時刻オブジェクトでは、タイムラインデータが実数として保管されます。 この保管方法は処理効率が高く、多くのデータベースシステムで採用されています。 日付時刻オブジェクトでは、1 日は 2 つの連続した整数の差になります。 日付時刻値の時刻の部分は、実数の小数部分に保管されます。 値 0 は、1899年12月30日午前12:00を示します。
算術演算を使用して日付時刻値を直接操作することも可能ですが、コードが読みにくくなり、管理も難しくなる場合があります。 代わりに、ColdFusion の日付時刻操作関数を使用してください。 これらの関数の詳細については、『CFML リファレンス』を参照してください。

バイナリデータ型とバイナリエンコード

バイナリデータ(バイナリオブジェクトとも呼ばれます)は、GIF ファイルや実行可能プログラムファイルの内容などの生データです。通常、バイナリデータは直接使用しませんが、メールを使用するファイルを転送する前の特に文字列バイナリエンコーディングへのコンバージョンについては、バイナリファイルの変数への読み込みに cffile タグを使用できます。
文字列バイナリエンコードとは、Web 上で送信可能な文字列形式でバイナリ値を表したもののことです。 ColdFusion では、次に示す 3 つのバイナリエンコード形式がサポートされています。

エンコーディング

形式

Base64

バイナリデータのすべてのバイトを 6 ビットずつに分割してエンコードします。 これによって、バイナリデータおよび ANSI 以外の文字データを破損することなく電子メールで転送できるようになります。 Base64 アルゴリズムは、IETF RFC 2045 で定義されています。詳細については、www.ietf.org/rfc/rfc2045.txt を参照してください。

Hex

0~9 および A~F の文字を使用して、各バイトを 2 文字の 16 進数値(3A など)で表します。

UU

NIX  UUencode  アルゴリズムを使用してデータを変換します。

ColdFusion には、文字列データ、バイナリデータ、文字列エンコードされたバイナリデータの間で変換をおこなうための次の関数が用意されています。

関数

説明

エンコードされたバイナリデータを含む文字列をバイナリオブジェクトに変換します。

バイナリデータをエンコード文字列に変換します。

指定の文字エンコードを使用して、文字列をバイナリデータに変換します。

指定の文字エンコードを使用して、バイナリオブジェクトを文字列に変換します。

文字列およびバイナリデータを、Base64 でエンコードされたデータに変換します。

Base64 でエンコードされたデータをバイナリデータに変換します。BinaryDecode 関数には、ToBase64 の機能が含まれています。

ほとんどの単純データ型を文字列データに変換します。 数値、日付時刻オブジェクト、およびブール値を変換できます。 日付時刻オブジェクトは ODBC タイムスタンプ文字列に変換されます。 バイナリデータを新しいアプリケーションの文字列に変換する  には、 CharsetEncode 関数を使用することをお勧めします。

複合データ型

配列、構造体、およびクエリは、ColdFusion のビルトイン複合データ型です。 構造体およびクエリはデータ値ではなくデータのコンテナなので、オブジェクトと呼ばれることがあります。
配列および構造体の使用方法について詳しくは、配列および構造体の使用を参照してください。

配列

配列は複数の値を格納する方法の 1 つで、1 次元または 2 次元以上の表形式に似た構造を持ちます。 配列を作成するには、関数または代入ステートメントを使用します。

  • ColdFusion の ArrayNew 関数を使用すると、配列が作成され、初期次元が指定されます。 例えば次の行では、空の 2 次元配列が作成されます。

myarray=ArrayNew(2);
  • 直接代入を使用すると、配列が作成され、配列要素が挿入されます。 例えば次の行では、2 次元配列が作成され、1 行目の 2 列目の値が現在の日付に設定されます。

myarray[1][2]=Now();

前の例に示すように、要素を参照するには、次元ごとに 1 つずつ設定される数値インデックスを使用します。

最大 3 つまでの次元を含む配列を直接作成できます。 配列のサイズや次元数に制限はありません。 4 次元以上の配列を作成するには、配列の配列を作成します。
作成した配列の内容は、関数や直接参照を使用して操作できます。
新しい変数に既存の配列を代入すると、新しい配列が作成され、元の配列の内容が新しい配列にコピーされます。次の例では、元の配列のコピーが作成されます。

<cfset newArray=myArray>

配列の使用方法について詳しくは、配列および構造体の使用を参照してください。

構造体

ColdFusion の構造体は、キーと値のペアで構成されます。キーはテキスト文字列で、値にはすべての ColdFusion データ型(構造体を含む)を使用できます。 構造体によって、互いに関連する一連の変数を 1 つの名前でグループ化することができます。 構造体を作成するには、ColdFusion の StructNew 関数を使用します。 例えば次の行では、depts という新しい空の構造体が作成されます。

<cfset depts=StructNew()>

また、構造体のキーに値を代入する方法で新しい構造体を作成することもできます。 例えば次の行では、MyStruct という新しい構造体が作成されます。この構造体は MyValue という 1 つのキーを持ち、その値は 2 になります。

<cfset MyStruct.MyValue=2>

ColdFusion 7 以前のバージョンでは、このコードを実行すると「MyStruct.MyValue」という名前の Variables スコープ変数が作成され、値が 2 に設定されていました。

作成した構造体は、関数や直接参照を使用して、キーと値のペアの追加などの操作を行えます。
構造体に保存されている要素を参照するには、次のいずれかの方法を使用します。

  • StructureName\.KeyName
  • StructureName[“KeyName”]
    以下の例はこれらのメソッドを示しています。
depts[“John”]=“Sales”

新しい変数に既存の構造体を代入しても、新しい構造体は作成されません。 この場合、新しい変数は、元の構造体変数と同じデータ(元の構造体変数が保存されているメモリ内の場所)を参照します。 つまり、どちらの変数も同じオブジェクトを参照します。 

例えば、次の行で新たに作成される myStructure2 という変数は、myStructure 変数と同じ構造体を参照します。

<cfset myStructure2=myStructure>

myStructure2 の内容を変更すると、myStructure の内容も変更されます。 構造体の内容をコピーするには、構造体などの複合データ型の内容をコピーする ColdFusion の Duplicate 関数を使用します。

構造体のキーの名前には、構造体や配列などの複合データオブジェクトの名前を指定することができます。 これにより、恣意的に複雑な構造を作成できます。
構造体の使用について詳しくは、配列および構造体の使用を参照してください。

クエリ

クエリオブジェクト(クエリ、クエリ結果、レコードセットとも呼ばれます)は ColdFusion の複合データ型で、名前を持つ列のセットとしてデータを表現します。これは、データベーステーブルの列のセットに似ています。 データをクエリオブジェクトとして返すタグの例には、次のものがあります。

  • cfquery
  • cfdirectory
  • cfhttp
  • cfldap
  • cfpop
  • cfprocresult
    これらのタグでは、名前属性でクエリオブジェクトの変数名を指定します。また、QueryNew 関数もクエリオブジェクトを作成します。
    新しい変数にクエリを代入しても、クエリオブジェクトはコピーされません。この場合は、どちらの名前も同じレコードセットデータを参照します。 例えば次の行では、myQuery 変数と同じレコードセットを参照する myQuery2 という変数が新たに作成されます。
<cfset myQuery2 = myQuery>

myQuery のデータを変更すると、myQuery2 にもその変更が反映されます。

クエリ列を参照するには、クエリ名、ピリオド、列名の形式で指定します。例えば、次のようになります。

myQuery.Dept_ID

タグ属性でクエリ名を指定する cfoutputcfloop などのタグ内では、クエリ列を参照するときにクエリ名を指定する必要はありません。

クエリ列は、1 次元配列と同じ方法でアクセスできます。 例えば次の行では、myQuery クエリの Employee 列の 2 行目の内容を変数 myVar に代入します。

<cfset myVar = myQuery.Employee[2]>

クエリ内の 1 つの行全体(すべての列)を配列表記法で参照することはできません。 例えば、myQuery2 は myQuery クエリオブジェクトの 2 番目の行全体を意味しません。

構造体およびクエリの操作

構造体変数とクエリ変数はオブジェクトへの参照です。これらのデータ型には、次のセクションに示すルールが適用されます。

オブジェクトに対する複数の参照

複数の変数が 1 つの構造体またはクエリオブジェクトを参照している場合、オブジェクトへの参照が 1 つでもあれば、そのオブジェクトは存続します。 その例を次に示します。

 

<cfscript>
depts = structnew();
newStructure=depts;
depts.John=“Sales”;
depts=0;
 writeOutput(“#newStructure.John# #depts#”);
</cfscript>

この例を実行すると、次の出力が表示されます。
Sales 0
depts=0 宣言の実行後、depts 変数は構造体を参照しません。この変数は値 0 の単純変数です。ただし、変数 newStructure は引き続き元の構造体オブジェクトを参照します。

オブジェクトへのスコープの割り当て

他のスコープの新しい変数にクエリまたは構造体を代入すると、そのクエリまたは構造体に別のスコープが割り当てられます。 例えば次の行では、myquery というローカル変数を使用して、Server.SScopeQuery というサーバー変数を作成します。

<cfset Server.SScopeQuery = myquery>

サーバースコープのクエリ変数をクリアするには、次のように再度クエリオブジェクトを代入します。

<cfset Server.SScopeQuery = 0>

この行を実行すると、元のオブジェクトへの参照はサーバースコープから削除されますが、その他の参照は削除されません。

オブジェクトのコピーと複製

Duplicate 関数を使用すると、構造体またはクエリオブジェクトのコピーを作成できます。 コピーを変更しても、元の構造体またはクエリオブジェクトには影響しません。

クエリ列の使用

query 属性を持つ cfloop、cfoutput、cfmail などのタグの外部では、クエリ列を配列として処理できます。 ただし、クエリ列の参照は、常に意図どおりに機能するとは限りません。 このセクションでは、次の cfquery タグで生成される結果を例に取って、クエリ列の参照について説明します。

SELECT FirstName, LastName
FROM Employee
</cfquery>

クエリ列内の要素を参照するには、配列のインデックスに行番号を指定します。 例えば、次のどちらの行でも "ben" という単語が表示されます。

<cfoutput> #myQuery.Firstname[1]# </cfoutput><br> 
<cfoutput> #myQuery[“Firstname”][1]# </cfoutput><br>

配列インデックスを使用せずに、myQuery.Firstname や myQuery"Firstname" のようにクエリ列を参照した場合は、ColdFusion の動作はやや複雑になります。 この 2 つの参照形式では、生成される結果が異なります。 

myQuery.Firstname という参照は、その列の最初の行に自動変換されます。 例えば次の行では、"ben" という単語が出力されます。

<cfoutput>#mycol#</cfoutput>

しかし、次の行ではエラーメッセージが表示されます。

<cfoutput>#mycol[1]#</cfoutput><br>

reference Query["Firstname"] を参照した場合、列の最初の行への自動変換はおこなわれません。 例えば次の行では、複合型を単純値に変換できないことを示すエラーメッセージが表示されます。

<cfoutput> #myQuery['Firstname']# </cfoutput><br>

同様に次の行では、列の 2 行目の値である名前 "marjorie" が出力されます。

<cfoutput>#mycol[2]#</cfoutput><br>

ただし、単純値が要求される代入式では、クエリ列が最初の行の値に自動変換されます。 例えば次の行では、名前 "ben" が 2 回表示されます。

<cfoutput> #myQuery.Firstname# </cfoutput><br> 
<cfset myVar= myQuery['Firstname']> 
<cfoutput> #myVar# </cfoutput><br>

ColdFusion 10 では FUNCTION は ColdFusion データ型

 

次に例を示します。

<cfscript>
public FUNCTIOn FUNCTION a()
{
return variables.b;
}
public FUNCTION b()
{
return “Hal”;
}
writeoutput(a());
writedump(a().getMetadata());
writedump(a.getMetadata());
writedump(a.getMetadata());
</cfscript>

ヘルプをすばやく簡単に入手

新規ユーザーの場合