【ColdFusion2018】Nullの実装について

注意点
ColdFusion2018でNull変数がサポートされましたが、ColdFusion2016以前では使えないので注意してくだいさい。

遂にNullに対応したようなので簡単に動作確認をしてみました。

Nullの有効化方法

管理画面のサーバ設定で以下の「Enable Null Support」にチェックを入れて
設定を反映させればOKです。

有効化せずに以下のコードを書くとエラーになります。

<cfset test = null/>


ざっくりと動作確認

以下の4つのパターンでNullの動作について確認してみました。

  1. cftagで動作確認
  2. cfscriptで動作確認
  3. 配列で動作確認
  4. cfqueryで動作確認

①cftagで動作確認

コード

<cfoutput><hr/></cfoutput>
<cfoutput>①cftagで動作確認<br/></cfoutput>
<cfset test = null/>
<cfoutput>IsNull(test)=>#IsNull(test)#<br></cfoutput>

<cfif IsNull(test)>
    <cfoutput>nullみたいです。⊂⌒~⊃。Д。)⊃<br></cfoutput>
</cfif>

実行結果

ちゃんとnullをセットできていてIsNullメソッドも使えるみたいです。


②cfscriptで動作確認

コード

<cfscript>
    WriteOutput("②cfscriptで動作確認<br/>");
    // nullの動作確認
    hoge = null;
    if (hoge EQ null) {
        WriteOutput("NULL!!(cfscript)<br/>");
    }

    // IsNullメソッドの動作確認
    WriteOutput(IsNull(hoge));
</cfscript>

実行結果

cfscriptでも問題なく動作するみたいです。


③配列で動作確認

コード

値をセット済みの配列に対してnullをセットするコードです。

<cfscript>
    WriteOutput("③配列で動作確認<br>");
    // 配列宣言
    array = [1,2,3];
    WriteDump(array);
    // 配列へnullをセット
    array = null;
    WriteDump(array);
</cfscript>

実行結果

nullがセットできています。


④cfqueryで動作確認

コード

DBよりnullの値を取得して、nullチェックができるか確認するコードです。

<cfoutput>④cfqueryで動作確認<br/></cfoutput>
<!--- cfqueryでの動作確認 --->
<cfquery name = "TestSelectQuery" datasource = "TestServer">
    SELECT id
      FROM t_test;
</cfquery>
<cfdump var=#TestSelectQuery#/>

<cfset count = 1>
<cfloop query = "#TestSelectQuery#" >
    <cfoutput>#count#:</cfoutput>
    <cfif id EQ null>
        <cfoutput>id EQ null => YES</cfoutput>
    </cfif>

    <cfif IsNull(id)>
        <cfoutput>IsNull(id) => YES</cfoutput>
    </cfif>
    
    <cfset count += 1>
    <cfoutput><br/></cfoutput>
</cfloop>
<cfoutput><hr/></cfoutput>

<!--- cfqueryの取得結果にnullをセット --->
<cfset TestIsNullQuery = null/>
<cfdump var=#TestIsNullQuery#/>

実行結果

何故かクエリ結果ではIsNullが全て「YES」となる模様…(´ε`;)ウーン…
「EQ null」で評価すると期待通りの結果なのですが、
cfloopタグ内だと何か変換されているのだろうか…


何だかんだでよく使うようになるような気もするのでもう少し検証してみる。
気が向いたら。気が向いたら…

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください