SlideShare a Scribd company logo
1 of 28
Download to read offline
札幌 Ruby 会議‒01; 2008‒10‒25




5分で分かる
Measure
村田 賢太
Kenta Murata
やるおは偉いから
その日のうちに宿題を
片付けてしまうんだお!
本日の宿題
自分の身長を
測ってみよう!
身長を測ってみよう!
だっておwwwwwww
バカにするのもいいかげ
んにして欲しいおwww
やる夫の身長は11文字


     放尿は気持ちイイお!
もう宿題終わったお!
今日も YourAVHost で
スッキリするお!


       エロギーク様々だおっ
やる夫くん、気を付けて
だ、誰だお?
やる夫くん、問題を良く見て
本日の宿題
 自分の身長を
 測ってみよう!
何フィートかな?
フィートってなんだお・・・
さっきは書いてなかった
気がするお・・・
11文字が何フィートになる
か分かんないお
どうしたらいいお?
Measure
Measure ライブラリ


‣ 単位付き数値クラスを提供
‣ 異なる単位間の変換を定義可能
‣ 単位付き数値の簡易記法を提供

           18
単位付き数値とは?

‣ 173 [cm]
‣ 63 [kg]
‣ 376.730 [Ω]
‣ 101,325 [Pa]
‣ 1.602 10 [C]
         ‒19


                 19
インストール方法
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#




                              20
使い方
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]"




                            21
単位変換
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]"



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

       2.54分の1
                   100倍
                               [m]
                   1000倍

連結な単位間での                   1000倍
相互変換の経路を            [mm]
幅優先探索で発見
                     23
簡易記法
irb(main):013:0> require 'measure/support'
irb(main):014:0> Measure.form { 1.m - 1.cm }.to_s
=> "0.99 [m]"




                            24
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]"




                            25
定義済み単位
‣ measure/length を require すると次の単位
  が定義され相互変換可能な状態になる
m, meter          pt, point, dp, didot_point   in, inch
cm, centi_meter   bp, big_point                ft, feet
mm, milli_meter   pc, pica                     yd, yard
km, kilo_meter    aa, angstrom
um, micro_meter   au, AU, astronomical_unit
nm, nano_meter    ly, light_year
                          26
Future works
‣ 定義済み単位を増やす
 ‣ 【急募】地域で定義が違う場合の対応方法
‣ 多次元単位への対応
 ‣ 1 [kg m / s ] 1.kg.m.s(–2)
          2



‣ 複数の単位変換系をサポート
‣ スレッドセーフ化
               27
糸冬 了




2008年10月25日 札幌Ruby会議にて

More Related Content

More from Kenta Murata

The world without the literal notation for floating-point numbers
The world without the literal notation for floating-point numbersThe world without the literal notation for floating-point numbers
The world without the literal notation for floating-point numbersKenta Murata
 
The world without float literal
The world without float literalThe world without float literal
The world without float literalKenta Murata
 
関数型プログラミングの世界
関数型プログラミングの世界関数型プログラミングの世界
関数型プログラミングの世界Kenta Murata
 
Let's begin Behavior Driven Development using RSpec
Let's begin Behavior Driven Development using RSpecLet's begin Behavior Driven Development using RSpec
Let's begin Behavior Driven Development using RSpecKenta Murata
 
Rubyをたのしくするために私が考えていること
Rubyをたのしくするために私が考えていることRubyをたのしくするために私が考えていること
Rubyをたのしくするために私が考えていることKenta Murata
 
Ruby の懸案事項
Ruby の懸案事項Ruby の懸案事項
Ruby の懸案事項Kenta Murata
 
5分弱で分かる量子ビット
5分弱で分かる量子ビット5分弱で分かる量子ビット
5分弱で分かる量子ビットKenta Murata
 
Ruby における絵文字エンコーディング間の相互変換ダイアグラム (案)
Ruby における絵文字エンコーディング間の相互変換ダイアグラム (案)Ruby における絵文字エンコーディング間の相互変換ダイアグラム (案)
Ruby における絵文字エンコーディング間の相互変換ダイアグラム (案)Kenta Murata
 
Ruby の標準乱数生成器とその改善案
Ruby の標準乱数生成器とその改善案Ruby の標準乱数生成器とその改善案
Ruby の標準乱数生成器とその改善案Kenta Murata
 
情報学特論#02
情報学特論#02情報学特論#02
情報学特論#02Kenta Murata
 
情報学特論#01
情報学特論#01情報学特論#01
情報学特論#01Kenta Murata
 
Ruby 拡張モジュール入門
Ruby 拡張モジュール入門Ruby 拡張モジュール入門
Ruby 拡張モジュール入門Kenta Murata
 

More from Kenta Murata (12)

The world without the literal notation for floating-point numbers
The world without the literal notation for floating-point numbersThe world without the literal notation for floating-point numbers
The world without the literal notation for floating-point numbers
 
The world without float literal
The world without float literalThe world without float literal
The world without float literal
 
関数型プログラミングの世界
関数型プログラミングの世界関数型プログラミングの世界
関数型プログラミングの世界
 
Let's begin Behavior Driven Development using RSpec
Let's begin Behavior Driven Development using RSpecLet's begin Behavior Driven Development using RSpec
Let's begin Behavior Driven Development using RSpec
 
Rubyをたのしくするために私が考えていること
Rubyをたのしくするために私が考えていることRubyをたのしくするために私が考えていること
Rubyをたのしくするために私が考えていること
 
Ruby の懸案事項
Ruby の懸案事項Ruby の懸案事項
Ruby の懸案事項
 
5分弱で分かる量子ビット
5分弱で分かる量子ビット5分弱で分かる量子ビット
5分弱で分かる量子ビット
 
Ruby における絵文字エンコーディング間の相互変換ダイアグラム (案)
Ruby における絵文字エンコーディング間の相互変換ダイアグラム (案)Ruby における絵文字エンコーディング間の相互変換ダイアグラム (案)
Ruby における絵文字エンコーディング間の相互変換ダイアグラム (案)
 
Ruby の標準乱数生成器とその改善案
Ruby の標準乱数生成器とその改善案Ruby の標準乱数生成器とその改善案
Ruby の標準乱数生成器とその改善案
 
情報学特論#02
情報学特論#02情報学特論#02
情報学特論#02
 
情報学特論#01
情報学特論#01情報学特論#01
情報学特論#01
 
Ruby 拡張モジュール入門
Ruby 拡張モジュール入門Ruby 拡張モジュール入門
Ruby 拡張モジュール入門
 

5分で分かる Measure