214
votes
How to write correct loops?
Test
No, seriously, test.
I've been coding for over 20 years and I still don't trust myself to write a loop correctly the first time. I write and run tests that prove it works before I suspect it ...
153
votes
Inside a for-loop, should I move the break condition into the condition field if possible?
Those two examples you gave are not functionally equivalent. In the original, the condition test is done after the "some other code" section, whereas in the modified version, it is done first, at the ...
123
votes
Is a while loop intrinsically a recursion?
Loops are very much not recursion. In fact, they are the prime example of the opposite mechanism: iteration.
The point of recursion is that one element of processing calls another instance of itself. ...
74
votes
How to write correct loops?
When programming it is useful to think of:
pre-conditions
post-conditions
variants
and invariants (of loops or types)
and when exploring uncharted territory (such as juggling with indices) it can be ...
63
votes
Declaring that a function never returns
This is one of those cases where infinite loops are so predominantly a bad idea that there's no real support/convention around using them.
Disclaimer
My experience is with C# (as is your code example, ...
56
votes
Foreach-loop with break/return vs. while-loop with explicit invariant and post-condition
This is easy.
Almost nothing matters more than clarity to the reader. The first variant I found incredibly simple and clear.
The second 'improved' version, I had to read several times and make sure ...
51
votes
Inside a for-loop, should I move the break condition into the condition field if possible?
I don't buy the argument that "it consumes 3 lines of code" and thus is bad. After all, you could just write it as:
if (condition) break;
and just consume one line.
If the if appears half way ...
49
votes
Inside a for-loop, should I move the break condition into the condition field if possible?
This sort of question has sparked debate almost as long as programming as been going. To throw my hat into the ring, I'd go for the version with the break condition and here's why (for this specific ...
45
votes
Declaring that a function never returns
This depends on the type system and the language.
Many languages have a type for this, for example never in TypeScript, Nothing in Scala and Kotlin, or Void in Haskell.
C has a _Noreturn function ...
43
votes
Inside a for-loop, should I move the break condition into the condition field if possible?
for loops are for iteration over something1 - they aren't just lol-let's-pull-some-random-stuff-from-the-body-and-put-them-in-the-loop-header - the three expressions have very specific meanings:
The ...
42
votes
Is a while loop intrinsically a recursion?
This depends on your point of view.
If you look at computability theory, then iteration and recursion are equally expressive. What this means is that you can write a function that computes something, ...
37
votes
Should <= and >= be avoided when using integers, such as in a For loop?
In curly-braced programming languages with zero-based arrays, it's customary to write for loops like this:
for (int i = 0; i < array.Length; i++) { }
This traverses all of the elements in the ...
37
votes
Is a while loop intrinsically a recursion?
Saying that X is intrinsically Y only makes sense if you've got some (formal) system in mind that you are expressing X in. If you define the semantics of while in terms of the lambda calculus, you ...
29
votes
Accepted
What is priming the pump? Sometimes called a priming read
This metaphor almost certainly refers to the practice of establishing the first conditional check in a while loop. If you don't do this, the loop won't work. It is a well-established pattern, and it ...
28
votes
How to write correct loops?
Use unit testing/TDD
If you really need to access sequences through a for loop, you can avoid the mistakes through unit testing, and especially test driven development.
Imagine you need to implement ...
26
votes
Accepted
Is copy and paste the head of for-loop (e.g.:for(let i=0;i<something.length;i++)) violating DRY principle?
The Don't Repeat Yourself (DRY) principle is easy to mindlessly over apply.
Keep in mind that the real sin isn't using copy and paste. It's spreading a design decision around in a way that makes it ...
23
votes
Clear way to skip the first element in an index based for loop
I hate both.
Who said you could use magic numbers? If you're going to start at an offset of 1 how about telling us WHY you're starting at an offset of 1. Adding an equally magic zero explains ...
19
votes
Accepted
Foreach-loop with break/return vs. while-loop with explicit invariant and post-condition
I think for simple loops, such as these, the standard first syntax is much clearer. Some people consider multiple returns confusing or a code smell, but for a piece of code this small, I do not ...
17
votes
Should <= and >= be avoided when using integers, such as in a For loop?
It doesn't matter.
But for the sake of the argument, let's analyse the two options: a > b vs a >= b.
Hang on! Those are not equivalent!
OK, then a >= b -1 vs a > b or a > b vs a >= ...
17
votes
Accepted
Best practice to "continue" from inside a nested loop?
Don't nest: convert to functions instead. And have those functions return true if they perform their action and the subsequent steps can be skipped; false otherwise. That way you completely avoid the ...
16
votes
How to write correct loops?
I agree with other people who say test your code. However, it's also nice to get it right in the first place. I have a tendency to get boundary conditions wrong in many cases, so I've developed ...
15
votes
Accepted
Does i in for loops means iteration or index?
It doesn't mean either.
It is a variable containing a number that can be used as an index value for an array item. This is evidenced by the fact that i is often used in the context of an array, as in ...
14
votes
Accepted
Is implementing IEnumerable required to use foreach on collections?
The official documentation looks straightforward to me:
The foreach statement repeats a group of embedded statements for each element in an array or an object collection that implements the System....
14
votes
Accepted
While loop without evaluating data twice
Near "Ideal World" Solution
The following is valid C#
public static void Main()
{
var i = 0;
string value;
while ((value = GetValue(i++)) != null)
{
DoSomethingWith(value);
...
13
votes
Is a while loop intrinsically a recursion?
The difference is the implicit stack and semantic.
A while loop that "calls itself at the end" has no stack to crawl back up when it's done. It's last iteration sets what state will be as it ends.
...
13
votes
Clear way to skip the first element in an index based for loop
Short answer: the first option is better.
The second option just adds noise. It is very unlikely that 0+1 helps the reader to understand that it could have been 0 but it is 1. Much more likely he ...
13
votes
Accepted
How to apply SRP in a loop where two things need to be done?
The SRP does not say a function should only do one thing. If that was the case you couldn't write an application or system which does more than one single thing!
What you should consider is: Will the ...
13
votes
Best practice to "continue" from inside a nested loop?
From a more bird view perspective, I would refactor the code so that it looks like this... (in pseudo code, it's too long ago I touched C++)
void filterStrings(sl)
{
/* Filter string list */
...
12
votes
How to write correct loops?
Off-by-one errors are one of the most common programming mistakes. Even experienced developers get this wrong sometimes. Higher level languages usually have iteration constructs like foreach or map ...
12
votes
Declaring that a function never returns
I will answer from the point of view of C++, which has not been addressed in other answer at the time of writing.
Since C++11, there is an attribute, noreturn, that you can use to signal that a ...
Only top scored, non community-wiki answers of a minimum length are eligible
Related Tags
loops × 154algorithms × 18
c# × 14
coding-style × 14
python × 13
javascript × 10
array × 10
java × 9
performance × 9
recursion × 9
c++ × 8
programming-practices × 7
c × 7
iterator × 6
control-structures × 6
terminology × 5
compiler × 5
optimization × 5
multithreading × 4
variables × 4
strings × 4
conditions × 4
design-patterns × 3
functional-programming × 3
refactoring × 3