# 関数

## ひまわりの関数

> ひまわりにおける関数は、ラベルを用いたサブルーチンの延長上にあります。よって、関数というより、引数のついたラベルと言った方が分かりやすいかもしれません。

> ### 関数の定義

> 関数を定義する方法は、２つあります。

> > （１）引数を明示したラベルを作る
> > （２）『関数定義』命令を使う

> ### （１）引数を明示したラベルを作る

> 下のプログラムは、引数に指定した西暦から、年齢を算出するという関数を使った例です。

> 1976年生まれの、年齢算出。 表示。 ＊年齢算出（?年生まれの） 今年は、MID(今日,1,4) 引数取得。 それは、今年 - それ。 戻る。

> ラベルの後ろに、関数の引数を（）で括って書くと、それが関数の引数として扱われます。
> 『引数取得』命令を使うことにより、特殊変数『それ』に、引数を配列形式で得ることができます。
> また、『?に,?番目の,引数得る』命令を使うと、指定番目の引数だけを得ることができます。
> 関数の戻り値を設定するには、『それ』に値を代入します。
> 最後に、ラベルと同じように『戻る』命令で、関数を終わります。

> ### （２）関数定義命令を使った関数の定義

> 『関数定義』命令は、ラベルの名前と、引数の宣言を、指定することで、通常のラベルを、関数として定義しなおす方法です。
> （これは、ver.1.81以前のひまわりの互換性を保つために残されています。）

> `『年齢を算出』を、『?年生まれの』で、関数定義 '関数を定義 1976年生まれの、年齢を算出して、表示。 待機。 ＊年齢を算出 今年=MID(今日,1,4) 引数取得’引数を、それに、取得 それ=今年-それ 戻る。`

> 関数の定義は、

> 『ラベル名』を、『引数』で、関数定義。

> の、ように書きます。引数の部分には、『?の』や、『?を,?として』のように、『？＋助詞』の形で指定します。

## ローカル変数

> 関数の中で使う変数は、ローカル変数として扱いたい場合があります。

> ローカル変数として扱うには、『（変数名）を、ローカル変数。』のように、変数を明示します。
> 『ローカル変数』命令で作られた変数は、ローカル変数としてふるまい、関数を抜けると、破棄されます。

> 値段は、５００ ローカルテスト関数 値段を、表示。 待機。 ＊ローカルテスト関数 値段を、ローカル変数。 値段は、１０ 戻る。

> 上の例では、ローカル関数内では、ローカル変数『値段』の値を変更していますが、
> 関数から抜けるタイミングで、ローカル変数の『値段』は破棄されるので、グローバルとして作成された変数『値段』の値、５００が表示されます。

## 備考：

> 『プログラム言語特有の難しさの排除』をコンセプトに作ったひまわりには、ver.1.39以前には、関数なんてものは存在しませんでした。しかし、『関数くらい有ったほうが便利』という思いが強くなってきたので、ラベルを使った簡単な関数を実装することにしました。そして、ver.1.82以降、正式に関数をサポートするに至りました。

戻る