新卒で入社した企業では20年物のソースコードが現役で動いていたりしました。しかも協力会社に丸投げした部分やインドにオフショアした部分などが入り混じってカオスとなっていました。エンジニアも玉石混在で、カオスに練度の低いエンジニアが保守拡張したりしてカオスがさらにカオスに。そんなソースコードには発狂しそうになるレガシーコード(一部ではウンコードと呼ぶ人もいる)が豊富に眠っていました。今回はレガシーコードの反面教師としてその具体例を挙げてみます。
レガシーコードの具体例
意図が分からない
if ( path != null ) { str = Path.Combine(path, fileName); } else { str = path + fileName; }
たぶんpathがnullでPath.Combineでクラッシュする不具合があったんでしょうね。それを修正した結果が上のコードになったのでしょう。pathがnullのときクラッシュすることはこれで回避できた(できてるこれ?)かもしれませんが、nullのときstrは本当に問題ないんですかね…。この不具合修正で新たな不具合を作っていそうです。