F#では数値に対して"単位"を設定できるので、計算ミスが減るのです

"長さ(m or km etc)"やら"時間(s or hour etc)"などの単位が絡んだ計算、特に金融なんかだと為替レートが絡んだ計算で、かけ算すべきなのか割り算すべきなのかよく間違えますよね?そんな貴方にお勧めしたいF#です。

以下、ドル円レートの変換を計算するという超簡単なサンプルコード。間違った単位間の計算の場合はコンパイルエラーとなるのでミスが未然に防げます。

//単位の定義
[<Measure>] type USD
[<Measure>] type JPY
[<Measure>] type USDJPY = JPY/USD

[<EntryPoint>]
let main argv = 
    //3ドルが日本円換算でいくらになるのか?という計算
    let amountInUSD = 3<USD>
    let fx = 105<JPY/USD>(*<JPY/USD>と書いておいてもよい*)
    //円での3ドルの価値 
    let amountInJPY : int<JPY> = amountInUSD*fx
    //↓以下のコードは、以下の「単位が合っていませんよ!」エラーで怒られる!!!
    //let amountInXXX : int<JPY> = amountInJPY*fx
    //エラー	1	The unit of measure 'JPY' does not match the unit of measure 'JPY USDJPY'
    printfn "%dUSDは、ドル円レートが%d円/ドルの時、%dJPYです" (amountInUSD |> int) (fx |> int) (amountInJPY |> int) 
    0

実行結果

3USDは、ドル円レートが105円/ドルの時、315JPYです

もっと詳しく知りたい場合は、以下を参照。