SlideShare a Scribd company logo
Ruby 勉強会@札幌‒09
                2008‒08‒23




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




     2
単位付き数値とは?
 173 [cm]

 63 [kg]

 376.730 [Ω]

 101,325 [Pa]

 1.602 10‒19 [C]

                   2
Measure ライブラリ

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

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

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



          3
インストール方法
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
使い方
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
単位変換
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
マルチホップ変換
  [in]   2.54倍    [cm]



                 100倍
                         [m]
                 1000倍



                  [mm]


                    7
マルチホップ変換
  [in]   2.54倍    [cm]
                         100分の1

     2.54分の1
                 100倍
                             [m]
                 1000倍

                         1000倍
                  [mm]


                    7
マルチホップ変換
    [in]   2.54倍    [cm]
                           100分の1

       2.54分の1
                   100倍
                               [m]
                   1000倍

連結な単位間での                   1000倍
相互変換の経路を            [mm]
幅優先探索で発見
                      7
簡易記法
irb(main):013:0> require 'measure/support'

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

=> "0.99 [m]"




                                 8
定義済み単位
   measure/length を require すると次の単
   位が定義され相互変換可能な状態になる
m, meter          in, inch       pt, point, dp, didot_point
cm, centi_meter   ft, feet       bp, big_point
mm, milli_meter   yd, yard       pc, pica
km, kilo_meter
um, micro_meter
nm, nano_meter
                             9
未対応な機能
 多次元単位

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

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

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

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

 開発版では対応済み
                 10
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
Future works

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

 定義済み単位を増やす

 多次元単位への対応


             12

More Related Content

PDF
5分で分かる Measure
PDF
Prml 2_3_1
PDF
Ruby で高速なプログラムを書く
PDF
Float is Legacy
PDF
Introduction to ATDD with Cucumber and RSpec
PDF
The world without the literal notation for floating-point numbers
PDF
The world without float literal
PDF
Ruby 1.9.3 の新機能と変更点
5分で分かる Measure
Prml 2_3_1
Ruby で高速なプログラムを書く
Float is Legacy
Introduction to ATDD with Cucumber and RSpec
The world without the literal notation for floating-point numbers
The world without float literal
Ruby 1.9.3 の新機能と変更点

More from Kenta Murata (13)

PDF
関数型プログラミングの世界
PDF
Let's begin Behavior Driven Development using RSpec
PDF
Rubyをたのしくするために私が考えていること
PDF
Ruby の懸案事項
PDF
5分弱で分かる量子ビット
PDF
Rubykaigi2010mrkn bigdecimal
PDF
Ruby における絵文字エンコーディング間の相互変換ダイアグラム (案)
PDF
校内勉強会のススメ An encouragement to hold workshops In your school
PDF
Ruby の標準乱数生成器とその改善案
PDF
情報学特論#02
PDF
情報学特論#01
PDF
北海道関数型言語勉強会@札幌#2のお知らせ
PDF
Ruby 拡張モジュール入門
関数型プログラミングの世界
Let's begin Behavior Driven Development using RSpec
Rubyをたのしくするために私が考えていること
Ruby の懸案事項
5分弱で分かる量子ビット
Rubykaigi2010mrkn bigdecimal
Ruby における絵文字エンコーディング間の相互変換ダイアグラム (案)
校内勉強会のススメ An encouragement to hold workshops In your school
Ruby の標準乱数生成器とその改善案
情報学特論#02
情報学特論#01
北海道関数型言語勉強会@札幌#2のお知らせ
Ruby 拡張モジュール入門
Ad

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