演算子選択のための流れ図

この記事は Asakusa Framework Advent Calendar 2013 の23日目の記事として書いています. なお, この題材を選んだのは 昨日の hishidama さんの記事 が書かれるよりも前なのですが, 期せずして続き物のようになっています. 単なる偶然なので悪しからず.

Asakusa Framework にある DSL で一番細かいものが演算子です. Asakusa Framework では, 行える操作を演算子に制限することで様々な恩恵を受けています. 例えば, Hadoop バッチの設計のしやすさだったり, Ashigel コンパイラによる最適化だったり. その代償として「全ての処理を演算子で書かなければならない」という制限を受けます. 特に, 今したい処理に対してどの演算子を使えば良いかは, 最初は選択基準が分からず悩むと思います. (実際, 自分も悩みました)

参照: 演算子リファレンス http://docs.asakusafw.com/0.5.2/release/ja/html/dsl/operators.html

参照: Asakusa DSL の内部 http://www.slideshare.net/ashigeru/inside-of-asakusa-dsl

演算子一覧

そこで, 取っ掛かりの段階での演算子を選ぶヒントを表にまとめてみました.

https://www.icloud.com/iw/#numbers/BAL-GN_wp9y9gH1LgZWBQqpYTo06R-tO752E/%E6%BC%94%E7%AE%97%E5%AD%90%E4%B8%80%E8%A6%A7.numbers

演算子の一覧表が見れると思います. (見れない場合は @cocoatomo まで連絡ください) なお, この表では主要な演算子だけを並べ, 特殊演算子や補助演算子については扱っていません.

この表は以下のように使うことを想定しています.

  1. 行いたい処理を「データの変換」という観点でまとめます

    IPO 図のようなものでデータの流れに着目して整理すると良いでしょう

    処理が複雑な場合は複数の処理に分割します

  2. 個々の処理の入出力の型と個数を確認します

    処理の性質から, ふさわしい演算子を選択する

表を流れ図に

しかし, この表では演算子を選ぶ作業が面倒なので, 演算子の選択手順を流れ図にしてみました.

菱形の図形で聞かれている質問に答えていくと, 使いたい演算子 (長円の図形) に辿り着くようになっています.

この図で出てくる用語の「入力」や「出力」は演算子に結線される (データの流れ道の) 線のことであり, その「数」とは結線の本数のことです.

その線を伝って流れてくる個々のデータのことをインスタンスと読んでいます.

演算子の引数の型は Model クラスだったり List<Model> クラスだったりしますが, 「入力の型」「出力の型」と言ったときは Model クラスのことを指し, インスタンスと言う場合は Model クラスのインスタンスのことを指しています.

マスタとトランは, トランを中心に考えてそこにマスタを当てていく関係になっています. トランのインスタンス数は処理の前後では変化しません.

追加の引数が渡せるかどうかなどについては触れていません. ここに載っていない情報は本家のページ (演算子リファレンス) を参照してください.

これが絶対というつもりもなく,「私の選択基準を図にしたらこうなった」というもので, 明日以降の私が一番喜ぶ類のものだと思いますが, せっかくなのでクリスマスプレゼントとして公開しておきます. (拡大して見るには, 画像をクリックして画像だけのページに遷移してください)

演算子の選択手順

演算子の選択手順

さて, アドベントカレンダーも残すところ後2日. どんな記事が出てくるのでしょうか.