第6章. 関数
この章の目的
この章を読み終える頃には、自分で関数を一つ書いて、入力を与えて、その結果を使えるようになります。この章を読み終える頃には、自分で関数を一つ書いて、入力を与えて、その結果を使えるようになります。
関数は名前付きのフレーズ
音楽でいうフレーズとは、それだけで意味の通る小さくまとまった音楽的アイデアで、必要な所でどこでも演奏できるものです。プログラムにおける関数も同じ考え方です。関数は名前の付いた計算のひと固まりです。一度名前が付けば、必要な所でいつでも、何度でも、書き直すことなく使えます。音楽でいうフレーズとは、それだけで意味の通る小さくまとまった音楽的アイデアで、必要な所でどこでも演奏できるものです。プログラムにおける関数も同じ考え方です。関数は名前の付いた計算のひと固まりです。一度名前が付けば、必要な所でいつでも、何度でも、書き直すことなく使えます。
ここまでのプログラムには関数は一つ、mainしかありませんでした。プログラムは必要なだけ関数を持つことができます。ここまでのプログラムには関数は一つ、mainしかありませんでした。プログラムは必要なだけ関数を持つことができます。
関数を書く
これは一つの質問に答える関数です — 何オクターブの中に半音はいくつあるか。これは一つの質問に答える関数です — 何オクターブの中に半音はいくつあるか。
fn semitone_steps(octaves: Word) -> Word {
octaves * 12
}
fn main() -> Word {
semitone_steps(3)
}
keleusma runで実行します。出力は次のとおりです。
36
3オクターブは36個の半音にわたります。
関数の各部分
semitone_stepsを部品ごとに見ていきます。
fnが関数の始まりを表します。semitone_stepsはその名前です。名前は関数が何をするかを表すべきです。(octaves: Word)はパラメータリストです。パラメータは入力です。この関数は入力を一つ取り、それをoctavesという名前で、型はWordとしています。各パラメータは自分の型を明示します。(octaves: Word)はパラメータリストです。パラメータは入力です。この関数は入力を一つ取り、それをoctavesという名前で、型はWordとしています。各パラメータは自分の型を明示します。-> Wordは、関数が返す結果の型を表します。{ octaves * 12 }が本体です。本体が結果を計算します。
本体の最後の式が結果になります。「これを返す」という特別な単語はありません。semitone_stepsはoctaves * 12で終わっているので、それが返り値になります。本体の最後の式が結果になります。「これを返す」という特別な単語はありません。semitone_stepsはoctaves * 12で終わっているので、それが返り値になります。
関数を呼び出す
関数を使うことを「呼び出す」と言います。呼び出しとは、関数の名前のあとに括弧で囲んだ入力を並べたものです。semitone_steps(3)という呼び出しは、octavesを3にして関数を走らせます。関数を使うことを「呼び出す」と言います。呼び出しとは、関数の名前のあとに括弧で囲んだ入力を並べたものです。semitone_steps(3)という呼び出しは、octavesを3にして関数を走らせます。
関数は2つ以上の入力を取ることもできます。パラメータはカンマで区切ります。関数は2つ以上の入力を取ることもできます。パラメータはカンマで区切ります。
fn interval(low: Word, high: Word) -> Word {
high - low
}
fn main() -> Word {
interval(60, 67)
}
このプログラムは7を返します。MIDIナンバー60(ミドルC)からその上のG(MIDIナンバー67)までの距離は半音7個分、つまり完全五度です。このプログラムは7を返します。MIDIナンバー60(ミドルC)からその上のG(MIDIナンバー67)までの距離は半音7個分、つまり完全五度です。
この章のまとめ
- 関数は名前の付いた、再利用可能な計算のひと固まりです。
fn name(parameter: Type, ...) -> ResultType { body }で関数を宣言します。fn name(parameter: Type, ...) -> ResultType { body }で関数を宣言します。- 本体の最後の式が結果になります。
- 呼び出しは
name(inputs)という形です。
次の章では、プログラムが判断できるようになります。