プログラミング言語やフレームワークが変わっても、ここ10年変わっていない(通用する)のではないかと感じるアンチパターンがあります。
もしかすると次の10年も通用するかもしれません…。
その1:再帰処理
再帰処理は、関数が自分自身を呼び出すことで処理を行う手法です。
しかし、スタックが深くなっていき、メモリが枯渇する恐れがあるため、注意が必要です。
スタックオーバーフロー:
再帰が深くなりすぎると、スタックメモリが不足し、プログラムがクラッシュする可能性があります。
パフォーマンスの低下:
再帰処理は、関数呼び出しのオーバーヘッドが積み重なるため、ループ処理に比べてパフォーマンスが低下することがあります。
再帰処理を使用する際は、末尾再帰最適化やメモ化などのテクニックを活用して、パフォーマンスとメモリ使用量を改善することが重要です。
その2:for文内で元の配列の要素数を増減させる
for文内で元の配列の要素数を増減させることは、無限ループを引き起こす可能性があるため、避けるべきです。
無限ループ:
配列の要素数が変わることで、ループの終了条件が満たされず、無限ループに陥ることがあります。
予期しない動作:
配列の要素数が変わることで、ループ内の処理が予期しない動作をする可能性があります。
配列の要素を操作する際は、新しい配列を作成して操作するか、イテレータを使用することで、元の配列に影響を与えないようにすることが推奨されます。
その3:deep copy(clone)していない
オブジェクトをコピーする際に、deep copy(深いコピー)を行わないと、コピー元オブジェクトにアクセスしてしまい、データ破壊を引き起こす可能性があります。
参照の共有:
浅いコピー(shallow copy)では、コピー元とコピー先が同じオブジェクトを参照するため、一方の変更が他方に影響を与えます。
データの一貫性の欠如:
深いコピーを行わないと、データの一貫性が保たれず、予期しないバグが発生する可能性があります。
オブジェクトをコピーする際は、deep copyを行うことで、コピー元とコピー先が独立したオブジェクトとなり、データの一貫性を保つことができます。