Measure 単位付き数値ライブラリ

15
Measure 単位付き数値ライブラリ 村田 賢太 Ruby 札幌 Ruby 勉強会@札幌‒09 2008‒08‒23

description

単位付き数値ライブラリ Measure の紹介

Transcript of Measure 単位付き数値ライブラリ

Page 1: Measure 単位付き数値ライブラリ

Measure単位付き数値ライブラリ村田 賢太Ruby 札幌

Ruby 勉強会@札幌‒092008‒08‒23

Page 2: Measure 単位付き数値ライブラリ

単位付き数値とは?

2

Page 3: Measure 単位付き数値ライブラリ

単位付き数値とは?

✓173 [cm]

✓63 [kg]

✓376.730 [Ω]

✓101,325 [Pa]

✓1.602×10‒19 [C]

2

Page 4: Measure 単位付き数値ライブラリ

Measure ライブラリ

✓単位付き数値クラスを提供

✓異なる単位間の変換を定義可能

✓単位付き数値の簡易記法を提供

3

Page 5: Measure 単位付き数値ライブラリ

インストール方法mrkn-macbook:~ root# gem install -r measure

Bulk updating Gem source index for: http://gems.rubyforge.org

Successfully installed measure-0.1.0

1 gem installed

Installing ri documentation for measure-0.1.0...

Installing RDoc documentation for measure-0.1.0...

mrkn-macbook:~ root#

4

Page 6: Measure 単位付き数値ライブラリ

使い方mrkn-macbook:~ root# irb

irb(main):001:0> require 'measure'

irb(main):002:0> Measure.define_unit :m, :length

irb(main):003:0> Measure.define_unit :cm, :length

irb(main):004:0> Measure(1, :m)

=> #<Measure:0x57d8c @unit=:m, @value=1>

irb(main):005:0> Measure(1, :cm).to_s

=> "1 [cm]"

5

Page 7: Measure 単位付き数値ライブラリ

単位変換irb(main):006:0> Measure.define_conversion :m, :cm => 100

irb(main):007:0> (Measure(1, :m) + Measure(1, :cm)).to_s

=> "1.01 [m]"

irb(main):008:0> Measure.define_unit :in, :length

irb(main):009:0> Measure.define_conversion :in, :cm => 2.54

irb(main):010:0> Measure.define_unit :mm, :length

irb(main):011:0> Measure.define_conversion :m, :mm => 1000

irb(main):012:0> (Measure(210, :mm) - 2*Measure(1, :in)).to_s

=> "159.2 [mm]"

6

Page 8: Measure 単位付き数値ライブラリ

マルチホップ変換[in] [cm]

[mm]

[m]

2.54倍

100倍

1000倍

7

Page 9: Measure 単位付き数値ライブラリ

マルチホップ変換[in] [cm]

[mm]

[m]

2.54倍

100倍

1000倍

2.54分の1

100分の1

1000倍

7

Page 10: Measure 単位付き数値ライブラリ

マルチホップ変換[in] [cm]

[mm]

[m]

2.54倍

100倍

1000倍

2.54分の1

100分の1

1000倍連結な単位間での相互変換の経路を幅優先探索で発見

7

Page 11: Measure 単位付き数値ライブラリ

簡易記法irb(main):013:0> require 'measure/support'

irb(main):014:0> Measure.form { 1.m - 1.cm }.to_s

=> "0.99 [m]"

8

Page 12: Measure 単位付き数値ライブラリ

定義済み単位✓measure/length を require すると次の単位が定義され相互変換可能な状態になる

m, meter in, inch pt, point, dp, didot_pointcm, centi_meter ft, feet bp, big_pointmm, milli_meter yd, yard pc, picakm, kilo_meterum, micro_meternm, nano_meter

9

Page 13: Measure 単位付き数値ライブラリ

未対応な機能✓多次元単位

✓たとえば 1 [kg m / s2] など

✓簡易記法なら 1.kg.m.s(‒2) かな?

✓スケーリング以外の単位変換

✓[°C] = 5×([°F] ‒ 32) / 9 など

✓開発版では対応済み10

Page 14: Measure 単位付き数値ライブラリ

Proc による単位変換irb(main):015:0> Measure.define_unit :deg_c, :temperature

irb(main):016:0> Measure.define_unit :deg_f, :temperature

irb(main):017:0> Measure.define_conversion :deg_c, :deg_f => lambda

{|x| 9.0*x/5.0 + 32 }

irb(main):018:0> Measure.define_conversion :deg_f, :deg_c => lambda

{|x| 5.0*(x - 32)/9.0 }

irb(main):019:0> Measure.form { -40.deg_c.as_deg_f }.to_s

=> "-40.0 [deg_f]"

11

Page 15: Measure 単位付き数値ライブラリ

Future works

✓スケーリング以外の変換を実装したバージョンをリリースする

✓定義済み単位を増やす

✓多次元単位への対応

12