ハードコーディング

元々ハードコーディングとは「要件を聴いてその場でコードを書き起こす」ことだったが、
※そんなことは数十年前ならよくあったことだ。Windowsのアプリでもね。
今ではなんのこととはない、プログラムに住所とか名前なんかのデータをそのまま載せているプログラムをハードコーディングと云うらしい。
なぜハードなのかというと、
private static final String NAME=”*名前*”;
と書かないで、何度も”*名前*”と書き散らすと後で”名前”に変わったら修正が面倒だ(=ハードな仕事)というのだ。
どんだけ仕様が変貌するんだろう。すでにコード化した後なのに。ま、そこは流用の場合と注釈が入る。
ところが、流用できるJavaコードなんて一度も見たことが無い。(※サンプルを含む)
というのもJavaのソースの書き方がさくさくと流儀が変わるので、3年前のソースは見るに堪えないなんてこともよくあるから、
土台、流用と云っても、隣の奴が先にコードしたものをコピペしたい!というのが本音。他力本願の権化といっていい考え方である。
 
さて、古いあいまいな記憶を手繰り寄せると、もともとプロパティはBeanの原型で処理はなく固定のデータを記述したものだった。そうクラスを作って、個別にGetterを書くのも面倒なので名前=値を列挙したものだ。でもjarファイルの外に配置したい場合もあるので、プロパティファイルをロードする仕組みが必要になり、データを取るたびに毎回getProperty(“NAME”)と毎回書くようになったのだが、全くの蛇足にしか見えない。

そこまでやっても”NAME”はハードコーディングのままなのが何とも情けない。

そこで、private static final String KEYWORD_NAME=”NAME”; を集めたConstのみのクラスを作り、=xxx.getProperty(xxxConst.KEYWORD_NAME) と書く方がマシだったりする。
そうすると、Constクラス+プロパティファイルのペアになり、これだったら、C言語の様なヘッダーファイルの方が数段マシだったりする。(大笑
しかし、意地でも昔には戻るつもりはないらしい。過去は否定するものでしかなく、温故知新なんてありえないと思っているようだ。
確かにその考えは正しい。なぜなら、いつまでもJavaはVer2.xになれないまま、1.7まで変貌を遂げているのだから。
但し、それはJavaの世界でしか通用しない。
更に云えば、
private static final String LINE1=”——————————-切り取り線——————————-”
private static final String LINE2=”名前:【${NAME}】 ”
private static final String LINE3=”住所:【${ADDRESS}】”
private static final String LINE4=”——————————-切り取り線——————————-”
などは、ソースやプロパティより、Javaベースでいいから既存のテキスト出力のレポートライターを使った方がいいハズだ。
このような使い方は下手だし、なんでもJavaコードで書こうとするところが、頭でっかちな気がしてしょうがない。
というより、開発環境=Eclipse+WEBサーバーしか知らないのではないのか?と思ってしまう。
Eclipseにもビジネス用のレポートライターのプラグインが入っているし、WEBサーバーで利用できように配慮もなされている。
 
長くなってしまったが、ハードコーディングかどうかは、
流用するには、

・同じ修正を何度も繰り返さないといけない扱いにくいソースだった。

・全部見直さないとどうなっているのか皆目見当が付かないソースだった。

の2点で判断すべきで、

複雑さやリテラルや数値が散乱具合で

大雑把に評価することは何も意味はないのだ。

もっと、云ってしまえば、

流用できなくて良いものまで流用できるようなコードにするのは全くの無駄で、これは言い逃れ様がない。

どの程度の流用を想定しているのか、ということをはっきりさせておかないと、上記のどれか一つの方法に強引に決めてしまうような間違いをしてしまう。
また、複雑度を下げるため、yaccパーサーが吐き出した様な条件式と足し算、引き算で何か意味深な結果を生み出すコードは何をしたいのか目的をまとめて仕様書を書き起こすべきものだが、その辺は皆無である。その辺はなんで仕様書が必要なのか理解していないのではないかと思われる。
 
実例を挙げると、消費税を「5%」とハードコーディングしておけば、美味しい商売か?、否か?で判断すべきなのだ。
結果はどうなるかはその時次第なので、

ハードコーディングしたせいで、8%、10%と変わっていくときに、とんでもない費用がかかるのか?

ハードコーディングしたせいで、8%、10%と変わっていくことで、パッケージがいっぱい売れるのか?

どっちに転がるのかは予想してもあんまり意味が無い。
 
つまり、
ハードコーディングとは
「そんなこと!常識じゃん!」とか「仕様書に書くべきことではない」と云ってる輩が真の原因で、
その予想が外れ散々な結果になったソースのことなのである。
 
そして、大半は散々な結果になることは明白だ。
 
なぜなら、競馬のたった2-3個の数字のまともに当らないのが普通で、それが人間だからだ。
何年も先にどう流用されるのか予想すること。その時の人間がどんな思いで使うのかを予想することは、競馬の難易度を遥かに超えるのは当然だと思うんだけどね?




コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA