non-nullマクロ
先ほどの例をnon-nullマクロを使って書き直してみます。
{curl 7.0 applet}
{curl-file-attributes character-encoding = "shift-jis"}
|| 文字数を返すプロシージャ
{define-proc public {length str:String}:int
{return str.size}
}
strの文字数:
{value
let str:#String = "abc"
{length {non-null str}} || non-nullマクロ
}
non-nullマクロは、#付の変数を#無しの変数として処理します。型名を書かなくて済むなど、コードの変更に対しても柔軟に対応できます。
if-non-nullマクロ
次は、null値を許す変数でnull値の判定をするif文です。
null値を許す変数やフィールドに対して、null値の場合とそうでない場合で処理を分けて行うことはよくあります。先ほどの文字数をカウントするプロシージャを使って、null値であれば0を、null値でなければ文字数を設定してみましょう。コードは以下のようになります。
{curl 7.0 applet}
{curl-file-attributes character-encoding = "shift-jis"}
|| 文字数を返すプロシージャ
{define-proc public {length str:String}:int
{return str.size}
}
strの文字数:
{value
let str:#String = "abc"
{if str != null then
{length {non-null str}}
else
0
}
}
このようなケースでは、if-non-nullマクロが便利です。if-non-nullマクロで書き直してみます。
{curl 7.0 applet}
{curl-file-attributes character-encoding = "shift-jis"}
|| 文字数を返すプロシージャ
{define-proc public {length str:String}:int
{return str.size}
}
strの文字数:
{value
let str1:#String = "abc"
{if-non-null str then
{length str} || non-nullが不要
else
0
}
}
if-non-null thenの次の{length str}のところに注目してください。null値を許す変数strを直接呼び出しているように見えます。if-non-nullマクロは、変数strをnull値を許さないString型として定義します。ifコードブロック内にstrというローカル変数(null値を許さないString型)を定義して、利用していると考えられます。
このようなコードが書けるのは、strがローカル変数の場合のみです。それ以外の場合は、別途if-non-nullのコードブロック内で利用する変数を指定します。変数を指定することで、フィールドやプロシージャの戻り値を使うことができます。
{curl 7.0 applet}
{curl-file-attributes character-encoding = "shift-jis"}
|| 文字数を返すプロシージャ
{define-proc public {length str:String}:int
{return str.size}
}
|| 文字をそのまま返すプロシージャ
{define-proc public {mirror str:#String}:#String
{return str}
}
strの文字数:
{value
let str:#String = "abc"
{if-non-null str1 = {mirror str} then
{length str1}
else
0
}
}
if-non-nullで導入された変数str1は、型の定義を行っていませんが、mirrorプロシージャの戻り値#Stringのnull値を許さない型であるStringが自動的に定義されます。このように、if-non-nullマクロはとても便利です。
- 修正履歴
-
- 2009/09/16 14:39 言葉の言い回しなど
この記事は参考になりましたか?
- 知っておきたいCurl文法の要点連載記事一覧
-
- ここがポイント!Curlプログラミング コレクション(配列・ハッシュテーブル・セット)の文...
- ここがポイント!Curlプログラミング データ型とTypeクラス
- ここがポイント!Curlプログラミング null値の取り扱い(キャスト・マクロの利用)
- この記事の著者
-
久保田 一郎(クボタ イチロウ)
財団法人日本自動車研究所電算システムGr所属。Macintosh HyperCardとOracleを使った業務システムの開発から始まって、4D、Java、AIRを経由してCurl に到達。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社
この記事は参考になりましたか?
この記事をシェア
