We learned loops back in school. But enumerators and iterators are the next generation.
TL;DR: Don't use indices while iterating. Prefer Higher level collections.
Problems
Encapsulation
Declarativeness
Solutions
Favor foreach() or high order iterators
You will be able to use yield(), caches, proxies, lazy loading and much more when you hide your implementation details.
Sample Code
Wrong
for (i = 0; i < colors.count(), i++) {
print(colors[i]);
}
Right
foreach (color of colors) {
print(color);
}
//Closures and arrow functions
colors.foreach(color => print(color));
Detection
Linters can find this smell using regex.
There might be false positives. See exceptions below.
Exceptions
If the problem domain needs the elements to be bijected to natural numbers like indices, the first solution is adequate.
Remember all time to find real world analogies.
The One and Only Software Design Principle
Maxi Contieri ・ Oct 13 '20 ・ 5 min read
Tags
- Declarative
Conclusion
This kind of smell do not ring the bell to many developers because they think this is a subtlety.
Clean code is full of this few declarative things that can make a difference.
Relations
Code Smell 33 - Abbreviations
Maxi Contieri ・ Nov 24 '20 ・ 2 min read
More info
Credits
Photo by Elena Mozhvilo on Unsplash
If you get tired of writing for loops, take a break and continue later.
David Walker
Software Engineering Great Quotes
Maxi Contieri ・ Dec 28 '20 ・ 13 min read
Original twitter thread by @Matt Moll