Midoliy |> F# - 測定単位
測定単位
Midoliy|F#プログラミング
測定単位の概要
サンプルでみる測定単位

測定単位の概要


 F#の浮動小数点数値と符号付き整数値には、関連する測定単位を含めることができます。これは、通常、長さ・体積・質量などを示すために使用されます。単位付きの数を使用することで、算術関係に正しい単位があることをコンパイラが検証できるようになります。これは、コーディングをしていく上でのケアレスミスを防ぐのに役立ちます。
// ------------------
// [ 構文 ]
// ------------------
[<Measure>] type unit-name [ = measure ]

 測定単位を定義するためには [<Measure>]属性 を必ず付与しなければなりません。また、[unit-name] には測定単位を定義します。例えば、長さの単位である 'cm' などがここに定義されます。また、[measure] には単位を含む式を指定することができます。単位を含む式では、整数のべき乗がサポートされており、単位間の積や商を示すことが可能です。
 例えば、以下のように測定単位の定義をすることができます。
[<Measure>] type cm           // センチメートルの定義
[<Measure>] type ml = cm^3    // ミリリットル = 立方cm

 また、測定単位を利用するには、数値の後に「角かっこ(<>)+測定単位」として指定します。ちょうど以下のような形で指定します。
[<Measure>] type cm           // センチメートルの定義
let length = 1.0<cm>
let volume = 10<cm^3>

 数値と <単位> の間にはスペースを入れてはいけないことに注意が必要です。また、測量単位の中で「<cm^3>」のように単位をべき乗したものなどを直接記述することもできます。また、以下のように測定単位を組み合わせることも可能です。
[<Measure>] type km
[<Measure>] type hour
let KPH = 10<km/hour>

 このように測定単位注釈は、リテラル型(floatやintなど)に対して、その値が表す単位情報を付与することが可能です。また、測定単位はコンパイル時の単位検査に使用されますが、実行時環境では保持されません。したがって、測定単位を使うことによるパフォーマンス低下は発生しないわけです。
 単位が重要となる計算などでは、積極的に測定単位を利用し、バグの混入率低下や可読性を向上させていきましょう。


サンプルでみる測定単位

 以下は、簡単な測定単位のサンプルとなります。


 サンプルのように、測定単位情報を値に付与することにより、意図しない単位の値が指定できないようになります。コンパイル時にこの情報はわかるため、計算処理などのバグが早期に発見できるようになります。単位をもつ情報をやりとりさせる場合は、ぜひとも使用していきましょう。