引数の省略と初期値

前節2-1で、引数の型を指定する方法を扱いましたが、今度は引数の初期値を与える方法を見ておきましょう。

引数の省略

まず、引数を省略可能にするには、引数名の前に{=?}と書きます:

●省略可能命令({=?}A,{=?}BとC,Dで)
 「{A},{B}と{C},{D}で命令が実行されました。」と表示する。

1,2と3,4で省略可能命令。
2と3,4で省略可能命令。
1,3,4で省略可能命令。
3,4で省略可能命令。

このとき、どの引数が省略されているかは、引数直後に書く「助詞」によって判断されます。例えば、「Bと」に当たる部分がない場合は、 B が省略されたと判断され、「A,」に当たる部分がない場合は A が省略されたと判断されます。

型指定と同時に指定することも可能です: {数値=?}

初期値を与える

省略した引数に初期値を与えたい場合は、"?"の代わりに具体的な値を書きます。例えば、初期値として整数1を与えたい場合は {=1} または {整数=1} 、文字列「A」を与えたい場合は{="A"}, {=「A」}, {文字列=『A』} などとなります。

●初期値命令({文字列=「A」}A,{=`B`}BとC,Dで)
 「{A},{B}と{C},{D}で命令が実行されました。」と表示する。

1,2と3,4で初期値命令。
2と3,4で初期値命令。
1,3,4で初期値命令。
3,4で初期値命令。

特殊な初期値

基礎編で扱った描画命令の大半は、引数 OBJ を省略すると母艦(メインフォーム)を対象に描画するようになっていました。自分で作る命令も同じような仕様にしたい場合、どうすればいいのでしょうか?

実はグループ型の引数を省略した場合は初期値を設定できません[*1]。しかし、省略した引数に母艦を補う場合に限って、{=?母艦}と書くことで初期値を母艦にすることができます。"?母艦"という少し変わった指定になることに注意してください。

●オレ線({グループ=?母艦}OBJのX1,Y1からX2,Y2へ)
 OBJのX1+10,Y1からX2-10,Y2へ線

100,200から100,300へオレ線。# 曲がった性格なオレ様?

もっと柔軟に細かく対応したい場合は、引数チェックするなどしてください。

折れ線

さて、例えば円弧放物線などの、色々な曲線を引くにはどうすればいいでしょうか?基礎編で扱った命令では、「」と「」しか描くことができません。自由に、滑らかに曲がる曲線を再現するには一体どのようにすればいいのでしょうか?

答えは簡単です。有限の折れ線で曲線を近似すればいいのです。でもそれではジグザグになってしまうのではないか?と思うかもしれません。しかし、十分に折れ線の「刻み幅」を小さく取れば、完璧に曲線を近似することができます[*2]

そこで、色々な曲線を描く命令を作る前に、まずは折れ線を描く命令を作りましょう。

●折れ線({グループ=?母艦}OBJの{配列}Sへ|OBJにSで)
 (Sの要素数-1)回
  OBJのS[回数-1][0],S[回数-1][1]からS[回数][0],S[回数][1]へ線

引数の書式は「多角形」命令と同じにしてあります。使い方も「多角形」命令とほぼ同様です。

点列とは配列=「100,200
200,300
400,100
300,300
300,200」をCSV取得。
点列へ折れ線。

注釈

*1
グループに初期値を設定できないのは、初期値にリテラル(プログラム中に直に記述する定数)しか設定できないためです。つまり、文字列など他の型の場合でも、変数を使った柔軟な初期値設定はできません(定数も不可!)。まぁ、大抵初期値はリテラルだけで事足りるはずですが。
*2
この事実は、数学的に証明されています。折れ線のことを「Cauchyの折れ線」、またそれによる滑らかな曲線の近似を「Cauchyの折れ線近似」などと呼んだりします。解析学において、微分方程式の初期値問題(Cauchy問題)の解が一意に存在するという非常に重要な定理と深い関わりがあります。