コード匂い111 -横断している間、コレクションを修正すること
7297 ワード
追跡中のコレクションの変更は予期しないエラーにつながる可能性があります
問題 予想外の結果 並行性問題
解決策 コレクションの変更を避ける コピーを作る
文脈
我々は、コレクションをコピーすることは高価である偏見で我々の解決を最適化します.
これは、中小規模のコレクションには該当しません.
言語は多くの異なる方法でコレクションを繰り返します.
それらを変更することは一般に安全ではない.
サンプルコード
間違い
右
検出
[ X ]半自動
多くの言語は、コンパイル時と実行時の両方を制御します.
タグ 失敗する
結論
これは私たちが最初のコースで学ぶものです.
これは、業界と現実世界のソフトウェアの多くが発生します
関係
詳しい情報 Stack Overflow
クレジット
写真でChristine Roy on Unsplash
バグはバグです.バグを使用してコードを書く.ランタイムセーフの意味で安全な言語であるなら、オペレーティングシステムは、危険な方法でバッファオーバーフローを行う代わりにクラッシュします.
ケントンプソン
この記事はCodesmellシリーズの一部です.
TL;DR: Do not modify collections while traversing them
問題
解決策
文脈
我々は、コレクションをコピーすることは高価である偏見で我々の解決を最適化します.
これは、中小規模のコレクションには該当しません.
言語は多くの異なる方法でコレクションを繰り返します.
それらを変更することは一般に安全ではない.
サンプルコード
間違い
Collection<Integer> people = new ArrayList<>();
//here we add elements to the collection...
for (Object person : people) {
if (condition(person)) {
people.remove(person);
}
}
//We iterate AND remove elements
右
Collection<Integer> people = new ArrayList<>();
//here we add elements to the collection...
List<Object> iterationPeople = ImmutableList.copyOf(people);
for (Object person : iterationPeople) {
if (condition(person)) {
people.remove(person);
}
}
//We iterate a copy and remove from original
coll.removeIf(currentIndex -> currentIndex == 5);
//Or use language tools (if available)
検出
[ X ]半自動
多くの言語は、コンパイル時と実行時の両方を制御します.
タグ
結論
これは私たちが最初のコースで学ぶものです.
これは、業界と現実世界のソフトウェアの多くが発生します
関係
Code Smell 53 - Explicit Iteration
Maxi Contieri ・ Jan 5 '21 ・ 2 min read
#codenewbie
#webdev
#cleancode
#tutorial
詳しい情報
クレジット
写真でChristine Roy on Unsplash
バグはバグです.バグを使用してコードを書く.ランタイムセーフの意味で安全な言語であるなら、オペレーティングシステムは、危険な方法でバッファオーバーフローを行う代わりにクラッシュします.
ケントンプソン
Software Engineering Great Quotes
Maxi Contieri ・ Dec 28 '20 ・ 13 min read
#codenewbie
#programming
#quotes
#software
この記事はCodesmellシリーズの一部です.
How to Find the Stinky parts of your Code
Maxi Contieri ・ May 21 '21 ・ 4 min read
#codenewbie
#tutorial
#codequality
#beginners
Reference
この問題について(コード匂い111 -横断している間、コレクションを修正すること), 我々は、より多くの情報をここで見つけました https://dev.to/mcsee/code-smell-111-modifying-collections-while-traversing-5aacテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol