プロシージャの呼び出し方
add-numプロシージャを呼び出して、戻り値を表示してみましょう。リスト2は、引数に123と456を与えてadd-numプロシージャを呼び出し、その戻り値を変数ansに格納し、最後に変数ansの値を表示するコードです。
{add-num 123, 456} という構文に注目してください。プロシージャ名の後に引数をカンマで区切って指定するのはVB 6.0の構文と同様ですが、プロシージャの呼び出し全体を { } で囲んでいるのがCurlの構文のノリです。Curlという名前は、curly bracket(中カッコ)に由来していると言われます。Curlの言語構文には、プログラムの構成要素を { } で囲んでパーツ化するようなノリがあります。
|| 2つの引数の加算結果を返すプロシージャ {define-proc {add-num a:int, b:int}:int {return a + b} } || プロシージャを呼び出し、戻り値を表示する {let ans:int} {set ans = {add-num 123, 456}} 加算結果は、{value ans}です!
リスト2では、コメント(ソースコードの中に記述する説明文)もあります。Curlでは、縦棒2つ(||)に続けてコメントを記述します。それでは、「実行」メニューから「プロジェクトを実行」を選択して、プロジェクトを実行してみましょう。Webブラウザが起動して、その中に「加算結果は、579です!」と表示されるはずです(図1)。
複数の戻り値を返すこともできる
Curlのプロシージャには、VB 6.0にできない便利な機能があります。VB 6.0のプロシージャが返せる戻り値が1つだけなのに対し、Curlのプロシージャは複数の戻り値を返すことができるのです。サンプルを示しましょう。
リスト3の前半部は、2つの引数の加算結果と減算結果を返すadd-sub-numプロシージャです。returnの後にカンマで区切って2つの戻り値を指定します。戻り値のデータ型は、:(int, int) のようにカッコ(ここは小カッコですので注意してください)で囲んでカンマで区切って指定します。
|| 2つの引数の加算結果を返すプロシージャ {define-proc {add-sub-num a:int, b:int}:(int, int) {return a + b, a - b} } || プロシージャを呼び出し、戻り値を表示する {let ans1:int, ans2:int} {set (ans1, ans2) = {add-sub-num 123, 456}} 加算結果は、{value ans1}です! 減算結果は、{value ans2}です!
リスト3の後半部は、add-sub-numプロシージャの呼び出しです。2つの戻り値を代入する2つの変数を (ans1, ans2) のようにカッコ(ここも小カッコですので注意してください)で囲んでまとめていることに注目してください。add-sub-numプロシージャのreturnで前側にあった戻り値(加算結果)と後ろ側にあった戻り値(減算結果)は、それぞれ ( ) で囲まれた前側の変数ans1と後ろ側の変数ans2に代入されます。プログラムの実行結果を図2に示します。