かんたんなサンプルプログラムで学ぶCurl言語のノリ
VB6.0ユーザーがCurlを習得する際に、最も大きなハードルと感じるのはCurl言語の構文でしょう。Curl言語の構文はVB6.0とかなり違って見えます。何が違うかと言えば、ノリが違うのです。
Curlのソースコードを見て尻込みしてしまうかもしれませんが、プラス発想で考えてみましょう。Curl言語のノリさえつかめれば、習得は困難ではないはずです。今回は、かんたんなサンプルプログラムをいくつか示して、Curl言語のノリをつかんでいただこうと思います。
前回の記事
まずはHello World!から
今回も、実際にCurl IDEを使ってプログラムを作成します。ただし、前回のようにウインドウにコンポーネントを貼り付けるビジュアルプログラミングではなく、ソースコードをガリガリ記述するプログラミングスタイルにします。このスタイルの方が、言語構文を覚えやすいからです。
最初に紹介するサンプルプログラムは、画面に「Hello World!」と表示するプログラムです。このようなプログラムは、多くのプログラミング言語の解説書で最初に紹介するサンプルとして定番です。
Curl IDEを起動したら、「ファイル」メニューから「新規プロジェクト」を選択し、表示されるウインドウで「アプレットプロジェクト」を選択します。「マニフェスト」名に「HelloWorld」と入力し、プロジェクトを保存する「ディレクトリ」には前回と同様に「C:¥CurlSamples」と入力します。最後に[OK]ボタンをクリックしてください(図1)。

Curl IDEの左上にツリー表示された「start.curl」をダブルクリックします。これによって、ソースコードを編集するエディタのウインドウが開きます。ウインドウの中には自動的に数行のコードが生成されています。これらはCurlのプログラムであることを示す宣言文です(図2)。
画面に「Hello World!」と表示するには、ソースコードの末尾にある } の次の行に、「Hello World!」と記述します。文字列表示のための命令は不要です。まるでHTMLを書いているようなノリでしょう(リスト1)。
{curl 6.0 applet}
{curl-file-attributes character-encoding = "shift-jis"}
{applet manifest = "manifest.mcurl",
{compiler-directives careful? = true}
}
Hello World! ←この1行を記述する
「ファイル」メニューから「すべて保存」を選択して、プロジェクトの編集内容を保存したら、さっそく実行してみましょう。「実行」メニューから「プロジェクトを実行」を選択してください。Webブラウザが起動して、その中に「Hello World!」と表示されるはずです。
Webブラウザのアドレス欄は「C:¥CurlSamples¥start.curl」となっています。start.curlを実行したことで、HTMLファイルが生成されたわけではありません。CurlのプログラムがWebブラウザの中で実行されたのです(図3)。

Curlでは、HTMLのようなノリで文字列のサイズや色を指定できます。Webブラウザを閉じてプログラムを終了したら、先ほどのソースコードをリスト2のように書き換えてください(これ以降は、ソースコードの先頭にある宣言部を示しません)。
{text
font-size = 50pt,
color = "red",
Hello World!
}
プロジェクトを実行すると、「Hello World!」という文字列が、50ポイントのサイズで赤色に表示されます(図4)。先ほどは、サイズと色を指定せずに文字列を表示しました。この場合は、ソースコードに文字列を記述するだけでOKです。サイズや色を指定する場合は、{text・・・}で囲んだ中に、それぞれの指定項目と設定値、および表示する文字列を記述します。このあたりのノリも、HTMLによく似ていると感じるでしょう。

HTMLに似ているとなれば、画像を表示したり、背景色を指定したり、表形式で情報を表したり、他のWebページにリンクする方法などを知りたくなるでしょう。HTMLの代わりにCurlを使うというノリです。どれも可能ですが、今回はプログラミング言語としてのCurlがテーマなので、別の機会に説明させていただきます。
変数の使い方
VB6.0で変数を使う場合は、はじめに変数名とデータ型を宣言します。これはCurlでも同様です。Curlでは、{let・・・}で変数を宣言し、{set・・・}で変数に値を代入します。
例えば、リスト3では、まず{let・・・}を使って、int型の変数val1、val2、val3を宣言しています。val1には初期値100、val2には初期値200を指定しています。val3には初期値を指定していません。
次に、{set・・・}を使って、val1とval2の加算結果をval3に代入しています。VB6.0でも、オブジェクトの代入は「Set オブジェクト名=値」という構文を使うでしょう。それと似ています。
最後に、val3の値を画面に表示しています。Curlでは、HTMLのノリでソースコードの中に文字列を記述すれば、それがそのまま表示されます。変数の値を表示する場合は、{value val3}のように{value・・・}の中に変数を記述します。このプログラムを実行すると「加算結果は、300です。」と表示されます。
{let val1:int = 100}
{let val2:int = 200}
{let val3:int}
{set val3 = val1 + val2}
加算結果は、{value val3}です。
このソースコードを見て「変数1個ごとに{let・・・}と書くのは面倒だ」と思われたでしょう。実は、リスト3では、わかりやすさを優先して、わざと冗長なコードを記述しています。1つの{let・・・}で複数の変数を宣言することもできます。3行のletの部分は、{let val1:int = 100, val2:int = 200, val3:int}と書き換えることができるのです。
データ型と演算子
先ほどのプログラムでは、intというデータ型と+という演算子を使いました。ここで、Curlの主なデータ型と演算子を紹介しましょう。Curlのデータ型とVB6.0のデータ型の対応を表1に、Curlの演算子とVB6.0の演算の対応を表2に示します。VB6.0に似たものもあれば、違うものもあることがわかります。
なお、ここで示したもの以外にも、CurlにはVB6.0にない特殊なデータ型と演算子もあります。
| Curlのデータ型 | VB6.0のデータ型 | 説明 |
|---|---|---|
| int8 | Byte | 8ビット整数型 |
| int16 | Integer | 16ビット整数型 |
| int32(int) | Long | 32ビット整数型 |
| int64 | (なし) | 64ビット整数型 |
| float | Single | 単精度浮動小数点数型 |
| double | Double | 倍精度浮動小数点数型 |
| char | (なし) | 文字型 |
| String | String | 文字列型 |
| bool | Boolean | 論理型 |
| any | Variant | 任意のデータ型 |
| Curlの演算子 | VB6.0の演算子 | 説明 |
|---|---|---|
| + | + | 加算 |
| - | - | 減算 |
| * | * | 乗算 |
| /(浮動小数点数) div(整数) |
/ | 除算 |
| mod | Mod | 剰余 |
| = = | = | 等しい |
| != | < > | 等しくない |
| < | < | より小さい |
| > | > | より大きい |
| <= | <= | 以下 |
| >= | >= | 以上 |
| and | And | 論理積 |
| or | Or | 論理和 |
| not | Not | 論理否定 |
| & | & | 文字列連結 |
分岐
VB6.0では、If・・・End IfおよびSelect Case・・・End Selectで分岐を表現します。Curlにも、それぞれに対応する{if・・・}と{switch・・・}があります。それぞれのサンプルプログラムをお見せしましょう。
リスト4は、{if・・・}を使ったサンプルプログラムです。変数aの値に応じて、処理を3つに分岐しています。aが0より大きい場合は「正の数です!」、0より小さい場合は「負の数です!」、それ以外の場合は「0です!」と表示します。aの値は123なので、このプロジェクトを実行すると「正の数です!」と表示されます。
{let a:int = 123}
{let s:String}
{if a > 0 then
{set s = "正の値です!"}
elseif a < 0 then
{set s = "負の値です!"}
else
{set s = "ゼロです!"}
}
{value s}
実は、リスト4を実行するとエラーになります。Webブラウザに表示されるエラーメッセージの内容は「's'は、nullの既定値の使用を許可されていません。初期値を入力するか、あるいはタイプの前に#を入力して、nullが使用可能になるようにします。」です。つまり{let s:String}という初期値を指定していない宣言がエラーなのです。エラーメッセージを読めば、対処方法はおわかりでしょう。Stringの前に#を付けて、{let s:#String}とすればよいのです。プログラムを修正してから実行してください。
既に何らかのプログラミング言語を使いこなせる人なら経験済みのことだと思いますが、プログラミング言語は解説書を読むだけで習得できるものではありません。実際にサンプルプログラムを打ち込み、間違いに対して表示されるエラーメッセージと格闘しながら体得するものです。これはCurlでも同じです。難しく考えずに、とにかくサンプルプログラムを作ってみることをお勧めします。
次に、VB6.0のSelect Case・・・End Selectに相当する{switch・・・}の構文を紹介しましょう。リスト5は、変数monthの値に応じて季節の名前を表示するサンプルプログラムです。VB6.0によく似ているので、詳しく説明しなくても内容を理解できるでしょう。
{let year:int = 11}
{let s:#String}
{switch year
case 3, 4, 5 do
{set s = "春です!"}
case 6, 7, 8 do
{set s = "夏です!"}
case 9, 10, 11 do
{set s = "秋です!"}
case 12, 1, 2 do
{set s = "冬です!"}
else
{set s = "月の値が不正です!"}
}
{value s}
これまで見てきたサンプルプログラムからお気づきのことと思いますが、Curlは { と } で囲んでプログラムのブロック(まとまり)を示します。{キーワード・・・}という構文です。これは、VB6.0の「キーワード・・・Endキーワード」に相当します。例えば、Curlの{if ・・・}は、VB6.0のIf・・・End Ifに相当します。Curlの{switch ・・・}は、VB6.0のSelect Case・・・End Selectに相当します。
繰り返し
今度は、繰り返しの構文を紹介しましょう。VB6.0のFor・・・NextおよびWhile・・・Wendによる繰り返しは、Curlでは{for・・・}および{while・・・}で表されます。同じ言葉なので、わかりやすいでしょう。
リスト6は、{for・・・}を使って1~10の数値を表示するサンプルプログラムです。{set s = s & i & ", "}の部分で使われている&は、文字列を連結する演算子です。文字列と整数(ここでは変数i)を連結すると、整数が文字列に変換されます。プログラムを実行すると「1, 2, 3, 4, 5, 6, 7, 8, 9, 10,」と表示されます。
{let i:int}
{let s:String = ""}
{for i = 1 to 10 step 1 do
{set s = s & i & ", "}
}
{value s}
ループカウンタを使って繰り返す場合は{for・・・}を使い、継続条件のみを指定して繰り返す場合は{while・・・}を使うべきですが、あえてwhileを使って同じプログラムを記述するとリスト7のようになります。
{let i:int = 1}
{let s:String = ""}
{while i <= 10 do
{set s = s & i & ", "}
{set i = i + 1}
}
{value s}
今回は、Curl言語の基本的な構文を紹介しました。はじめてCurlのソースコードを見たときと比べて、現在はどのような感覚になっていますか。「ノリがつかめれば難しくない」と感じていただけたはずです。次回は、Curl言語の構文の続きとして、プロシージャおよびクラスを記述する方法を紹介します。



