---
# System prepended metadata

title: 関数
tags: [Simple]

---

## 関数

前にも関数を利用しましたが、それは`Simple`で元々組み込まれている関数を利用していたのです。もちろん、関数は自分で作る事が出来ます。

そもそも関数とは、処理を保存して好きな時に呼び出す仕組みの事です。
関数は戻り値を返したり引数（関数に渡すデータ）を取る事が出来ます。

平均を求める`average`関数を作ってみましょう。

```
プログラム> func average(a, b)
関数averageを定義します
関数定義> var sum = a b +
関数定義> return sum 2 /
関数定義> end func
メモリに関数を保存しました
プログラム> mem
変数がありません
+-- メモリ内の関数
| +--  average (a, b)
| | 1: var sum = a b +
| | 2: return sum 2 /
```
関数を定義できました。
では、その`average`関数を呼び出してみましょう。

関数のコードは1行ずつ実行されるので、その間にデバッグメニューが表示されます。必要ない場合は`Enter`キーを押してスキップしてください。
```
プログラム> average(5,8)
+-- 式を計算します
| Stack〔 〕←  average(5,8)
引数の値を求めます
+-- 式を計算します
| Stack〔 〕←  5
結果 = 5
+-- 式を計算します
| Stack〔 〕←  8
結果 = 8
関数averageを呼び出します
1行目の〔 var sum = a b + 〕を実行します
変数sumを定義します
値を求めます
+-- 式を計算します
| Stack〔 〕←  a
変数aを読み込みます
| Stack〔5 〕←  b
変数bを読み込みます
| Stack〔5, 8 〕←  +
結果 = 13
メモリに変数を確保しました
デバッグメニュー>>>
継続します
2行目の〔 return sum 2 / 〕を実行します
戻り値を返します
+-- 式を計算します
| Stack〔 〕←  sum
変数sumを読み込みます
| Stack〔13 〕←  2
| Stack〔13, 2 〕←  /
結果 = 6.5
```

作った関数を呼び出すことが出来ました。
戻り値を式で利用する事も出来ます。

以下のコードを自分のREPLで実行してみましょう。

```
"平均は" string(average(57, 89)) + 
```

上の式では`string`関数の中で`average`関数を呼び出しています。この入り組んだ構造を`ネスト`といいます。
関数はコードの再利用性を向上させるので非常に便利です。