さんまがおいしい季節だねー(´・ω・`)

つ PL/SQL 識別子コンバータ

github,日記 — タグ: , , — さくら @ 2009/07/11 18:53

こんにちはこんにちは!

idesaku 様から早速お返事頂いたのでまたお返事w

線引きもクソもない。実際のところ読みやすいか読みにくいかという話ですらない。繰り返すが、UKTKKNSHINFなコードは読めないのだ。だから、そんなネーミングは”ひどすぎる”と評価してなんら問題はない。

苦労はしないにこしたことはない – idesaku blog

解釈が相対的か絶対的かの議論は平行線っぽいので、「UKTKKNSHINFなコードは読めない」ということでいいです。というのも、

そして、もともと読めないコードを読めるようにするためには、ご理解いただいているように、事前に”命名規約を覚える”などの準備をしなければならない。しかし、それは本来不要な作業だと思う。

似たようなことをはてブに書かれてた方もいらっしゃいますが、たぶんこの「命名規約を覚える」作業量の評価が根本的に違うような気がするからです。さくら的には命名規約を覚えることがプロジェクトの導入もしくは教育に占める割合は、プロジェクトの前提事項や問題領域を理解することにかかる量と比べ圧倒的に小さいので、命名規約を覚えることを省略したところで得るところが少ないのでどっちでもいんじゃない?って気がします。

そうした無駄な事前準備を行うことも仕事の範疇、大いに結構なことである。しかし、そうした無駄を場当たり的な人の努力で補って良しとする思考は常に間違っている。本来不要な作業なのだから、無くせるようにしていくべき。たとえ今は自分の努力/我慢で乗り切るしかないとしても、それを安易に許容すべきじゃない。ダメなものはダメというべき。

ダメなものの代替品が読めないコードを書くなルールなんでしょ?
読める/読めないが基準になると、俺は読めるから問題ねー、という人が出てくると思うけど。さくらみたいに慣れとかでそう言ってる人もいると思うけど、中にはそういったことを深く考えずに済ませたい人もいる訳で、このルールはそういう俺様ルールを適用したい人に優位に働くはず。「俺が読めるんだから問題無いだろ」と言う人に対して「読めねーから直せよ」と言ったところで水掛け論になるだけですから、直さずに済ませたかったらずっと読めると言いつづけておけばいいだけな訳で。

なんで主観をベースに置いた議論はあんまり建設的な結果にならないと思うので、UKTKKNSHINF コードを無くしたらどれぐらい生産性があがるのか、ちゃんと統計でも取った方がいいと思われです。

コンバータ

んで今日の本題はどっちかって言うとこっち。

それと。

これ、lex とかで字句解析プログラム作って置き換えちゃえば簡単に解決するじゃん。

ご意見ありがとうございます。検討してみます。

いーえどういたしまして。ついでに作ってみますたw

とりあえず http://github.com/sakuratan/UKTKKNSHINF/tree/masterconv/plsqlconv.l に PL/SQL の識別子コンバータのソースを置いてます。(ファイルを修正すると conv/plsqlconv.l のリンク先は内容が古くなるので、できれば http://github.com/sakuratan/UKTKKNSHINF/tree/master からアクセスしてもらった方がいいと思います。)

ビルドするには flex と c コンパイラが必要です。とりあえず Windows でもコンパイルできると思いますが、多少修正する必要があるかもしれません。ビルド方法については README とかソースツリーをご覧ください。

この識別子コンバータは、PL/SQL を字句レベルで認識し、タブ区切りテキストファイルで指定された変換ルールに従い、識別子を別の識別子に置き換えます。

例えば以下の形式で変換ルールを conv.txt に保存し (UKTKKNSHINF と uketuke_kinsi_joho の間はタブ)、

UKTKKNSHINF	uketuke_kinsi_joho

コンバータを実行すると PL/SQL ソース中の識別子 UKTKKNSHINF を uketuke_kinsi_joho に置き換えます。

$ plsqlconv conv.txt a.sql > b.sql

置換対象は識別子ですので、

select * from UKTKKNSHINF;
select * from UKTKKNSHINFTMP;

みたいなソースの場合、UKTKKNSHINF は uketuke_kinsi_joho に変換されますが、UKTKKNSHINFTMP は変換されず、変換結果は以下のようになります。

select * from uketuke_kinsi_joho;
select * from UKTKKNSHINFTMP;

同じルールで UKTKKNSHINFTMP も変換したい場合は適当にソースを改造してください。

PL/SQL の字句の定義はOracle Database PL/SQL言語リファレンス 11g リリース1(11.1) PL/SQL言語の基礎を参照しています。何かバグってたら適当に直してくださいませw

P.S.
解決法用意してあげたんだから、自分のプロジェクトで議論するぐらいはしないさいよね!

0 Comments »

コメントはまだありません。

この投稿へのコメントの RSS フィード。 TrackBack URI

コメントする

Copyright © 2017 さくらたんどっとびーず | powered by WordPress with Barecity