Upload
iwata-susumu
View
826
Download
1
Embed Size (px)
Citation preview
「範囲表記」な整数を配列で扱う
2013-02-23 Kansai.pm #15岩田 享 / issm
2013-02-23 Kansai.pm #15
自己紹介
背景
Array::RangedInt
SYNOPSIS
まとめ
アジェンダ
2013-02-23 Kansai.pm #15
自己紹介
背景
Array::RangedInt
SYNOPSIS
まとめ
アジェンダ
2013-02-23 Kansai.pm #15
おまえだれよ?
岩田 享 / issm(いわた)
http://blog.iss.ms/
@issm, qr/issmx{,2}/
Perl / CoffeeScript / 自転車
嗜む程度に
個人事業
とある「商品」を販売 → 発注 → 発送管理 などするためのシステムを開発するなど
2013-02-23 Kansai.pm #15
名古屋の方からきました(Nagoya.pm というものも存在しているらしいですよ)
2013-02-23 Kansai.pm #15
自己紹介
Textile記法
Text::Textile
拡張性について
応用
まとめ
アジェンダ
2013-02-23 Kansai.pm #15
本題
2013-02-23 Kansai.pm #15
自己紹介
背景
Array::RangedInt
SYNOPSIS
まとめ
アジェンダ
2013-02-23 Kansai.pm #15
自己紹介
背景
Array::RangedInt
SYNOPSIS
まとめ
アジェンダ
2013-02-23 Kansai.pm #15
Array::RangedInt
2013-02-23 Kansai.pm #15
とあるアプリケーションで何番が選択されているかを保持
選択されている番号のボタンをアクティヴに
2013-02-23 Kansai.pm #15
Array::RangedInt
2013-02-23 Kansai.pm #15
カテゴリに属するすべての番号が選択
→「このカテゴリのすべてを選択」ボタンをアクティヴに
とあるアプリケーションで
2013-02-23 Kansai.pm #15
Array::RangedInt
2013-02-23 Kansai.pm #15
商品の選択解除でボタンを非アクティヴに
→「このカテゴリのすべてを選択」ボタンを非アクティヴに
とあるアプリケーションで
2013-02-23 Kansai.pm #15
Array::RangedInt
2013-02-23 Kansai.pm #15
単品ごとの「選択」ボタンと「すべてを選択」ボタンとの整合性確保が必要
リスト・ハッシュでがんばろうとしたけど,カオス発生
「整数の範囲」を扱いたい
とあるアプリケーションで
2013-02-23 Kansai.pm #15
そのへんをなんとかするモジュールを書いてみた
2013-02-23 Kansai.pm #15
自己紹介
背景
Array::RangedInt
SYNOPSIS
まとめ
アジェンダ
2013-02-23 Kansai.pm #15
自己紹介
背景
Array::RangedInt
SYNOPSIS
まとめ
アジェンダ
2013-02-23 Kansai.pm #15
Array::RangedInthttps://github.com/issm/p5-Array-RangedInt
「『範囲表記』な整数」を要素にもち,ごにょごにょするためのモジュール
要素の例
1
2-5
-5:-2 ( -5--2 でも可)
2013-02-23 Kansai.pm #15
Array::RangedInt隣接する整数群は「範囲」としてまとめられる
(1, 2, 3, 4, 6, 8, 9, 10) -> (‘1-4’, 6, ’8-10’)
「範囲」を扱う特性上...
必ず順序付けされている
重複した値を持たない
2013-02-23 Kansai.pm #15
自己紹介
背景
Array::RangedInt
SYNOPSIS
まとめ
アジェンダ
2013-02-23 Kansai.pm #15
自己紹介
背景
Array::RangedInt
SYNOPSIS
まとめ
アジェンダ
2013-02-23 Kansai.pm #15
コンストラクタ->new( @args ) / ->parse( $text )
$ari = Array::RangedInt->new( 1, 3, ‘5-10’ )
$ari = Array::RangedInt->parse( ‘1,3,5-10’ )
1, 3, 5-10
2013-02-23 Kansai.pm #15
要素を追加する->add(@args)
$ari->add( 2, 15, ’21-25’ )
1, 2, 3, 5-10, 15, 21-25
2013-02-23 Kansai.pm #15
要素を追加する->add(@args)
$ari->add( 2, 15, ’21-25’ )
1, 2, 3, 5-10, 15, 21-25
1-3, 5-10, 15, 21-25
2013-02-23 Kansai.pm #15
要素を削除する->remove(@args)
$ari->remove( 3, 8, ‘18-22’ )
1-3, 5-10, 15, 21-253 8 18-20,21-22
2013-02-23 Kansai.pm #15
要素を削除する->remove(@args)
$ari->remove( 3, 8, ‘18-22’ )
1-2, 5-7, 9-10, 15, 23-25
1-3, 5-10, 15, 21-253 8 18-20,21-22
2013-02-23 Kansai.pm #15
shift!->shift()
$ari->shift()
1-2, 5-7, 9-10, 15, 23-25
2013-02-23 Kansai.pm #15
shift!->shift()
$ari->shift()
2, 5-7, 9-10, 15, 23-25
got: 1
1-2, 5-7, 9-10, 15, 23-25
2013-02-23 Kansai.pm #15
pop!->pop()
$ari->pop()
2, 5-7, 9-10, 15, 23-25
2013-02-23 Kansai.pm #15
pop!->pop()
$ari->pop()
2, 5-7, 9-10, 15, 23-24
got: 25
2, 5-7, 9-10, 15, 23-25
2013-02-23 Kansai.pm #15
含んでいる?->includes( @args )
$ari->includes( 2 ) # 1
$ari->includes( 2, 5, 7 ) # 1
$ari->includes( 2, 3, 4 ) # 0
$ari->includes( ‘5-7’, ’23-24’ ) # 1
$ari->includes( ‘5-7’, ’20-25’ ) # 0
2, 5-7, 9-10, 15, 23-24
2013-02-23 Kansai.pm #15
配列のサイズを取得する->size()
$ari->size() # 9
2, 5-7, 9-10, 15, 23-241 3 2 1 2
2013-02-23 Kansai.pm #15
文字列として->stringify()
$ari->stringify()
’2,5-7,9-10,15,23-24’
2013-02-23 Kansai.pm #15
配列として->dump()
my @a = $ari->dump() # as array
my $a = $ari->dump() # as arrayref
( 2, 5 .. 7, 9 .. 10, 15, 23 .. 24 )
[ 2, 5 .. 7, 9 .. 10, 15, 23 .. 24 ]or
2013-02-23 Kansai.pm #15
自己紹介
背景
Array::RangedInt
SYNOPSIS
まとめ
アジェンダ
2013-02-23 Kansai.pm #15
自己紹介
背景
Array::RangedInt
SYNOPSIS
まとめ
アジェンダ
2013-02-23 Kansai.pm #15
まとめArray::RangedInt ってモジュールを書いた
「範囲表記」な整数をそのまま扱う
範囲をともなう整数の集合の扱いを多少ラクに
とても素直なコーディング工夫の余地大あり
TODO
overload 使ってより配列っぽくできる?メモリサイズや速度の比較とか
2013-02-23 Kansai.pm #15
ご静聴ありがとうございました!https://github.com/issm/p5-Array-RangedInt
2013-02-23 Kansai.pm #15
Q?