C言語にはプリプロセッサ処理されるマクロ機能があります。
単純な字面の置換なので、副作用が伴いますが、便利な機能で、お気に入りでした。
(*)入門書などで、副作用のことが強調されがちなので、必要以上に恐怖感を持って、マクロを使うのを嫌がる人かいました。言語入門書は影響が大きいので書き方は難しいなぁと思うのです...脱線。
#define MAX(x,y) (x>y?x:y) のような感じです。
ところが、C#/VBやスクリプト等で、プリプロセッサ機能を持つ言語を私は知りません。
既存のシステムの中には、同じデータ構造でテーブル名が異なる設計のシステムが有ったりします。設計に難があるか、テーブル設計時に解決すべき問題の気もしまが、それは不問にします。
日々の売上は売上トランに入るのですが、締め終了後は TABLE名= 売上200808 のように年月別にtableに格納されます。(設計の是非は突っ込まないでね。)
当然集計などのSQL文は、煩雑になります。
select * from 売上200808
union all
select * from 売上200807
union all
select * from 売上200806
なんてのもでてくるわけて....www
”Table名をパラメータ化できれぱいいな”、と思うのですが、これは仕様上無理な話。
そこで
#define SelectTBL(yyyy,mm) (select * from 売上yyyymm)
というマクロが欲しいと思うのです。
実装上の逃げとして
SQL= "select * from $売上"
SQL= SQL.Replace("$売上", "売上200807")
というハードコーディングしているようですが、スッキリしない。.....
上記の例は、テーブル設計に起因する部分が多いので、例としては不味いのですが、プリプロセッサ処理可能ならば、は何かと便利な局面は多いと思います。
なぜ搭載されないのだろう。
「副作用を嫌がった」だとしたら..開発者を低くみられている気がするし。
マクロで記述すると、見通しや可読性が落ちるというのなら、VB構文の放置が理解出来ない。
VB構文を許すのならマクロを搭載してもいいのでは? と思います。
なにか、見えないとろこで、不具合が生じたりするのだろうか。