第1回目は,
DSL概要
DSL
今回の連載では,
DSLの必要性
なぜ,
Ruby on Railsの登場以降,
DSLは,
メタプログラミングとは,
ロジックを直接コーディングするのではなく, あるパターンをもったロジックを生成する高位ロジックを定義する方法のこと。主に対象言語に埋め込まれたマクロ言語によって行われる。
wikipedia: メタプログラミングより引用
メタ
(meta-) とは, 「高次な―」 「超―」 「―間の」 「―を含んだ」 「―の後ろの」 等の意味の接頭語。ギリシャ語から。
wikipedia: メタより引用
メタプログラミングについて
実際に例を挙げてメタプログラミングの説明をします。
CSV
CSVファイルの仕様は,
リスト 内部DSLの利用例
attr_reader :id, :age
attr_writer :name
attr_accessor :color
(1) 一般的なプログラム:
- a.メンバ変数に値を保持する方法
- 処理 :CSVの列名と一致するメンバ変数に,
取得したデータを設定する。 - 問題点:メンバ変数である,
「id, first_ name, last_ name, email」 をハードコーディングすることになるため, 列の増減, 列名の変更がある度にプログラムを修正する必要がある。汎用性に欠け, ある特定のCSVファイルの読み込みしか出来ない。
- 処理 :CSVの列名と一致するメンバ変数に,
- b.ハッシュ
(連想配列) に値を保持する方法 - 処理 :CSVの列名をキー
(文字列型) にし, 値をペアにして値を保持する。 - 問題点:プログラムで自動的にキーを付け,
値をペアにして格納しているので, 一見良さそうですが, 値を取得するときにハッシュのキーが文字列であるため, 要素名として直接データにアクセスすることができない, という問題がある。
- 処理 :CSVの列名をキー
(2) メタプログラミング:
一般的なプログラムでは実現することができなかった次の2つの点を実現することができます。
- a.プログラムの再利用
- b.データを自然な形で扱えるようにする
つまり,
まず,
しかし,
この例を作る際に参考にしたのが,