2013 02-23 Kansai.pm #15 LT

Preview:

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?

Recommended