Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

第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_stepsoctaves * 12で終わっているので、それが返り値になります。本体の最後の式が結果になります。「これを返す」という特別な単語はありません。semitone_stepsoctaves * 12で終わっているので、それが返り値になります。

関数を呼び出す

関数を使うことを「呼び出す」と言います。呼び出しとは、関数の名前のあとに括弧で囲んだ入力を並べたものです。semitone_steps(3)という呼び出しは、octaves3にして関数を走らせます。関数を使うことを「呼び出す」と言います。呼び出しとは、関数の名前のあとに括弧で囲んだ入力を並べたものです。semitone_steps(3)という呼び出しは、octaves3にして関数を走らせます。

関数は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)という形です。

次の章では、プログラムが判断できるようになります。