構造体について

ColdFusion の構造体は、キーと値のペアで構成されます。構造体によって、互いに関連する一連の変数を 1 つの名前でグループ化することができます。ColdFusion の構造体はダイナミックに定義できます。
構造体を使用すると、関連する値を個々の値ではなく 1 つのユニットとして参照できます。例えば、従業員リストを管理する場合は、氏名、住所、電話番号、ID 番号などの個人情報を保持する構造体を作成できます。これらの情報は、個別の変数の集まりではなく、employee という構造体として参照できます。
構造体のキーは、文字列であることが必要です。キーに関連付ける値には、有効な ColdFusion 値またはオブジェクトが使用できます。文字列や整数、または配列や別の構造体などの複合オブジェクトを関連付けることができます。構造体にはあらゆる種類のデータを含めることができるので、複雑なデータを柔軟に表現できる強力なツールとして使用できます。

構造体の表記法

ColdFusion では、構造体の内容を参照するための表記法として、次の 3 つの方法がサポートされています。使用する表記法はアプリケーションの必要性に応じて選択します。

表記法

説明

Object.property

obj.prop でオブジェクト obj のプロパティ prop を参照できます。この表記法(ドット表記法)は、depts.John="Sales" のような単純な代入に便利です。
この表記法は、プロパティ名(キー)が事前にわかっており、特殊文字、数字、空白を含まない文字列である場合にのみ使用できます。プロパティ(キー)がダイナミックな場合は、ドット表記法を使用できません。

連想配列

キー名が事前にわからない場合や、キー名にスペース、数字、または特殊文字が含まれている場合に使用できます。この表記法では、インデックスが文字列である配列として構造体を記述します。例えば、次のようになります。
depts["John"]="Sales"
depts[employeeName] = "Sales"
連想配列のインデックスには変数(employeeName など)を使用できます。したがって、リテラルキー名はすべて引用符で囲みます。変数を使用した連想配列の参照方法については、ダイナミック式およびダイナミック変数構造体の参照をダイナミックに構築するを参照してください。

構造体

構造体表記法は、構造体を作成して初期値を設定する場合にのみ使用します。構造体のデータにアクセスしたりデータを更新したりするときには使用しません。この表記法は、代入式の右辺でのみ使用します。この表記法の形式は次のとおりです。
{keyName=value[,keyName=value]...}
角括弧と省略記号([]...)は、繰り返しが可能なオプションの内容であることを表します。次の例では、構造体表記法を使用して構造体を作成しています。
<cfset name={firstName = "John", lastName = "Smythe"}>

順序付き構造体のサポート

順序付き構造体

ColdFusion の構造体に対して反復処理を行う場合、キーの順序はランダムになります。ColdFusion(2016 リリース)では、キーの挿入順序を維持することができます。この挿入順序は、順序付き構造体で可能になります。

シンタックス

myStruct=StructNew(&quot;Ordered&quot;);

myStruct.first=&quot;I am number one.&quot;;

myStruct[&quot;second&quot;]=&quot;I am number two&quot;;

次のように、リテラルシンタックスを使用して順序付き構造体を作成することもできます。

myStruct=[first:&quot;I am number one&quot;,second=&quot;I am number two&quot;];

順序付き構造体の使用例

 

<cfscript>
       Beatles=StructNew(&quot;Ordered&quot;); // ColdFusion(2016 リリース)では順序付き構造体をサポート
       // この構造体の値を設定
       Beatles.John=&quot;Vocals&quot;;
       Beatles.Paul=&quot;Guitar and vocals&quot;;
       Beatles.George=&quot;Lead guitar&quot;;
       Beatles.Ringo=&quot;Drums&quot;;
       // 構造体を反復処理して構造体の値を挿入順に
       // 表示
       for (i in Beatles)
       {
             WriteOutput(&quot;#i#:#Beatles[i]#&quot; & &quot; &quot;);
       }
</cfscript>

出力

JOHN:Vocals PAUL:Guitar  and vocals GEORGE:Lead guitar R INGO:Drums

ソート済み構造体

ColdFusion(2016 リリース)アップデート 3 では、ソート済み構造体をサポートしています。構造体でソート順序を維持することができます。ソートを行う場合、実行時に毎回ソートを行うのではなく、ソート順序が維持されます。

ソート済み構造体の使用例

 

<cfscript>
       // ソートタイプをテキスト、ソート順序を降順とする順序付きタイプの構造体を作成someStruct=StructNew(&quot;ordered&quot;,&quot;text&quot;,&quot;desc&quot;,false);
       someStruct.google = &quot;search&quot;;
       someStruct.microsoft= &quot;windows&quot;;
       someStruct.apple = &quot;mac&quot;;
       someStruct.amazon = &quot;shopping&quot;;
       for (i in someStruct){
             WriteOutput(#i# & &quot;|&quot;);
       }
</cfscript>

出力

MICROSOFT|GOOGLE|APPLE|AMAZON|

コールバック関数を使用した構造体内でのソート

 

<cfscript>
sorted = structNew(&quot;ordered&quot;, function(e1,e3,e2,e4)
{
return compare(e1,e2);
});
       sorted.azure = &quot;blue&quot;;
       sorted.adze = &quot;tool&quot;;
       sorted.baffle = 01;
       sorted.adamantium = &quot;dork&quot;;
       sorted.alabama = 3;
       sorted.ballad = 007;
       sorted.age = 36;
       sorted.aabc= &quot;allardyce&quot;;
       sorted.baleful=&quot;hodgson&quot;;
       sorted.aardvark=-7;
       sorted.back=&quot;sort&quot;;
       writedump(sorted);
</cfscript>

複合構造体の参照

構造体の中に別の構造体が含まれている場合は、object.property 表記法または連想配列表記法を拡張することで、ネストされた構造体のデータを参照できます。両方の表記法を組み合わせて使用することもできます。

例えば、構造体 structure1 にキー key1 があり、その値が struct2key1、struct2key2... というキーを持つ構造体である場合は、次の参照方法のいずれを使用しても、key1 の構造体の最初のキーのデータにアクセスできます。

Structure1.key1.Struct2key1 
Structure1[&quot;key1&quot;].Struct2key1 
Structure1.key1[&quot;Struct2key1&quot;] 
Structure1[&quot;key1&quot;][&quot;Struct2key1&quot;]

次の例に、複合構造体の内容を参照する様々な方法を示します。

 

<cfscript>
    myArray=ArrayNew(1);
myArray[1]=&quot;2&quot;;
myArray[2]=&quot;3&quot;;
myStruct2=StructNew();
myStruct2.struct2key1=&quot;4&quot;;
myStruct2.struct2key2=&quot;5&quot;;
myStruct=StructNew();
myStruct.key1=&quot;1&quot;;
myStruct.key2=myArray;
myStruct.key3=myStruct2;
writeDump( var=myStruct );
key1Var=&quot;key1&quot;;
key2Var=&quot;key2&quot;;
key3Var=&quot;key3&quot;;
var2=&quot;2&quot;;

 writeOutput(&quot;Value of the first key 
#mystruct.key1# 
#mystruct[&quot;&quot;key1&quot;&quot;]# 
#mystruct[key1Var]# 
  
Value of the second entry in the key2 array 
#myStruct.key2[2]# 
#myStruct[&quot;&quot;key2&quot;&quot;][2]# 
#myStruct[key2Var][2]# 
#myStruct[key2Var][var2]# 
  
Value of the struct2key2 entry in the key3 structure 
#myStruct.key3.struct2key2# 
#myStruct[&quot;&quot;key3&quot;&quot;][&quot;&quot;struct2key2&quot;&quot;]# 
#myStruct[key3Var][&quot;&quot;struct2key2&quot;&quot;]# 
#myStruct.key3[&quot;&quot;struct2key2&quot;&quot;]# 
#myStruct[&quot;&quot;key3&quot;&quot;].struct2key2#&quot;);

</cfscript>

コードの説明

このコードについて、次の表で説明します。

コード

説明

<cfscript>

myArray = ArrayNew (1);

myArray[1]="2";

myArray[2]="3";

myStruct2=StructNew();

myStruct2.struct2key1="4";

myStruct2.struct2key2="5";

myStruct=StructNew();

myStruct.key1="1";

myStruct.key2=myArray;

myStruct.key3=myStruct2;

</cfscript>

3 つのエントリ(文字列、配列、埋め込み構造体)を持つ構造体を作成します。

writeDump( var=myStruct );

構造体全体を表示します。

key1Var="key1";

key2Var=""key2;

key3Var="key3";

myStruct の各キーの名前および数字 2 を値として持つ変数を作成します。

<cfoutput> 
Value of the first key<br> 
#mystruct.key1#<br> 
#mystruct["key1"]#<br> 
#mystruct[key1Var]#<br> 
<br>

次の表記法を使用して、key1(文字列)エントリの値を出力します。

  • object.property 表記法
  • 定数を使用した連想配列表記法
  • 変数を使用した連想配列表記法

<br> 
Value of the second entry in the key2 array<br> 
#myStruct.key2[2]#<br> 
#myStruct["key2"][2]#<br> 
#myStruct[key2Var][2]#<br> 
#myStruct[key2Var][var2]#<br> 
<br>

次の表記法を使用して、key2(配列)の 2 番目のエントリの値を出力します。

  • object.property 表記法
  • 定数を使用した連想配列表記法
  • 変数を使用した連想配列表記法
  • 配列と配列インデックスの両方に変数を使用した連想配列表記法

Value of the struct2key2 entry in the key3 structure<br> 
#myStruct.key3.struct2key2#<br> 
#myStruct["key3"]["struct2key2"]#<br> 
#myStruct[key3Var]["struct2key2"]#<br> 
#myStruct.key3["struct2key2"]#<br> 
#myStruct["key3"].struct2key2#<br> 
<br>

次の表記法を使用して、key3(埋め込み構造体)の 2 番目のエントリの値を出力します。

  • object.property 表記法
  • 2 つの定数を使用した連想配列表記法
  • 変数と定数を使用した連想配列表記法
  • object.property 表記法と連想配列表記法
  • 連想配列表記法と object.property 表記法

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

新規ユーザーの場合

Adobe MAX 2025

Adobe MAX Japan
クリエイターの祭典

2025 年 2 月 13 日
東京ビッグサイト