ひまわりにおける関数は、ラベルを用いたサブルーチンの延長上にあります。よって、関数というより、引数のついたラベルと言った方が分かりやすいかもしれません。
関数の定義
関数を定義する方法は、2つあります。
(1)引数を明示したラベルを作る
(2)『関数定義』命令を使う
(1)引数を明示したラベルを作る
下のプログラムは、引数に指定した西暦から、年齢を算出するという関数を使った例です。
1976年生まれの、年齢算出。
表示。
*年齢算出(?年生まれの)
今年は、MID(今日,1,4)
引数取得。
それは、今年 - それ。
戻る。
ラベルの後ろに、関数の引数を()で括って書くと、それが関数の引数として扱われます。
『引数取得』命令を使うことにより、特殊変数『それ』に、引数を配列形式で得ることができます。
また、『?に,?番目の,引数得る』命令を使うと、指定番目の引数だけを得ることができます。
関数の戻り値を設定するには、『それ』に値を代入します。
最後に、ラベルと同じように『戻る』命令で、関数を終わります。
(2)関数定義命令を使った関数の定義
『関数定義』命令は、ラベルの名前と、引数の宣言を、指定することで、通常のラベルを、関数として定義しなおす方法です。
(これは、ver.1.81以前のひまわりの互換性を保つために残されています。)
『年齢を算出』を、『?年生まれの』で、関数定義 '関数を定義
1976年生まれの、年齢を算出して、表示。
待機。
*年齢を算出
今年=MID(今日,1,4)
引数取得’引数を、それに、取得
それ=今年-それ
戻る。
関数の定義は、
の、ように書きます。引数の部分には、『?の』や、『?を,?として』のように、『?+助詞』の形で指定します。
『ラベル名』を、『引数』で、関数定義。
関数の中で使う変数は、ローカル変数として扱いたい場合があります。
ローカル変数として扱うには、『(変数名)を、ローカル変数。』のように、変数を明示します。
『ローカル変数』命令で作られた変数は、ローカル変数としてふるまい、関数を抜けると、破棄されます。
上の例では、ローカル関数内では、ローカル変数『値段』の値を変更していますが、
値段は、500
ローカルテスト関数
値段を、表示。
待機。
*ローカルテスト関数
値段を、ローカル変数。
値段は、10
戻る。
関数から抜けるタイミングで、ローカル変数の『値段』は破棄されるので、グローバルとして作成された変数『値段』の値、500が表示されます。
『プログラム言語特有の難しさの排除』をコンセプトに作ったひまわりには、ver.1.39以前には、関数なんてものは存在しませんでした。しかし、『関数くらい有ったほうが便利』という思いが強くなってきたので、ラベルを使った簡単な関数を実装することにしました。そして、ver.1.82以降、正式に関数をサポートするに至りました。