ソースコードの可読性

いまだに「はてな記法一覧」を見ながらじゃないと日記を書けない Ewigkeit です。こんばんわ。
今日はソースコードの可読性について。あと、愚痴になります。


私は仕事のポジション上、担当するシステムに対して修正が入った場合、ほぼ毎回ソースコードレビュー要員として参加させられています。
レビュー対象となるソースを書いた人は、新卒の1, 2年生や業務委託の方です。ちなみに私は新卒3年生です。
新卒3年生でソースコードレビュー要員ってどうなんだ・・・とか思いつつレビューはしっかりこなしてはいます。


が、毎回思うんです。
ソースコードが読みづらい。
変数名がおかしいとか、メソッド名がおかしいとか、そんなチャチなもんじゃない。
変数定義せずにメソッドのシグニチャに直接計算して渡したり、ひどい場合はインデントが崩れてたり。
こんなコードを読まされると頭痛がします。
かといって逐一指摘していたら、テストをやり直させることになるわリリースが遅れる原因にもなります。
それに加えて、新卒3年生といえど担当メンバーの中では、私が最年少なんですよね。
ちょっと強く言いにくい。なんとなく。


どんなコードを読まされるかというと、たとえば下記のようなソース。
あ、ちなみに Java 1.4 なので、Generics とかは無いですよ。

Map map = dao.getDetail();

int rows = dao.insertData("foo", "bar",
        ((BigDecimal) map.get("column1")).add((BigDecimal) map.get("column2")).multiply(new BigDecimal("-1")),
        ((BigDecimal) map.get("column3")).add(new BigDecimal("1")),
        ((BigDecimal) map.get("column4")).substract((BigDecimal) map.get("column5")),
        node);

ぱっと見ただけじゃ何がなんやら、さっぱりわからない。
さすがにこれはないわと思い、直前で何を示す数値なのかがわかる変数を定義して書き直した方がいいのでは、と指摘したところ、
「ここ以外でその値は使わないし、それにたくさん変数宣言してたら逆にわかりづらいからいやです」
とか言われた。


この人だけではないんですが、よくレビューをやってると変な書き方をしているところを見つけます。
何故そんな書き方にしたのか聞いてみると、どっかからのコピペだったり、上記のように変な信念を持っていたり。
そんなときは毎回思うんですよ。
ちゃんとソース理解しながらコピペしているのか。
どうして可読性を無視するのか。
読みづらいソースコードは、障害が発生した場合の調査の際、追いづらいし正直イライラしてしまう。
書いたときはいいかもしれないけど、後のことを考えていないんじゃないだろうか。


かといって、後で自分が勝手に直そうかと思っても、再テストしなくちゃいけなくなるし。
その場できつく言った方がいいのかなぁ。