構造体の作成と使用

構造体の作成

ColdFusion での構造体の作成方法には、明示的な方法と暗黙的な方法の 2 通りがあります。明示的な方法では、関数を使用して構造体を作成し、代入ステートメントまたは関数を使用してデータを設定します。暗黙的な方法では、代入ステートメントを使用します。

関数による構造体の作成

次のように、StructNew 関数を使用して構造体に変数名を割り当てることで、構造体を作成できます。

<cfscript>
structName=StructNew();
</cfscript>
<cfscript> structName=StructNew(); </cfscript>
<cfscript>
    structName=StructNew();
</cfscript>

例えば、departments という構造体を作成するには、次のシンタックスを使用します。

<cfscript>
departments=StructNew();
</cfscript>
<cfscript> departments=StructNew(); </cfscript>
<cfscript>
    departments=StructNew();
</cfscript>

このステートメントによって空の構造体が作成されるので、データを追加できます。

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

ColdFusion の 2016 リリースでは、挿入順序を維持した構造体を作成できます。

StructNew("Ordered") を使用して構造体を反復処理すると、キーは挿入順序に従って取得されます。

次に例を示します。

 

<cfscript>
departments = structNew(&quot;Ordered&quot;);
/** この構造体を反復処理すると、値は挿入された順序で取得されます。**/
/** 構造体を作成し、その内容を設定します。**/
departments.John = &quot;Sales&quot;;
departments.Tom = &quot;Finance&quot;;
departments.Mike = &quot;Education&quot;;
departments.Andrew = &quot;Marketing&quot;;
/** 内容を表示するテーブルを作成します **/
writeOutput(&quot;<table cellpadding=&quot;&quot;2&quot;&quot; cellspacing=&quot;&quot;2&quot;&quot;>
<tr>
<td><b>Employee</b></td>
<td><b>Department</b></td>
</tr>&quot;);
// cfloop を使用して、departments 構造体をループします。item 属性は、構造体キーの名前を指定します。
for ( 部門内の人 ) {
writeOutput(&quot;<tr>
<td>#person#</td>
<td>#Departments[person]#</td>
</tr>&quot;);
}
writeOutput(&quot;</table>&quot;);
</cfscript>
<cfscript> departments = structNew(&quot;Ordered&quot;); /** この構造体を反復処理すると、値は挿入された順序で取得されます。**/ /** 構造体を作成し、その内容を設定します。**/ departments.John = &quot;Sales&quot;; departments.Tom = &quot;Finance&quot;; departments.Mike = &quot;Education&quot;; departments.Andrew = &quot;Marketing&quot;; /** 内容を表示するテーブルを作成します **/ writeOutput(&quot;<table cellpadding=&quot;&quot;2&quot;&quot; cellspacing=&quot;&quot;2&quot;&quot;> <tr> <td><b>Employee</b></td> <td><b>Department</b></td> </tr>&quot;); // cfloop を使用して、departments 構造体をループします。item 属性は、構造体キーの名前を指定します。 for ( 部門内の人 ) { writeOutput(&quot;<tr> <td>#person#</td> <td>#Departments[person]#</td> </tr>&quot;); } writeOutput(&quot;</table>&quot;); </cfscript>
<cfscript>
departments = structNew(&quot;Ordered&quot;);
 /** この構造体を反復処理すると、値は挿入された順序で取得されます。**/
 /** 構造体を作成し、その内容を設定します。**/
      
     departments.John = &quot;Sales&quot;;
     departments.Tom = &quot;Finance&quot;;
     departments.Mike = &quot;Education&quot;;
     departments.Andrew = &quot;Marketing&quot;;
      
 /** 内容を表示するテーブルを作成します **/
    
 writeOutput(&quot;<table cellpadding=&quot;&quot;2&quot;&quot; cellspacing=&quot;&quot;2&quot;&quot;>
    <tr>
        <td><b>Employee</b></td>
        <td><b>Department</b></td>
    </tr>&quot;);
 // cfloop を使用して、departments 構造体をループします。item 属性は、構造体キーの名前を指定します。 
 for ( 部門内の人 ) {

  writeOutput(&quot;<tr>
            <td>#person#</td>
            <td>#Departments[person]#</td>
        </tr>&quot;);
 }

 writeOutput(&quot;</table>&quot;);
</cfscript>

このコードの出力は次のようになります。

Employee

Department

John

Sales

Tom

Finance

Mike

Education

Andrew

Marketing

構造体の暗黙的な作成

ColdFusion の 2016 リリースでは、次の例に示すように、空の順序付き構造体を暗黙に作成できます。

<cfset myStruct = [:]> または <cfset myStruct = [=]>

次の例は、リテラルシンタックスから構造体を作成する方法を示しています。

departments = [Marketing = "John", Sales : [Executive : "Tom", Assistant = "Mike"]];

空の構造体を暗黙的に作成するには、次の例のようにします。

<cfscript>
myStruct = {};
</cfscript>
<cfscript> myStruct = {}; </cfscript>
<cfscript> 
  myStruct = {};
</cfscript>

変数にデータを代入することによって構造体を作成できます。例えば、次の各行では、myStruct という名前の構造体が作成されます。この構造体は 1 つの要素 name を持ち、その値は Adobe Systems Incorporated です。

<cfscript>
coInfo=StructNew();
coInfo.name=&quot;Adobe Systems Incorporated&quot;;
coInfo[&quot;name&quot;]=&quot;Adobe Systems Incorporated&quot;;
coInfo={name=&quot;Adobe Systems Incorporated&quot;};
</cfscript>
<cfscript> coInfo=StructNew(); coInfo.name=&quot;Adobe Systems Incorporated&quot;; coInfo[&quot;name&quot;]=&quot;Adobe Systems Incorporated&quot;; coInfo={name=&quot;Adobe Systems Incorporated&quot;}; </cfscript>
<cfscript>
    coInfo=StructNew();
    coInfo.name=&quot;Adobe Systems Incorporated&quot;;
    coInfo[&quot;name&quot;]=&quot;Adobe Systems Incorporated&quot;;
    coInfo={name=&quot;Adobe Systems Incorporated&quot;};
</cfscript>

3 番目の例のように構造体表記法を使用して構造体を作成する場合は、複数の構造体フィールドを作成できます。 その例を次に示します。

<cfscript>
coInfo={name=&quot;Adobe Systems Incorporated&quot; industry=&quot;software&quot;};
</cfscript>
<cfscript> coInfo={name=&quot;Adobe Systems Incorporated&quot; industry=&quot;software&quot;}; </cfscript>
<cfscript>
    coInfo={name=&quot;Adobe Systems Incorporated&quot; industry=&quot;software&quot;};
</cfscript>

暗黙的な作成をおこなうときは、構造体をネストしたり、配列をネストしたり、構造体と配列をネストしたりすることができます。 次に例を示します。

<cfscript>
myStruct = {structKey1 = {innerStructKey1 = &quot;innerStructValue1&quot;}};
</cfscript>
<cfscript> myStruct = {structKey1 = {innerStructKey1 = &quot;innerStructValue1&quot;}}; </cfscript>
<cfscript>
  myStruct = {structKey1 = {innerStructKey1 = &quot;innerStructValue1&quot;}};
</cfscript>

構造体表記法の内部で、代入式の左辺に object .property の表記法を使用することができます。 次に例を示します。

<cfscript>
myStruct={structKey1.innerStructKey1 = &quot;innerStructValue1&quot;};
</cfscript>
<cfscript> myStruct={structKey1.innerStructKey1 = &quot;innerStructValue1&quot;}; </cfscript>
<cfscript>
myStruct={structKey1.innerStructKey1 = &quot;innerStructValue1&quot;};
</cfscript>

次のような複数のステートメントを使用することもできます。

<cfscript>
innerStruct1 = {innerStructKey1 = &quot;innerStructValue1&quot;};
myStruct1={structKey1 = innerStruct1};
</cfscript>
<cfscript> innerStruct1 = {innerStructKey1 = &quot;innerStructValue1&quot;}; myStruct1={structKey1 = innerStruct1}; </cfscript>
<cfscript>
  innerStruct1 = {innerStructKey1 = &quot;innerStructValue1&quot;};
  myStruct1={structKey1 = innerStruct1};
</cfscript>

構造体を暗黙的に作成する場合、ダイナミック変数は使用できません。 例えば、次の式ではエラーが発生します。

<cfscript>
i=&quot;coInfo&quot;;
&quot;#i#&quot;={name = &quot;Adobe Systems Incorporated&quot;};
</cfscript>
<cfscript> i=&quot;coInfo&quot;; &quot;#i#&quot;={name = &quot;Adobe Systems Incorporated&quot;}; </cfscript>
<cfscript>
 i=&quot;coInfo&quot;;
 &quot;#i#&quot;={name = &quot;Adobe Systems Incorporated&quot;};
</cfscript>

関数およびタグにおける暗黙的に作成された構造体の使用

暗黙的に作成された構造体は、関数(ユーザー定義関数を含む)やタグの中で直接使用できます。 例えば、次のコードを実行すると、暗黙的に作成された構造体がダンプされます。

<cfscript>
writeDump( var={Name =&quot;28 Weeks Later&quot;, Time = &quot;7:45 PM&quot;} );
</cfscript>
<cfscript> writeDump( var={Name =&quot;28 Weeks Later&quot;, Time = &quot;7:45 PM&quot;} ); </cfscript>
<cfscript>
writeDump( var={Name =&quot;28 Weeks Later&quot;, Time = &quot;7:45 PM&quot;} );
</cfscript>

次の例に示すように、構造体表記法の内部では配列表記法を使用できます。

<cfscript>
student = {firstName=&quot;Jane&quot;, lastName=&quot;Janes&quot;, grades=[91, 78, 87]};
</cfscript>
<cfscript> student = {firstName=&quot;Jane&quot;, lastName=&quot;Janes&quot;, grades=[91, 78, 87]}; </cfscript>
<cfscript>
student = {firstName=&quot;Jane&quot;, lastName=&quot;Janes&quot;, grades=[91, 78, 87]};
</cfscript>

構造体要素の追加と更新

構造体に要素を追加したり、構造体の要素を更新したりするには、要素に値を代入するか、または ColdFusion 関数を使用します。 直接代入するほうがシンプルで効率的です。
構造体にキーと値のペアを追加するには、次の例のように構造体キーの値を定義します。

 

<cfscript>
myStruct=StructNew();
myStruct.key1=&quot;A new structure with a new key&quot;;
WriteDump(myStruct);
myStruct.key2=&quot;Now I've added a second key&quot;;
WriteDump(myStruct);
</cfscript>
<cfscript> myStruct=StructNew(); myStruct.key1=&quot;A new structure with a new key&quot;; WriteDump(myStruct); myStruct.key2=&quot;Now I've added a second key&quot;; WriteDump(myStruct); </cfscript>
<cfscript>
       myStruct=StructNew();
       myStruct.key1=&quot;A new structure with a new key&quot;;
       WriteDump(myStruct);
       myStruct.key2=&quot;Now I've added a second key&quot;;
       WriteDump(myStruct);
</cfscript>

次のコードでは、cfset と object.property 表記法を使用して、departments.John という構造体要素を作成し、John の部門を Sales から Marketing に変更しています。 さらに、連想配列表記法を使用して、部門を Facilities に変更しています。 部門を変更するたびに、その結果を表示しています。

 

<cfscript>
departments=structnew();
departments.John = &quot;Sales&quot;;
writeOutput(&quot;Before the first change, John was in the #departments.John# Department&quot;);
Departments.John = &quot;Marketing&quot;;
writeOutput(&quot;After the first change, John is in the #departments.John# Department&quot;);
Departments[&quot;John&quot;] = &quot;Facilities&quot;;
writeOutput(&quot;After the second change, John is in the #departments.John# Department&quot;);
</cfscript>
<cfscript> departments=structnew(); departments.John = &quot;Sales&quot;; writeOutput(&quot;Before the first change, John was in the #departments.John# Department&quot;); Departments.John = &quot;Marketing&quot;; writeOutput(&quot;After the first change, John is in the #departments.John# Department&quot;); Departments[&quot;John&quot;] = &quot;Facilities&quot;; writeOutput(&quot;After the second change, John is in the #departments.John# Department&quot;); </cfscript>
<cfscript>
departments=structnew();
departments.John = &quot;Sales&quot;;
writeOutput(&quot;Before the first change, John was in the #departments.John# Department&quot;);
Departments.John = &quot;Marketing&quot;;
writeOutput(&quot;After the first change, John is in the #departments.John# Department&quot;);
Departments[&quot;John&quot;] = &quot;Facilities&quot;;
writeOutput(&quot;After the second change, John is in the #departments.John# Department&quot;);
</cfscript>

構造体とキーに関する情報の取得

構造体やキーに関する情報を取得するには、ColdFusion 関数を使用します。

構造体に関する情報の取得

値が構造体であるかどうかを調べるには、次のように IsStruct 関数を使用します。

IsStruct(variable)
IsStruct(variable)
IsStruct(variable)

この関数は、変数 variable が ColdFusion 構造体である場合に True を返します。 variable が java.util.Map インターフェイスを実装する Java オブジェクトである場合も、True を返します。

構造体のインデックスは数値ではないので、構造体に存在する名前と値のペアの数を調べるには、次の例のように、StructCount 関数を使用します。

StructCount(employee)
StructCount(employee)
StructCount(employee)

特定の構造体がデータを含んでいるかどうかを調べるには、次のように、StructIsEmpty 関数を使用します。

StructIsEmpty(structure_name)
StructIsEmpty(structure_name)
StructIsEmpty(structure_name)

構造体が空の場合は True を返し、データを含んでいる場合は False を返します。

特定のキーとその値の検索

構造体に特定のキーが存在するかどうかを調べるには、次のように、StructKeyExists 関数を使用します。

StructKeyExists(structure_name, &quot;key_name&quot;)
StructKeyExists(structure_name, &quot;key_name&quot;)
StructKeyExists(structure_name, &quot;key_name&quot;)

構造体名は引用符で囲みません。キー名は二重引用符(")で囲みます。

if ( StructKeyExists(myStruct, &quot;myKey&quot;) ) {
cfoutput( ) {
writeOutput(&quot;#mystruct.myKey#&quot;);
}
}
if ( StructKeyExists(myStruct, &quot;myKey&quot;) ) { cfoutput( ) { writeOutput(&quot;#mystruct.myKey#&quot;); } }
if ( StructKeyExists(myStruct, &quot;myKey&quot;) ) {
 cfoutput( ) {

  writeOutput(&quot;#mystruct.myKey#&quot;);
 }
}

StructKeyExists 関数で、キー名を変数で表すことによって、キーを動的にテストできます。 この場合は、変数を引用符で囲みません。 例えば次のコードでは、GetEmployees クエリのレコードをループして、クエリの LastName フィールドに一致するキーが myStruct 構造体に存在するかどうかをテストします。 一致するキーが検出された場合は、クエリの LastName とそれに対応する構造体のエントリが表示されます。

<cfloop query=&quot;GetEmployees&quot;>
<cfif StructKeyExists(myStruct, LastName)>
<cfoutput>#LastName#: #mystruct[LastName]#</cfoutput><br>
</cfif>
</cfloop>
<cfloop query=&quot;GetEmployees&quot;> <cfif StructKeyExists(myStruct, LastName)> <cfoutput>#LastName#: #mystruct[LastName]#</cfoutput><br> </cfif> </cfloop>
<cfloop query=&quot;GetEmployees&quot;> 
<cfif StructKeyExists(myStruct, LastName)> 
<cfoutput>#LastName#: #mystruct[LastName]#</cfoutput><br> 
</cfif> 
</cfloop>

キーの名前が事前にわかっている場合は、次の例のように、ColdFusion の IsDefined 関数を使用できます。

IsDefined(&quot;structure_name.key&quot;)>
IsDefined(&quot;structure_name.key&quot;)>
IsDefined(&quot;structure_name.key&quot;)>

キーが動的である場合や、キーに特殊文字が含まれている場合は、StructKeyExists 関数を使用します。

注意:

構造体エントリが存在するかどうかをテストするときは、IsDefined を使用するよりも、StructKeyExists を使用するほうが効率的です。ColdFusion のスコープは構造体として使用できるので、変数の存在を確認するときに StructKeyExists を使用すれば、効率を向上させることができます。

構造体のキーのリストの取得

CFML 構造体のキーのリストを取得するには、次のように StructKeyList 関数を使用します。

<cfscript>
temp=StructKeyList(structure_name, [delimiter]);
</cfscript>
<cfscript> temp=StructKeyList(structure_name, [delimiter]); </cfscript>
<cfscript>
temp=StructKeyList(structure_name, [delimiter]);
</cfscript>

StructKeyList の使用例

 

<cfscript>
myStruct=StructNew();
myStruct.key1=&quot;Bugatti&quot;;
myStruct.key2=&quot;Lamborghini&quot;;
myStruct.key3=&quot;Maserati&quot;;
myStruct.key4=&quot;Ferrari&quot;;
myStruct.key5=&quot;Aprilia&quot;;
myStruct.key5=&quot;Ducati&quot;;
WriteOutput(&quot;The input struct is:&quot;);
WriteDump(myStruct);
WriteOutput(&quot;struct has &quot; & StructCount(myStruct) & &quot; keys: &quot; & StructKeyList(myStruct) & &quot;<br/>&quot;);
</cfscript>
<cfscript> myStruct=StructNew(); myStruct.key1=&quot;Bugatti&quot;; myStruct.key2=&quot;Lamborghini&quot;; myStruct.key3=&quot;Maserati&quot;; myStruct.key4=&quot;Ferrari&quot;; myStruct.key5=&quot;Aprilia&quot;; myStruct.key5=&quot;Ducati&quot;; WriteOutput(&quot;The input struct is:&quot;); WriteDump(myStruct); WriteOutput(&quot;struct has &quot; & StructCount(myStruct) & &quot; keys: &quot; & StructKeyList(myStruct) & &quot;<br/>&quot;); </cfscript>
<cfscript>
       myStruct=StructNew();
       myStruct.key1=&quot;Bugatti&quot;;
       myStruct.key2=&quot;Lamborghini&quot;;
       myStruct.key3=&quot;Maserati&quot;;
       myStruct.key4=&quot;Ferrari&quot;;
       myStruct.key5=&quot;Aprilia&quot;;
       myStruct.key5=&quot;Ducati&quot;;
       WriteOutput(&quot;The input struct is:&quot;);
       WriteDump(myStruct);
       WriteOutput(&quot;struct has &quot; & StructCount(myStruct) & &quot; keys: &quot; & StructKeyList(myStruct) & &quot;<br/>&quot;);
</cfscript>

区切り文字には任意の文字を指定できます。デフォルトはカンマです。

構造体のキーの配列を取得する場合は、次のように StructKeyArray 関数を使用します。

<cfscript>
temp=StructKeyArray(structure_name);
</cfscript>
<cfscript> temp=StructKeyArray(structure_name); </cfscript>
<cfscript>
  temp=StructKeyArray(structure_name);
</cfscript>
注意:

StructKeyList 関数と StructKeyArray 関数では、キーが返される順序に特定の規則はありません。 結果をソートするには、ListSort または ArraySort 関数を使用します。

構造体のコピー

ColdFusion には、構造体をコピーしたり、構造体の参照を作成したりする方法がいくつか用意されています。 次の表に、それらの方法と用途を示します。

方法

用途

Duplicate 関数

構造体の完全なコピーを作成します。 構造体、クエリ、その他のオブジェクトなど、すべてのデータを元の構造体から新しい構造体にコピーします。 したがって、構造体のコピーを変更しても、他の構造体には影響を与えません。ここの関数は、構造体を新しいスコープに完全に移動する場合に便利です。 特に、Application などのロックする必要があるスコープに構造体が作成されている場合は、Request などのロックする必要がないスコープに複製してから、ロックが必要なスコープの構造体を削除できます。

StructCopy 関数

構造体のシャローコピーを作成します。 構造体を作成し、元の構造体の最上位にあるすべての単純変数と配列の値を新しい構造体にコピーします。 ただし、元の構造体に含まれている構造体、クエリ、その他のオブジェクト、またはこれらのオブジェクトの中のデータはコピーされません。 この場合は、元の構造体内のオブジェクトへの参照が新しい構造体に作成されます。 したがって、元の構造体でこれらのオブジェクトを変更すると、コピーされた構造体の対応するオブジェクトも変更されます。ほとんどの場合、この関数の代わりに Duplicate 関数を使用できます。

変数への代入

構造体への参照(エイリアス)を作成します。 ある変数名を使用してデータを変更した場合、別の名前でその構造体を参照している変数でもデータが変更されます。この方法は、ローカル変数を別のスコープに追加する場合や、元のスコープから変数を削除せずに変数のスコープを変更する場合に便利です。

構造体のコピー

 

<cfscript>
myStruct = StructNew();
myNewStruct = StructNew();
myStruct.key1 = &quot;The quick brown fox&quot;;
myStruct.key2 = &quot;jumped over the&quot;;
myStruct.key3 = &quot;lazy dog&quot;;
myNewStruct.k1 = &quot;Atlantic&quot;;
myNewStruct.k2 = &quot;Pacific&quot;;
myNewStruct.k3 = &quot;Indian&quot;;
myArray[1]=&quot;North Island&quot;;
myArray[2]=&quot;South Island&quot;;
myStruct.key4 = myNewStruct;
// myArray をキーとして myNewStruct に割り当てます
myNewStruct.k4=myArray;
// 構造体を出力します
WriteOutput(&quot;The original struct is:&quot;);
WriteDump(myStruct);
// 構造体 myStruct を copiedStruct という構造体にコピーします
copiedStruct=StructCopy(myStruct);
// copiedStruct を出力します
WriteOutput(&quot;The copied struct is:&quot;);
WriteDump(copiedStruct);
</cfscript>
<cfscript> myStruct = StructNew(); myNewStruct = StructNew(); myStruct.key1 = &quot;The quick brown fox&quot;; myStruct.key2 = &quot;jumped over the&quot;; myStruct.key3 = &quot;lazy dog&quot;; myNewStruct.k1 = &quot;Atlantic&quot;; myNewStruct.k2 = &quot;Pacific&quot;; myNewStruct.k3 = &quot;Indian&quot;; myArray[1]=&quot;North Island&quot;; myArray[2]=&quot;South Island&quot;; myStruct.key4 = myNewStruct; // myArray をキーとして myNewStruct に割り当てます myNewStruct.k4=myArray; // 構造体を出力します WriteOutput(&quot;The original struct is:&quot;); WriteDump(myStruct); // 構造体 myStruct を copiedStruct という構造体にコピーします copiedStruct=StructCopy(myStruct); // copiedStruct を出力します WriteOutput(&quot;The copied struct is:&quot;); WriteDump(copiedStruct); </cfscript>
<cfscript>
    myStruct = StructNew();
    myNewStruct = StructNew();
    myStruct.key1 = &quot;The quick brown fox&quot;;
    myStruct.key2 = &quot;jumped over the&quot;;
    myStruct.key3 = &quot;lazy dog&quot;;
    myNewStruct.k1 = &quot;Atlantic&quot;;
    myNewStruct.k2 = &quot;Pacific&quot;;
    myNewStruct.k3 = &quot;Indian&quot;;
    myArray[1]=&quot;North Island&quot;;
    myArray[2]=&quot;South Island&quot;;
    myStruct.key4 = myNewStruct;
    // myArray をキーとして myNewStruct に割り当てます
    myNewStruct.k4=myArray;
    // 構造体を出力します
    WriteOutput(&quot;The original struct is:&quot;);
    WriteDump(myStruct);
    // 構造体 myStruct を copiedStruct という構造体にコピーします
    copiedStruct=StructCopy(myStruct);
    // copiedStruct を出力します
    WriteOutput(&quot;The copied struct is:&quot;);
    WriteDump(copiedStruct);
</cfscript>

構造体の複製

 

<cfscript>
myStruct = StructNew();
myNewStruct = StructNew();
myStruct.key1 = &quot;The quick brown fox&quot;;
myStruct.key2 = &quot;jumped over the&quot;;
myStruct.key3 = &quot;lazy dog&quot;;
myNewStruct.k1 = &quot;Atlantic&quot;;
myNewStruct.k2 = &quot;Pacific&quot;;
myNewStruct.k3 = &quot;Indian&quot;;
myArray[1]=&quot;North Island&quot;;
myArray[2]=&quot;South Island&quot;;
myStruct.key4 = myNewStruct;
// myArray をキーとして myNewStruct に割り当てます
myNewStruct.k4=myArray;
/ /構造体を出力します
WriteOutput(&quot;The original struct is:&quot;);
WriteDump(myStruct);
// 構造体 myStruct を copiedStruct という構造体にコピーします
copiedStruct=StructCopy(myStruct);
// copiedStruct プロパティを変更します
copiedStruct.n1=&quot;Alien&quot;;
copiedStruct.n2=&quot;Predator&quot;;
copiedStruct.n3=&quot;Terminator&quot;;
// 新しい構造体 anotherStruct を作成します
anotherStruct=StructNew();
anotherStruct.t1=&quot;Amazon&quot;;
anotherStruct.t2=&quot;Nile&quot;;
anotherStruct.t3=&quot;Danube&quot;;
// anotherStruct を新しいキーとして copiedStruct に割り当てます
copiedStruct.n4=anotherStruct;
// copiedStruct を出力します
WriteOutput(&quot;The changed struct,copiedStruct, is:&quot;);
WriteDump(copiedStruct);
// copiedStruct の複製バージョンを作成します
cloneStruct=Duplicate(copiedStruct);
// cloneStruct を出力します
WriteOutput(&quot;The new duplicate struct is:&quot;);
WriteDump(cloneStruct);
</cfscript>
<cfscript> myStruct = StructNew(); myNewStruct = StructNew(); myStruct.key1 = &quot;The quick brown fox&quot;; myStruct.key2 = &quot;jumped over the&quot;; myStruct.key3 = &quot;lazy dog&quot;; myNewStruct.k1 = &quot;Atlantic&quot;; myNewStruct.k2 = &quot;Pacific&quot;; myNewStruct.k3 = &quot;Indian&quot;; myArray[1]=&quot;North Island&quot;; myArray[2]=&quot;South Island&quot;; myStruct.key4 = myNewStruct; // myArray をキーとして myNewStruct に割り当てます myNewStruct.k4=myArray; / /構造体を出力します WriteOutput(&quot;The original struct is:&quot;); WriteDump(myStruct); // 構造体 myStruct を copiedStruct という構造体にコピーします copiedStruct=StructCopy(myStruct); // copiedStruct プロパティを変更します copiedStruct.n1=&quot;Alien&quot;; copiedStruct.n2=&quot;Predator&quot;; copiedStruct.n3=&quot;Terminator&quot;; // 新しい構造体 anotherStruct を作成します anotherStruct=StructNew(); anotherStruct.t1=&quot;Amazon&quot;; anotherStruct.t2=&quot;Nile&quot;; anotherStruct.t3=&quot;Danube&quot;; // anotherStruct を新しいキーとして copiedStruct に割り当てます copiedStruct.n4=anotherStruct; // copiedStruct を出力します WriteOutput(&quot;The changed struct,copiedStruct, is:&quot;); WriteDump(copiedStruct); // copiedStruct の複製バージョンを作成します cloneStruct=Duplicate(copiedStruct); // cloneStruct を出力します WriteOutput(&quot;The new duplicate struct is:&quot;); WriteDump(cloneStruct); </cfscript>
<cfscript>
    myStruct = StructNew();
    myNewStruct = StructNew();
    myStruct.key1 = &quot;The quick brown fox&quot;;
    myStruct.key2 = &quot;jumped over the&quot;;
    myStruct.key3 = &quot;lazy dog&quot;;
    myNewStruct.k1 = &quot;Atlantic&quot;;
    myNewStruct.k2 = &quot;Pacific&quot;;
    myNewStruct.k3 = &quot;Indian&quot;;
    myArray[1]=&quot;North Island&quot;;
    myArray[2]=&quot;South Island&quot;;
    myStruct.key4 = myNewStruct;
    // myArray をキーとして myNewStruct に割り当てます
    myNewStruct.k4=myArray;
    / /構造体を出力します
    WriteOutput(&quot;The original struct is:&quot;);
    WriteDump(myStruct);
    // 構造体 myStruct を copiedStruct という構造体にコピーします
    copiedStruct=StructCopy(myStruct);
    // copiedStruct プロパティを変更します
    copiedStruct.n1=&quot;Alien&quot;;
    copiedStruct.n2=&quot;Predator&quot;;
    copiedStruct.n3=&quot;Terminator&quot;;
    // 新しい構造体 anotherStruct を作成します
    anotherStruct=StructNew();
    anotherStruct.t1=&quot;Amazon&quot;;
    anotherStruct.t2=&quot;Nile&quot;;
    anotherStruct.t3=&quot;Danube&quot;;
    // anotherStruct を新しいキーとして copiedStruct に割り当てます
    copiedStruct.n4=anotherStruct;
    // copiedStruct を出力します
    WriteOutput(&quot;The changed struct,copiedStruct, is:&quot;);
    WriteDump(copiedStruct);
    // copiedStruct の複製バージョンを作成します
    cloneStruct=Duplicate(copiedStruct);
    // cloneStruct を出力します
    WriteOutput(&quot;The new duplicate struct is:&quot;);
    WriteDump(cloneStruct);
</cfscript>

構造体要素および構造体の削除

構造体からキーとその値を削除するには、次のように、StructDelete 関数を使用します。

StructDelete(structure_name, key [, indicateNotExisting ])
StructDelete(structure_name, key [, indicateNotExisting ])
StructDelete(structure_name, key [, indicateNotExisting ])

StructDelete の使用例

 

<cfscript>
myStruct=StructNew();
myStruct.item1=&quot;JPG&quot;;
myStruct.item2=&quot;BMP&quot;;
myStruct.item3=&quot;PNG&quot;;
// myStruct を出力します
WriteOutput(&quot;The input struct is:&quot;);
WriteDump(myStruct);
// myStruct からキー「item1」を削除します
StructDelete(myStruct,&quot;item1&quot;);
// 更新された myStruct を出力します
WriteOutput(&quot;The modified struct is:&quot;);
WriteDump(myStruct);
</cfscript>
<cfscript> myStruct=StructNew(); myStruct.item1=&quot;JPG&quot;; myStruct.item2=&quot;BMP&quot;; myStruct.item3=&quot;PNG&quot;; // myStruct を出力します WriteOutput(&quot;The input struct is:&quot;); WriteDump(myStruct); // myStruct からキー「item1」を削除します StructDelete(myStruct,&quot;item1&quot;); // 更新された myStruct を出力します WriteOutput(&quot;The modified struct is:&quot;); WriteDump(myStruct); </cfscript>
<cfscript>
       myStruct=StructNew();
       myStruct.item1=&quot;JPG&quot;;
       myStruct.item2=&quot;BMP&quot;;
       myStruct.item3=&quot;PNG&quot;;
       // myStruct を出力します
       WriteOutput(&quot;The input struct is:&quot;);
       WriteDump(myStruct);
       // myStruct からキー「item1」を削除します
       StructDelete(myStruct,&quot;item1&quot;);
       // 更新された myStruct を出力します
       WriteOutput(&quot;The modified struct is:&quot;);
       WriteDump(myStruct);
</cfscript>

indicateNotExisting 引数は、指定されたキーが存在しない場合の処理を指定します。 この関数は、デフォルトでは常に True を返します。 ただし、indicateNotExisting 引数に True が指定されている場合は、キーが存在するときは True を返し、キーが存在しないときは False を返します。

StructClear 関数を使用すると、構造体のインスタンスを保持したまま構造体内のすべてのデータを削除できます。

StructClear(structure_name)
StructClear(structure_name)
StructClear(structure_name)

StructCopy 関数を使用してコピーした構造体を StructClear 関数を使用して削除すると、指定された構造体は削除されますが、コピーには影響を与えません。 

次の例のように、複数の参照を持つ構造体を StructClear で削除すると、その構造体の内容が削除され、すべての参照が空の構造体を指します。

StructClear の使用例

 

<cfscript>
myStruct=StructNew();
myStruct.item1=&quot;JPG&quot;;
myStruct.item2=&quot;BMP&quot;;
myStruct.item3=&quot;PNG&quot;;
// myStructを出力します
WriteOutput(&quot;The input struct is:&quot;);
WriteDump(myStruct);
// 別の構造体を作成します
myAnotherStruct=StructNew();
// myStruct を新しい構造体にコピーします
myAnotherStruct=StructCopy(myStruct);
// myAnotherStruct を出力します
WriteOutput(&quot;The copied struct is:&quot;);
WriteDump(myAnotherStruct);
// 構造体 myAnotherStruct を削除します
StructClear(myAnotherStruct);
// 削除後に myAnotherStruct を出力します
WriteOutput(&quot;The deleted struct is:&quot;);
WriteDump(myAnotherStruct);
</cfscript>
<cfscript> myStruct=StructNew(); myStruct.item1=&quot;JPG&quot;; myStruct.item2=&quot;BMP&quot;; myStruct.item3=&quot;PNG&quot;; // myStructを出力します WriteOutput(&quot;The input struct is:&quot;); WriteDump(myStruct); // 別の構造体を作成します myAnotherStruct=StructNew(); // myStruct を新しい構造体にコピーします myAnotherStruct=StructCopy(myStruct); // myAnotherStruct を出力します WriteOutput(&quot;The copied struct is:&quot;); WriteDump(myAnotherStruct); // 構造体 myAnotherStruct を削除します StructClear(myAnotherStruct); // 削除後に myAnotherStruct を出力します WriteOutput(&quot;The deleted struct is:&quot;); WriteDump(myAnotherStruct); </cfscript>
<cfscript>
       myStruct=StructNew();
       myStruct.item1=&quot;JPG&quot;;
       myStruct.item2=&quot;BMP&quot;;
       myStruct.item3=&quot;PNG&quot;;
       // myStructを出力します
       WriteOutput(&quot;The input struct is:&quot;);
       WriteDump(myStruct);
       // 別の構造体を作成します
       myAnotherStruct=StructNew();
       // myStruct を新しい構造体にコピーします
       myAnotherStruct=StructCopy(myStruct);
       // myAnotherStruct を出力します
       WriteOutput(&quot;The copied struct is:&quot;);
       WriteDump(myAnotherStruct);
       // 構造体 myAnotherStruct を削除します
       StructClear(myAnotherStruct);
       // 削除後に myAnotherStruct を出力します
       WriteOutput(&quot;The deleted struct is:&quot;);
       WriteDump(myAnotherStruct);
</cfscript>

構造体の反復処理

次の例のように、構造体を反復処理することでその内容を出力できます。

 

<cfscript>
myStruct=StructNew();
myStruct.name1=&quot;Jeb&quot;;
myStruct.name2=&quot;Bernie&quot;;
myStruct.name3=&quot;Hillary&quot;;
myStruct.name4=&quot;Donald&quot;;
for ( i in StructSort(myStruct) ) {
cfoutput( ) {
writeOutput(&quot;#myStruct[i]#&quot;);
}
}
</cfscript>
<cfscript> myStruct=StructNew(); myStruct.name1=&quot;Jeb&quot;; myStruct.name2=&quot;Bernie&quot;; myStruct.name3=&quot;Hillary&quot;; myStruct.name4=&quot;Donald&quot;; for ( i in StructSort(myStruct) ) { cfoutput( ) { writeOutput(&quot;#myStruct[i]#&quot;); } } </cfscript>
<cfscript>
       myStruct=StructNew();
       myStruct.name1=&quot;Jeb&quot;;
       myStruct.name2=&quot;Bernie&quot;;
       myStruct.name3=&quot;Hillary&quot;;
       myStruct.name4=&quot;Donald&quot;;
for ( i in StructSort(myStruct) ) {
 cfoutput(  ) {

  writeOutput(&quot;#myStruct[i]#&quot;);
 }
}
    
</cfscript>

数値ソートの実行

数値ソートを実行するには、次に示すように、sortType 属性を "numeric" に設定します。

 

<cfscript>
myStruct=StructNew();
myStruct.number1=75;
myStruct.number2=1112;
myStruct.number3=-674;
myStruct.number4=12;
myStruct.number5=3456;
myStruct.number6=-342;
myStruct.number7=3.14;
for ( i in StructSort(myStruct,&quot;numeric&quot;) ) {
cfoutput( ) {
writeOutput(&quot;#myStruct[i]#&quot;);
}
}
</cfscript>
<cfscript> myStruct=StructNew(); myStruct.number1=75; myStruct.number2=1112; myStruct.number3=-674; myStruct.number4=12; myStruct.number5=3456; myStruct.number6=-342; myStruct.number7=3.14; for ( i in StructSort(myStruct,&quot;numeric&quot;) ) { cfoutput( ) { writeOutput(&quot;#myStruct[i]#&quot;); } } </cfscript>
<cfscript>
myStruct=StructNew();
       myStruct.number1=75;
       myStruct.number2=1112;
       myStruct.number3=-674;
       myStruct.number4=12;
       myStruct.number5=3456;
       myStruct.number6=-342;
       myStruct.number7=3.14;
for ( i in StructSort(myStruct,&quot;numeric&quot;) ) {
 cfoutput( ) {

  writeOutput(&quot;#myStruct[i]#&quot;);
 }
}
</cfscript>

コミュニティから投稿されたヘルプ情報

その他の有効なステートメント

 

<cfscript>
i = &quot;coInfo&quot;;
myStruct = {structKey1 = {innerStructKey1 = &quot;innerStructValue1&quot;}};
myStruct={structKey1.innerStructKey1 = &quot;innerStructValue1&quot;};
&quot;#i#&quot;={name = &quot;Adobe Systems Incorporated&quot;};
//コロンを使用することもできます
writeOutput(&quot;You can also use a colon:&quot;);
myStruct={structKey1.innerStructKey1 : &quot;innerStructValue1&quot;};
</cfscript>
<cfscript> i = &quot;coInfo&quot;; myStruct = {structKey1 = {innerStructKey1 = &quot;innerStructValue1&quot;}}; myStruct={structKey1.innerStructKey1 = &quot;innerStructValue1&quot;}; &quot;#i#&quot;={name = &quot;Adobe Systems Incorporated&quot;}; //コロンを使用することもできます writeOutput(&quot;You can also use a colon:&quot;); myStruct={structKey1.innerStructKey1 : &quot;innerStructValue1&quot;}; </cfscript>
<cfscript>
i = &quot;coInfo&quot;;
myStruct = {structKey1 = {innerStructKey1 = &quot;innerStructValue1&quot;}};
myStruct={structKey1.innerStructKey1 = &quot;innerStructValue1&quot;};
&quot;#i#&quot;={name = &quot;Adobe Systems Incorporated&quot;};

//コロンを使用することもできます

writeOutput(&quot;You can also use a colon:&quot;);
myStruct={structKey1.innerStructKey1 : &quot;innerStructValue1&quot;};

</cfscript>

大文字と小文字を区別する構造体

構造体は、CFML の欠くことのできない要素です。 構造体を使用すると、複雑なオブジェクトを定義して、そのオブジェクトを様々な操作に使用することができます。

ColdFusion の構造体には次のタイプがあります。

  • 通常の構造体
  • 順序付き構造体

ColdFusion(2021 リリース)では、大文字と小文字の区別に関する問題を回避するために、構造体のキーを維持することができます。

以前のバージョンでは、ColdFusion Administrator の「シリアル化用の構造体キーで大文字小文字を保持」オプションを有効にする必要がありました。

ColdFusion(2021 リリース)でコーディングする際には、大文字と小文字を区別する構造体を使用できます。これにより、構造体キーの大文字と小文字の区別が自動的に維持されます。

詳しくは、構造体の作成を参照してください。

大文字と小文字を区別する構造体

シンタックス

mystruct = StructNew("casesensitive")

<cfscript>
animals=StructNew(&quot;casesensitive&quot;)
animals.Aardwolf=&quot;Proteles cristata&quot;
animals.aardvark=&quot;Orycteropus afer&quot;
animals.Alligator=&quot;Mississippiensis&quot;
animals.albatross=&quot;Diomedeidae&quot;
writeDump(animals)
</cfscript>
<cfscript> animals=StructNew(&quot;casesensitive&quot;) animals.Aardwolf=&quot;Proteles cristata&quot; animals.aardvark=&quot;Orycteropus afer&quot; animals.Alligator=&quot;Mississippiensis&quot; animals.albatross=&quot;Diomedeidae&quot; writeDump(animals) </cfscript>
<cfscript> 
    animals=StructNew(&quot;casesensitive&quot;) 
    animals.Aardwolf=&quot;Proteles cristata&quot; 
    animals.aardvark=&quot;Orycteropus afer&quot; 
    animals.Alligator=&quot;Mississippiensis&quot; 
    animals.albatross=&quot;Diomedeidae&quot; 
    writeDump(animals) 
</cfscript>

暗黙の表記法

シンタックス

mystruct=${
&quot;key1&quot;:&quot;val1&quot;,
&quot;key&quot;:&quot;val2&quot;
}
mystruct=${ &quot;key1&quot;:&quot;val1&quot;, &quot;key&quot;:&quot;val2&quot; }
mystruct=${ 
      &quot;key1&quot;:&quot;val1&quot;, 
      &quot;key&quot;:&quot;val2&quot; 
}

<cfscript>
animals=${
Aardwolf:&quot;Proteles cristata&quot;,
aardvark:&quot;Orycteropus afer&quot;,
alligator:&quot;Mississippiensis&quot;,
Albatross:&quot;Diomedeidae&quot;
}
writeDump(animals)
</cfscript>
<cfscript> animals=${ Aardwolf:&quot;Proteles cristata&quot;, aardvark:&quot;Orycteropus afer&quot;, alligator:&quot;Mississippiensis&quot;, Albatross:&quot;Diomedeidae&quot; } writeDump(animals) </cfscript>
<cfscript> 
    animals=${ 
        Aardwolf:&quot;Proteles cristata&quot;, 
        aardvark:&quot;Orycteropus afer&quot;, 
        alligator:&quot;Mississippiensis&quot;, 
        Albatross:&quot;Diomedeidae&quot; 
    } 
    writeDump(animals) 
</cfscript>

出力

implicit

大文字と小文字を区別する順序付き構造体

シンタックス

mystruct = StructNew("ordered-casesensitive")

<cfscript>
animals=StructNew(&quot;ordered-casesensitive&quot;)
animals.Aardwolf=&quot;Proteles cristata&quot;
animals.aardvark=&quot;Orycteropus afer&quot;
animals.alligator=&quot;Mississippiensis&quot;
animals.Albatross=&quot;Diomedeidae&quot;
writeDump(animals)
</cfscript>
<cfscript> animals=StructNew(&quot;ordered-casesensitive&quot;) animals.Aardwolf=&quot;Proteles cristata&quot; animals.aardvark=&quot;Orycteropus afer&quot; animals.alligator=&quot;Mississippiensis&quot; animals.Albatross=&quot;Diomedeidae&quot; writeDump(animals) </cfscript>
<cfscript> 
    animals=StructNew(&quot;ordered-casesensitive&quot;) 
    animals.Aardwolf=&quot;Proteles cristata&quot; 
    animals.aardvark=&quot;Orycteropus afer&quot; 
    animals.alligator=&quot;Mississippiensis&quot; 
    animals.Albatross=&quot;Diomedeidae&quot; 
    writeDump(animals) 
</cfscript>

暗黙の表記法

シンタックス

mystruct=$[
&quot;key1&quot;:&quot;val1&quot;,
&quot;key2&quot;:&quot;val2&quot;
]
mystruct=$[ &quot;key1&quot;:&quot;val1&quot;, &quot;key2&quot;:&quot;val2&quot; ]
mystruct=$[ 
      &quot;key1&quot;:&quot;val1&quot;, 
      &quot;key2&quot;:&quot;val2&quot; 
]


<cfscript>
animals=$[
aardwolf:&quot;Proteles cristata&quot;,
aardvark:&quot;Orycteropus afer&quot;,
alligator:&quot;Mississippiensis&quot;,
albatross:&quot;Diomedeidae&quot;
]
writeDump(animals)
writeDump(animals.getMetadata())
</cfscript>
<cfscript> animals=$[ aardwolf:&quot;Proteles cristata&quot;, aardvark:&quot;Orycteropus afer&quot;, alligator:&quot;Mississippiensis&quot;, albatross:&quot;Diomedeidae&quot; ] writeDump(animals) writeDump(animals.getMetadata()) </cfscript>
<cfscript> 
    animals=$[ 
        aardwolf:&quot;Proteles cristata&quot;, 
        aardvark:&quot;Orycteropus afer&quot;, 
        alligator:&quot;Mississippiensis&quot;, 
        albatross:&quot;Diomedeidae&quot; 
    ] 
    writeDump(animals) 
    writeDump(animals.getMetadata()) 
</cfscript>

出力

implicitocs

2 つの構造体の結合

暗黙の表記法を使用して 2 つの構造体オブジェクトを容易に結合できます。また、結合した構造体でキーを上書きできます。

<cfscript>
obj1 =${ key1: 'val1', x: 25 };
obj2 =${ key2: 'val2', y: 50 };
mergedObj = $[obj1, obj2, &quot;key3&quot;:&quot;val3&quot;,z:75]
writeDump(mergedObj);
</cfscript>
<cfscript> obj1 =${ key1: 'val1', x: 25 }; obj2 =${ key2: 'val2', y: 50 }; mergedObj = $[obj1, obj2, &quot;key3&quot;:&quot;val3&quot;,z:75] writeDump(mergedObj); </cfscript>
<cfscript> 
         
    obj1 =${ key1: 'val1', x: 25 }; 
    obj2 =${ key2: 'val2', y: 50 }; 
      
    mergedObj = $[obj1, obj2, &quot;key3&quot;:&quot;val3&quot;,z:75] 
    writeDump(mergedObj); 
 
</cfscript>

出力

merge

キーの上書き

<cfscript>
obj1 ={ foo: 'bar', x: 42 };
obj2 ={ foo: 'baz', y: 13 };
mergedObj = {...obj1, ...obj2, &quot;key1&quot;:&quot;23&quot;};
writeDump(mergedObj);
</cfscript>
<cfscript> obj1 ={ foo: 'bar', x: 42 }; obj2 ={ foo: 'baz', y: 13 }; mergedObj = {...obj1, ...obj2, &quot;key1&quot;:&quot;23&quot;}; writeDump(mergedObj); </cfscript>
<cfscript> 
    obj1 ={ foo: 'bar', x: 42 }; 
    obj2 ={ foo: 'baz', y: 13 }; 
      
    mergedObj = {...obj1, ...obj2, &quot;key1&quot;:&quot;23&quot;}; 
    writeDump(mergedObj); 
</cfscript>

出力

出力

非構造化代入

ColdFusion では、非構造化代入シンタックスにより、配列や構造体の値を別個の変数に代入できます。

このシンタックスの外見は、配列リテラルやオブジェクトリテラルと似ています。

シンタックス

({key1, key2, ............, keyN} = {key1:value1, key2:value2, , keyN:valueN})
({key1, key2, ............, keyN} = {key1:value1, key2:value2, , keyN:valueN})
({key1, key2, ............, keyN} = {key1:value1, key2:value2,    , keyN:valueN})

上記のステートメントを使用すると、左辺にあるすべての変数に 1 行のシンタックスで右辺の値を代入できます。

上記の行は、ColdFusion で次のコードを記述する場合と同じです。

variable1=value1

または

key1=value1

例えば、従来の代入方法を使用すると、次のようなコードを記述できます。

<cfscript>
val1=10 val2=20
writeOutput(val1)
writeOutput(val2)
</cfscript>
<cfscript> val1=10 val2=20 writeOutput(val1) writeOutput(val2) </cfscript>
<cfscript> 
    val1=10 val2=20 
    writeOutput(val1)  
    writeOutput(val2) 
</cfscript>

非構造化代入を使用すると、上記のコードは次のように書き換えることができます。

<cfscript>
[val1,val2]=[10,20]
writeOutput(val1)
writeOutput(val2)
</cfscript>
<cfscript> [val1,val2]=[10,20] writeOutput(val1) writeOutput(val2) </cfscript>
<cfscript> 
    [val1,val2]=[10,20]  
    writeOutput(val1)  
    writeOutput(val2) 
</cfscript>

ColdFusion タグでは非構造化もサポートしています。 次に例を示します。

<cfset [foo, [[bar], baz]] = [61,[[42], 23]]>
<cfoutput>#bar#</cfoutput>
<cfoutput>#baz#</cfoutput>
<cfset [foo, [[bar], baz]] = [61,[[42], 23]]> <cfoutput>#bar#</cfoutput> <cfoutput>#baz#</cfoutput>
<cfset [foo, [[bar], baz]] = [61,[[42], 23]]> 
<cfoutput>#bar#</cfoutput> 
<cfoutput>#baz#</cfoutput>

非構造化の種類

構造体の非構造化

構造体の非構造化では、オブジェクトプロパティを値として使用して新しい変数を作成できます。

次に例を示します。

<cfscript>
person = {
name: 'John Doe',
age: 25,
location: {
country: 'Canada',
city: 'Vancouver',
coordinates: [49.2827, -123.1207]
}
};
({name, location: {country, city, coordinates: [lat, lng]},age=40} = person)
</cfscript>
<cfscript> person = { name: 'John Doe', age: 25, location: { country: 'Canada', city: 'Vancouver', coordinates: [49.2827, -123.1207] } }; ({name, location: {country, city, coordinates: [lat, lng]},age=40} = person) </cfscript>
<cfscript> 
    person = { 
        name: 'John Doe', 
        age: 25, 
        location: { 
            country: 'Canada', 
            city: 'Vancouver', 
            coordinates: [49.2827, -123.1207] 
        } 
    }; 
  
    ({name, location: {country, city, coordinates: [lat, lng]},age=40} = person) 
</cfscript> 

例 2

ネストされたオブジェクトのデストラクチャリング

<cfscript>
person = {
name: 'John Doe',
age: 25,
location: {
country: 'Canada',
city: 'Vancouver',
coordinates: [49.2827, -123.1207]
}
};
({name, location: {country, city, coordinates: [lat, lng]},age} = person)
writeoutput(name & &quot;<br>&quot;);
writeoutput(city & &quot;<br>&quot;)
writeoutput(lat & &quot;<br>&quot;);
writeoutput(lng & &quot;<br>&quot;);
writeoutput(country & &quot;<br>&quot;);
writeoutput(age)
</cfscript>
<cfscript> person = { name: 'John Doe', age: 25, location: { country: 'Canada', city: 'Vancouver', coordinates: [49.2827, -123.1207] } }; ({name, location: {country, city, coordinates: [lat, lng]},age} = person) writeoutput(name & &quot;<br>&quot;); writeoutput(city & &quot;<br>&quot;) writeoutput(lat & &quot;<br>&quot;); writeoutput(lng & &quot;<br>&quot;); writeoutput(country & &quot;<br>&quot;); writeoutput(age) </cfscript>
<cfscript> 
 person = { 
    name: 'John Doe', 
    age: 25, 
    location: { 
        country: 'Canada', 
        city: 'Vancouver', 
        coordinates: [49.2827, -123.1207] 
    } 
}; 
  
({name, location: {country, city, coordinates: [lat, lng]},age} = person) 
writeoutput(name & &quot;<br>&quot;); 
writeoutput(city & &quot;<br>&quot;) 
writeoutput(lat & &quot;<br>&quot;); 
writeoutput(lng & &quot;<br>&quot;); 
writeoutput(country & &quot;<br>&quot;); 
writeoutput(age) 
 
</cfscript>

プロパティの簡易表記

プロパティとして渡された変数と同じ名前のキーを持つオブジェクトを定義する場合は、簡易表記を使用して、単にキー名を渡すことができます。

このシンタックスを使用すると、複雑な構造体をすっきりと定義することができます。

例 1

<cfscript>
a = 'foo';
b = 2021;
c = {};
o = {a, b, c}
writeOutput((o.a === 'foo'));
writeOutput((o.b === 2021));
writeDump((o.c));
</cfscript>
<cfscript> a = 'foo'; b = 2021; c = {}; o = {a, b, c} writeOutput((o.a === 'foo')); writeOutput((o.b === 2021)); writeDump((o.c)); </cfscript>
<cfscript> 
    a = 'foo'; 
    b = 2021;  
    c = {}; 
 
    o = {a, b, c} 
 
    writeOutput((o.a === 'foo')); 
    writeOutput((o.b === 2021)); 
    writeDump((o.c)); 
</cfscript> 

出力

YESYES

<cfscript>
CF9 = 'Centaur'
CF10 = 'Zeus'
CF11 = 'Splendor'
CF2016 = 'Raijin'
CF2018 = 'Aether'
CF2021 = 'Project Stratus'
CFReleaseCodeNames = ${
CF9,
CF10,
CF11,
CF2016,
CF2018,
CF2021
}
writeDump(CFReleaseCodeNames);
</cfscript>
<cfscript> CF9 = 'Centaur' CF10 = 'Zeus' CF11 = 'Splendor' CF2016 = 'Raijin' CF2018 = 'Aether' CF2021 = 'Project Stratus' CFReleaseCodeNames = ${ CF9, CF10, CF11, CF2016, CF2018, CF2021 } writeDump(CFReleaseCodeNames); </cfscript>
<cfscript> 
        CF9 = 'Centaur' 
        CF10 = 'Zeus' 
        CF11 = 'Splendor' 
        CF2016 = 'Raijin' 
        CF2018 = 'Aether' 
        CF2021 = 'Project Stratus' 
 
    CFReleaseCodeNames = ${ 
        CF9, 
        CF10, 
        CF11, 
        CF2016, 
        CF2018, 
        CF2021 
    } 
    writeDump(CFReleaseCodeNames); 
</cfscript>    

出力

shorthand

関数パラメーターのデストラクチャリング

ColdFusion の関数パラメーターでデストラクチャリングを行うと、関数に引数として渡された配列または構造体から値を直接抽出できるので、コードがより簡潔で読みやすくなります。

<cfscript>
user = {
id: 45,
displayName: 'jdoe',
fullName: {
firstName: 'John',
lastName: 'Doe'
}
}
function userId({id}) {
return id;
}
writeoutput(userId(user)); // 45
</cfscript>
<cfscript> user = { id: 45, displayName: 'jdoe', fullName: { firstName: 'John', lastName: 'Doe' } } function userId({id}) { return id; } writeoutput(userId(user)); // 45 </cfscript>
<cfscript>
    user = {
        id: 45,
        displayName: 'jdoe',
            fullName: {
                firstName: 'John',
                lastName: 'Doe'
        }
    }

    function userId({id}) {
        return id;
    }

    writeoutput(userId(user)); // 45
</cfscript>

ラムダ関数の使用

<cfscript>
writeOutput(&quot;Using destructuring in function parameter for lambda functions<br>&quot;);
myfunc=({id}) =>{return id;}
user= {
id: 42,
displayName: 'jdoe',
fullName: {
firstName: 'John',
lastName: 'Doe'
}
}
result=myfunc(user)
writeoutput(&quot;User ID :&quot; & result) // 42
</cfscript>
<cfscript> writeOutput(&quot;Using destructuring in function parameter for lambda functions<br>&quot;); myfunc=({id}) =>{return id;} user= { id: 42, displayName: 'jdoe', fullName: { firstName: 'John', lastName: 'Doe' } } result=myfunc(user) writeoutput(&quot;User ID :&quot; & result) // 42 </cfscript>
<cfscript>
  writeOutput(&quot;Using destructuring in function parameter for lambda functions<br>&quot;);
  myfunc=({id}) =>{return id;}

  user= {
    id: 42,
    displayName: 'jdoe',
    fullName: {
      firstName: 'John',
      lastName: 'Doe'
    }
  }

  result=myfunc(user)
  writeoutput(&quot;User ID :&quot; & result) // 42

</cfscript>

クロージャ関数の使用

<cfscript>
writeOutput(&quot;Using destructuring in function parameter for closure functions<br>&quot;);
myfunc=function({id}){
return id;
};
user= {
id: 42,
displayName: 'jdoe',
fullName: {
firstName: 'John',
lastName: 'Doe12'
}
}
result=myfunc(user)
writeOutput(&quot;User ID :&quot; & result) // 42
</cfscript>
<cfscript> writeOutput(&quot;Using destructuring in function parameter for closure functions<br>&quot;); myfunc=function({id}){ return id; }; user= { id: 42, displayName: 'jdoe', fullName: { firstName: 'John', lastName: 'Doe12' } } result=myfunc(user) writeOutput(&quot;User ID :&quot; & result) // 42 </cfscript>
<cfscript>
  writeOutput(&quot;Using destructuring in function parameter for closure functions<br>&quot;);
  myfunc=function({id}){
  return id;

  };
  user= {
    id: 42,
    displayName: 'jdoe',
    fullName: {
      firstName: 'John',
      lastName: 'Doe12'
    }
  }

  result=myfunc(user)

  writeOutput(&quot;User ID :&quot; & result) // 42
</cfscript>

デフォルト値を使用した関数パラメーターのオブジェクトのデストラクチャリング

<cfscript>
writeOutput(&quot;Destructuring objects in function parameter with default values <br>&quot;)
function greet ({greeting, name, time = 'today'}) {
return &quot;#greeting# #name#! How are you #time#?&quot;
}
// &quot;こんにちは、George。少しお時間を頂戴できるでしょうか?&quot; を返します
message = greet({
name: 'George',
greeting: 'Hello'
});
writeoutput(message) // こんにちは、George。少しお時間を頂戴できるでしょうか?
</cfscript>
<cfscript> writeOutput(&quot;Destructuring objects in function parameter with default values <br>&quot;) function greet ({greeting, name, time = 'today'}) { return &quot;#greeting# #name#! How are you #time#?&quot; } // &quot;こんにちは、George。少しお時間を頂戴できるでしょうか?&quot; を返します message = greet({ name: 'George', greeting: 'Hello' }); writeoutput(message) // こんにちは、George。少しお時間を頂戴できるでしょうか? </cfscript>
<cfscript>
writeOutput(&quot;Destructuring objects in function parameter with default values <br>&quot;)
function greet ({greeting, name, time = 'today'}) {
return &quot;#greeting# #name#! How are you #time#?&quot;
}

// &quot;こんにちは、George。少しお時間を頂戴できるでしょうか?&quot; を返します
message = greet({
name: 'George',
greeting: 'Hello'
});
writeoutput(message) // こんにちは、George。少しお時間を頂戴できるでしょうか?
</cfscript>
<cfscript>
writeoutput(&quot;Destructuring objects in function parameter with default values <br>&quot;)
function myFunc({name = 'Default user', age='N/A'} ) {
writeoutput(&quot;Name:&quot; & name & &quot;<br>&quot;)
writeoutput(&quot;Age:&quot; & age & &quot;<br>&quot;)
}
mystruct=[age:21]
myFunc()
myFunc(mystruct)
myFunc([&quot;name&quot;:&quot;John&quot;])
</cfscript>
<cfscript> writeoutput(&quot;Destructuring objects in function parameter with default values <br>&quot;) function myFunc({name = 'Default user', age='N/A'} ) { writeoutput(&quot;Name:&quot; & name & &quot;<br>&quot;) writeoutput(&quot;Age:&quot; & age & &quot;<br>&quot;) } mystruct=[age:21] myFunc() myFunc(mystruct) myFunc([&quot;name&quot;:&quot;John&quot;]) </cfscript>
<cfscript>
    writeoutput(&quot;Destructuring objects in function parameter with default values <br>&quot;)
    function myFunc({name = 'Default user', age='N/A'} ) {


    writeoutput(&quot;Name:&quot; & name & &quot;<br>&quot;)
    writeoutput(&quot;Age:&quot; & age & &quot;<br>&quot;)
    }
    mystruct=[age:21]
    myFunc()
    myFunc(mystruct)
    myFunc([&quot;name&quot;:&quot;John&quot;])
</cfscript>

rest を使用した関数パラメーターのオブジェクトのデストラクチャリング

<cfscript>
user = {
'name': 'Alex',
'address': '15th Park Avenue',
'age': 43,
'company': 'xyz'
}
writeoutput(&quot;Destructuring objects in function parameter with rest<br>&quot;)
function logDetails({name, age,...rest}) {
writeoutput(name & &quot; is &quot; & age & &quot; year(s) old!&quot;)
writedump(rest)
}
logDetails(user)
</cfscript>
<cfscript> user = { 'name': 'Alex', 'address': '15th Park Avenue', 'age': 43, 'company': 'xyz' } writeoutput(&quot;Destructuring objects in function parameter with rest<br>&quot;) function logDetails({name, age,...rest}) { writeoutput(name & &quot; is &quot; & age & &quot; year(s) old!&quot;) writedump(rest) } logDetails(user) </cfscript>
<cfscript>
   user = { 
      'name': 'Alex',
      'address': '15th Park Avenue',
      'age': 43,
      'company': 'xyz'
   }
   writeoutput(&quot;Destructuring objects in function parameter with rest<br>&quot;)
   function logDetails({name, age,...rest}) {
      writeoutput(name & &quot; is &quot; & age & &quot; year(s) old!&quot;)
      writedump(rest)
   }
   logDetails(user)
</cfscript>

プロパティの名前を変更した関数パラメーターのデストラクチャリング

<cfscript>
writeoutput(&quot;Destructuring in function parameters with renaming the property<br>&quot;)
function myFunc({someLongPropertyName: prop}) {
writeoutput(&quot;Argument 1:&quot; & prop & &quot;<br>&quot;);
}
myFunc({someLongPropertyName: 'Hello'})
</cfscript>
<cfscript> writeoutput(&quot;Destructuring in function parameters with renaming the property<br>&quot;) function myFunc({someLongPropertyName: prop}) { writeoutput(&quot;Argument 1:&quot; & prop & &quot;<br>&quot;); } myFunc({someLongPropertyName: 'Hello'}) </cfscript>
<cfscript>
    writeoutput(&quot;Destructuring in function parameters with renaming the property<br>&quot;)
    function myFunc({someLongPropertyName: prop}) {
        writeoutput(&quot;Argument 1:&quot; & prop & &quot;<br>&quot;);
    }
    myFunc({someLongPropertyName: 'Hello'})
</cfscript>

プロパティおよびデフォルト値の名前を変更した関数パラメーターのデストラクチャリング

<cfscript>
writeoutput(&quot;Destructuring in function parameters with renaming the property and default value<br>&quot;)
function myFunc({someLongPropertyName: prop = 'Default string'} ) {
writeoutput(prop & &quot;<br>&quot;);
}
myfunc({someLongPropertyName: 'Hello'});
myfunc()
</cfscript>
<cfscript> writeoutput(&quot;Destructuring in function parameters with renaming the property and default value<br>&quot;) function myFunc({someLongPropertyName: prop = 'Default string'} ) { writeoutput(prop & &quot;<br>&quot;); } myfunc({someLongPropertyName: 'Hello'}); myfunc() </cfscript>
<cfscript>
  writeoutput(&quot;Destructuring in function parameters with renaming the property and default value<br>&quot;)
  function myFunc({someLongPropertyName: prop = 'Default string'} ) {
    writeoutput(prop & &quot;<br>&quot;);
  }

  myfunc({someLongPropertyName: 'Hello'});

  myfunc()
</cfscript>

複数のデストラクチャリングパラメーター

複数の構造体で使用します。関数パラメーターに個別にリストします。

<cfscript>
user = {
id: 45,
displayName: 'jdoe',
fullName: {
firstName: 'John',
lastName: 'Doe'
}
}
function whoisfirst({displayName, fullName: {firstName: name}}) {
return name;
}
function whois({displayName, fullName: {firstName: name,lastName: ln}}) {
writeOutput(ln);
return displayName;
}
function whoislast({displayName, fullName: {lastName: name}}) {
return name;
}
writeoutput(whois(user));
writeoutput(whoisfirst(user));
writeoutput(whoislast(user));
</cfscript>
<cfscript> user = { id: 45, displayName: 'jdoe', fullName: { firstName: 'John', lastName: 'Doe' } } function whoisfirst({displayName, fullName: {firstName: name}}) { return name; } function whois({displayName, fullName: {firstName: name,lastName: ln}}) { writeOutput(ln); return displayName; } function whoislast({displayName, fullName: {lastName: name}}) { return name; } writeoutput(whois(user)); writeoutput(whoisfirst(user)); writeoutput(whoislast(user)); </cfscript>
<cfscript>
    user = {
       id: 45,
        displayName: 'jdoe',
            fullName: {
           firstName: 'John',
         lastName: 'Doe'
        }
    }

    function whoisfirst({displayName, fullName: {firstName: name}}) {
        return name;
    }

    function whois({displayName, fullName: {firstName: name,lastName: ln}}) {
        writeOutput(ln);
        return displayName;
    }

    function whoislast({displayName, fullName: {lastName: name}}) {
        return name;
    }

    writeoutput(whois(user));
    writeoutput(whoisfirst(user));
    writeoutput(whoislast(user));
</cfscript>

混合パラメーター(単純パラメーターとデストラクチャリング)

これにより、複雑なデータ構造とともに、個々の値を簡潔かつ明確に処理できるようになります。

<cfscript>
function greet ({greeting, name, time = 'today'}) {
return greeting & '<br>' & name & '!<br>' & 'How are you ' & time '?';
}
message = greet({
name: 'George',
greeting: 'Hello'
});
writeOutput(message);
</cfscript>
<cfscript> function greet ({greeting, name, time = 'today'}) { return greeting & '<br>' & name & '!<br>' & 'How are you ' & time '?'; } message = greet({ name: 'George', greeting: 'Hello' }); writeOutput(message); </cfscript>
<cfscript>
    function greet ({greeting, name, time = 'today'}) {
        return greeting & '<br>' & name & '!<br>' & 'How are you ' & time '?';
    }

    message = greet({
        name: 'George',
        greeting: 'Hello'
    });
    
    writeOutput(message);
</cfscript>

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

新規ユーザーの場合

Acrobat 購入相談

Acrobat 購入相談

Acrobat 購入相談

Acrobat 購入相談