5 Javaに存在しないCurlの仕組み
Curlの仕組みの中にはJavaには存在しないものも多くあります。前述の中では、4-5.メソッド定義で機能を紹介した「メソッドが複数の戻り値を返すことができる仕組み」などが挙げられます。その中で、特徴的な仕組みを挙げて説明をします。
5-1 数量・単位
Curlは型の他に単位も持っています。例えば、距離を表すDistance型には、meterや、inchという単位があります。異なる単位での数値計算や比較も可能です。
{let d:Distance} {set d = 1meter + 50inch}
また、Velocity型はDistanceをTimeで割った型だという独自の定義も可能です。科学計算を行う場合には、プログラミング言語にCurlを利用するのも良いのではないでしょうか。
Curlがサポートしている単位は「距離」「質量」「時間」の他に「角度」「光度」「相対距離」などもサポートされています。詳細は次のURLを参照してください。
5-2 プロシージャ
JavaScriptなどで利用されるクロージャ機能もあります。Curlでは「匿名プロシージャ」とも呼ばれます。プロシージャとして型定義を指定するために、「proc-type」と「proc」を利用します。
ここでは、単純な足し算のクロージャを例にとって説明します。
{value let p:{proc-type {int, int}:int} = {proc {arg1:int, arg2:int}:int {return arg1 + arg2} } let result:int = {p 10, 20} result }
まず、クロージャを作成するには、「procマクロ」を利用します。procマクロの引数に、実際に必要な引数(ここで足し算する2つの値arg1とarg2)を"{"と"}"で囲み、その後戻り値の型を「:」の後に記載します。
このクロージャ自体を変数に代入する場合(上記の例では、pという変数に代入)、上記のように「proc-typeマクロ」を利用しプロシージャ変数の型を定義します。このプロシージャを実行するには、上記のように{プロシージャ変数 引数1, 引数2}のように記述します。
また、この変数をさらに他のプロシージャやメソッドの引数として指定できますので、JavaScriptでよく利用されるコールバック関数的な使い方もできます。
まとめ
JavaとCurlの構文を比較すると、予想以上に似ている箇所があったのではないでしょうか。また、Curl独自の強力な機能もあります。Curlを始めた場合、Curl独自の括弧の記述に慣れ、今回紹介した構文を利用できるようになるまでが最初のステップではないかと思います。
今回で、本連載は最終回になります。本連載が、Curlを使用する開発者のリファレンスとして少しでもお役に立てれば幸いです。これまでご愛読いただいた読者の皆さまありがとうございました。また株式会社カールの方々には毎回レビューをして頂きました。この場を借りて改めてお礼申し上げます。ありがとうございました。