はじめまして、kaiba と申します。
ソフトウェアエンジニアはきっと誰もが穴があったら入りたくなるようなコードを書いた覚えがあるのではないでしょうか? まれに最初から 100 点の設計ができる人もいますが、僕もたくさんいわゆる「クソコード」を書いてきましたし、見ても来ました。 良くないコードとわかっていても直すことができず、良くないコードを更に良くないコードにしたこともありました。
そもそもコードが汚いと以下のような問題があります。
経験を積んでくると、よくあるパターンがいくつか見えてきました。 本書は僕が書いてきた・見てきた・聞いてきたプログラミングアンチパターンについて以下を紹介します。
僕自身まだまだアンチパターンを生み出す未熟者で、偉そうなことは言えません。
僕が大好きな本である「SQL アンチパターン」をリスペクトして、各章にアンチパターン名を付けながら、恐る恐る書いてみます。
マジックナンバーとは何かしらの意味がある数値です。 具体例を見てみます。
item.price = new_price * 1.1
item.status = 3
商品の価格に税込みの新しい価格を設定し、ステータスを 3 にしています。
価格に 1.1 をかける。 これは消費税の計算だとわかりそうですが、果たして 10 年後もこの数字は変わらないでしょうか? ステータス 3 は grep したり、ドキュメントを読んだりしないとわかりませんね。
以下の 2 点が問題です。
このコードを書いた当時は税金の計算をする箇所が一箇所で問題なかったのかもしれません。
しかし、税金の計算箇所は増えていくもので、税金が 15% になったときのことを考えてみます。
たくさんの場所で 1.1 もしくは 10 を使っていそうなので以下のように検索します。
不安なので tax
も検索しますか…
grep -R "1\.1" ./
grep -R "10" ./
grep -Ri "tax" ./\n
10 は他の場所でも使っていて、税金なのか人力でチェックする必要があります。 100%バグらずに直せるか問われると冷や汗が出てきます。