SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

知っておきたいCurl文法の要点(AD)

ここがポイント!Curlプログラミング
null値の取り扱い(キャスト・マクロの利用)

第2回

  • X ポスト
  • このエントリーをはてなブックマークに追加

non-nullマクロ

 先ほどの例をnon-nullマクロを使って書き直してみます。

コード3
{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値でなければ文字数を設定してみましょう。コードは以下のようになります。

コード4
{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マクロで書き直してみます。

コード5
{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のコードブロック内で利用する変数を指定します。変数を指定することで、フィールドやプロシージャの戻り値を使うことができます。

コード6
{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マクロはとても便利です。

次のページ
uninitialized-value-for-typeマクロ

修正履歴

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
知っておきたいCurl文法の要点連載記事一覧

もっと読む

この記事の著者

久保田 一郎(クボタ イチロウ)

財団法人日本自動車研究所電算システムGr所属。Macintosh HyperCardとOracleを使った業務システムの開発から始まって、4D、Java、AIRを経由してCurl に到達。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/4333 2009/09/29 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング