42
「範囲表記」な整数を 配列で扱う 2013-02-23 Kansai.pm #15 岩田 享 / issm

2013 02-23 Kansai.pm #15 LT

Embed Size (px)

Citation preview

Page 1: 2013 02-23 Kansai.pm #15 LT

「範囲表記」な整数を配列で扱う

2013-02-23 Kansai.pm #15岩田 享 / issm

Page 2: 2013 02-23 Kansai.pm #15 LT

2013-02-23 Kansai.pm #15

自己紹介

背景

Array::RangedInt

SYNOPSIS

まとめ

アジェンダ

Page 3: 2013 02-23 Kansai.pm #15 LT

2013-02-23 Kansai.pm #15

自己紹介

背景

Array::RangedInt

SYNOPSIS

まとめ

アジェンダ

Page 4: 2013 02-23 Kansai.pm #15 LT

2013-02-23 Kansai.pm #15

おまえだれよ?

岩田 享 / issm(いわた)

http://blog.iss.ms/

@issm, qr/issmx{,2}/

Perl / CoffeeScript / 自転車

嗜む程度に

個人事業

とある「商品」を販売 → 発注 → 発送管理 などするためのシステムを開発するなど

Page 5: 2013 02-23 Kansai.pm #15 LT

2013-02-23 Kansai.pm #15

名古屋の方からきました(Nagoya.pm というものも存在しているらしいですよ)

Page 6: 2013 02-23 Kansai.pm #15 LT

2013-02-23 Kansai.pm #15

自己紹介

Textile記法

Text::Textile

拡張性について

応用

まとめ

アジェンダ

Page 7: 2013 02-23 Kansai.pm #15 LT

2013-02-23 Kansai.pm #15

本題

Page 8: 2013 02-23 Kansai.pm #15 LT

2013-02-23 Kansai.pm #15

自己紹介

背景

Array::RangedInt

SYNOPSIS

まとめ

アジェンダ

Page 9: 2013 02-23 Kansai.pm #15 LT

2013-02-23 Kansai.pm #15

自己紹介

背景

Array::RangedInt

SYNOPSIS

まとめ

アジェンダ

Page 10: 2013 02-23 Kansai.pm #15 LT

2013-02-23 Kansai.pm #15

Array::RangedInt

Page 11: 2013 02-23 Kansai.pm #15 LT

2013-02-23 Kansai.pm #15

とあるアプリケーションで何番が選択されているかを保持

選択されている番号のボタンをアクティヴに

Page 12: 2013 02-23 Kansai.pm #15 LT

2013-02-23 Kansai.pm #15

Array::RangedInt

Page 13: 2013 02-23 Kansai.pm #15 LT

2013-02-23 Kansai.pm #15

カテゴリに属するすべての番号が選択

→「このカテゴリのすべてを選択」ボタンをアクティヴに

とあるアプリケーションで

Page 14: 2013 02-23 Kansai.pm #15 LT

2013-02-23 Kansai.pm #15

Array::RangedInt

Page 15: 2013 02-23 Kansai.pm #15 LT

2013-02-23 Kansai.pm #15

商品の選択解除でボタンを非アクティヴに

→「このカテゴリのすべてを選択」ボタンを非アクティヴに

とあるアプリケーションで

Page 16: 2013 02-23 Kansai.pm #15 LT

2013-02-23 Kansai.pm #15

Array::RangedInt

Page 17: 2013 02-23 Kansai.pm #15 LT

2013-02-23 Kansai.pm #15

単品ごとの「選択」ボタンと「すべてを選択」ボタンとの整合性確保が必要

リスト・ハッシュでがんばろうとしたけど,カオス発生

「整数の範囲」を扱いたい

とあるアプリケーションで

Page 18: 2013 02-23 Kansai.pm #15 LT

2013-02-23 Kansai.pm #15

そのへんをなんとかするモジュールを書いてみた

Page 19: 2013 02-23 Kansai.pm #15 LT

2013-02-23 Kansai.pm #15

自己紹介

背景

Array::RangedInt

SYNOPSIS

まとめ

アジェンダ

Page 20: 2013 02-23 Kansai.pm #15 LT

2013-02-23 Kansai.pm #15

自己紹介

背景

Array::RangedInt

SYNOPSIS

まとめ

アジェンダ

Page 21: 2013 02-23 Kansai.pm #15 LT

2013-02-23 Kansai.pm #15

Array::RangedInthttps://github.com/issm/p5-Array-RangedInt

「『範囲表記』な整数」を要素にもち,ごにょごにょするためのモジュール

要素の例

1

2-5

-5:-2 ( -5--2 でも可)

Page 22: 2013 02-23 Kansai.pm #15 LT

2013-02-23 Kansai.pm #15

Array::RangedInt隣接する整数群は「範囲」としてまとめられる

(1, 2, 3, 4, 6, 8, 9, 10) -> (‘1-4’, 6, ’8-10’)

「範囲」を扱う特性上...

必ず順序付けされている

重複した値を持たない

Page 23: 2013 02-23 Kansai.pm #15 LT

2013-02-23 Kansai.pm #15

自己紹介

背景

Array::RangedInt

SYNOPSIS

まとめ

アジェンダ

Page 24: 2013 02-23 Kansai.pm #15 LT

2013-02-23 Kansai.pm #15

自己紹介

背景

Array::RangedInt

SYNOPSIS

まとめ

アジェンダ

Page 25: 2013 02-23 Kansai.pm #15 LT

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

Page 26: 2013 02-23 Kansai.pm #15 LT

2013-02-23 Kansai.pm #15

要素を追加する->add(@args)

$ari->add( 2, 15, ’21-25’ )

1, 2, 3, 5-10, 15, 21-25

Page 27: 2013 02-23 Kansai.pm #15 LT

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

Page 28: 2013 02-23 Kansai.pm #15 LT

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

Page 29: 2013 02-23 Kansai.pm #15 LT

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

Page 30: 2013 02-23 Kansai.pm #15 LT

2013-02-23 Kansai.pm #15

shift!->shift()

$ari->shift()

1-2, 5-7, 9-10, 15, 23-25

Page 31: 2013 02-23 Kansai.pm #15 LT

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

Page 32: 2013 02-23 Kansai.pm #15 LT

2013-02-23 Kansai.pm #15

pop!->pop()

$ari->pop()

2, 5-7, 9-10, 15, 23-25

Page 33: 2013 02-23 Kansai.pm #15 LT

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

Page 34: 2013 02-23 Kansai.pm #15 LT

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

Page 35: 2013 02-23 Kansai.pm #15 LT

2013-02-23 Kansai.pm #15

配列のサイズを取得する->size()

$ari->size() # 9

2, 5-7, 9-10, 15, 23-241 3 2 1 2

Page 36: 2013 02-23 Kansai.pm #15 LT

2013-02-23 Kansai.pm #15

文字列として->stringify()

$ari->stringify()

’2,5-7,9-10,15,23-24’

Page 37: 2013 02-23 Kansai.pm #15 LT

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

Page 38: 2013 02-23 Kansai.pm #15 LT

2013-02-23 Kansai.pm #15

自己紹介

背景

Array::RangedInt

SYNOPSIS

まとめ

アジェンダ

Page 39: 2013 02-23 Kansai.pm #15 LT

2013-02-23 Kansai.pm #15

自己紹介

背景

Array::RangedInt

SYNOPSIS

まとめ

アジェンダ

Page 40: 2013 02-23 Kansai.pm #15 LT

2013-02-23 Kansai.pm #15

まとめArray::RangedInt ってモジュールを書いた

「範囲表記」な整数をそのまま扱う

範囲をともなう整数の集合の扱いを多少ラクに

とても素直なコーディング工夫の余地大あり

TODO

overload 使ってより配列っぽくできる?メモリサイズや速度の比較とか

Page 41: 2013 02-23 Kansai.pm #15 LT

2013-02-23 Kansai.pm #15

ご静聴ありがとうございました!https://github.com/issm/p5-Array-RangedInt

Page 42: 2013 02-23 Kansai.pm #15 LT

2013-02-23 Kansai.pm #15

Q?