関数の基本
Midoliy |> F#プログラミング


関数とは
構文
簡単な定義例
その他

関数とは


 関数は、あらゆるプログラミング言語において、プログラムの "実行" の基本となる単位です。他の言語の場合と同様に、F#の関数にも "関数名" と "関数の本体(= 処理内容)" があります。また、パラメータや引数を受け取ることもできます。
 F#ではさらに、関数型プログラミングの構成要素もサポートしています。たとえば、関数を値として処理できたり、名前のない関数を式(= ラムダ式)として使用できたりします。また、関数合成を利用して新しい関数を作成できたり、カリー化関数や、関数の引数の部分適用による関数の暗黙の定義などもサポートされています。

 関数を定義するには "letキーワード" を使用します。また、再帰関数の場合は "let recキーワード" を使用します。


構文


 F#の関数を定義する構文は以下のような形式になります。
// 通常の関数宣言
let [ inline ] function-name parameter-list [ : return-type ] = function-body

// 再帰関数の宣言
let rec function-name parameter-list = function-body
                

要素名 内容
let / let rec let束縛キーワード
function-name 関数名
parameter-list パラメータ / 引数
function-body 処理内容
inline オプション: 関数をinline化する場合, 追記
:return-type オプション: 返り値の型を明示的に指定する場合, 追記


簡単な定義例


 関数の簡単な定義の例を見ていきましょう。

(1) まずはシンプルな関数宣言の例を見ていきます

// 引数を取らず、"Hello, World!!" と標準出力に表示する関数
// 引数なしの場合は、() をparameter-list に指定します
let showHello () = printfn "Hello, World!!"

// 2つの引数をとって、足し算をする関数
// parameter-list に a と b を指定しています
let plus a b = a + b

// 2つの引数をとって、引き算をする関数
// inlineオプションを指定しています
let inline sub a b = a - b
                

(2) 次に、返り値の型を指定している関数の宣言例を見ていきます

// 引数を取らず、"Hello, World!!" と標準出力に表示する関数
// unit型を返すことを明示しています
let showHello () : unit = printfn "Hello, World!!"

// 2つの引数をとって、足し算をする関数
// double型を返すことを明示しています
let plus a b : double = a + b
                

(3) 次に、引数の値にも型指定をしている関数の宣言例を見ていきます

// 2つの引数をとって、足し算をする関数
// int型を2つ引数にとり、int型を返すことを明示しています
let plus (a:int) (b:int) : int = a + b

// 引数の型指定は, 任意の引数にのみ適用することも可能
// 今回は第一引数と返り値にのみ、明示的に型指定をしています
let sub (a:int) b : int = a - b
                

その他


 関数定義の方法には、let束縛以外にも do束縛ラムダ式 などの方法があります。詳細については、別の章で紹介したいと思います。

 また、F#においては、関数はファーストクラス(= 第一級)の値です。もっと簡単に言うと、関数も "数値" や "文字列" のような基本的な と同じように扱うことができるということです。
 そのため、F#では関数も数値も同じように let束縛 できるわけですね。すぐには、この便利さがわからないかもしれませんが、徐々にわかるようになると思います。
 ここではその便利さの説明はしませんが、いずれどこかの章か項で紹介したいと思います。