WTF, I have never used nor seen “j.”
I don’t usually have to name these variables these days though. Pretty much everything I use has foreach or some functional programming type stuff.
And like that, the off-by-one mistakes disappear.
foreach is useful when you don’t need to know the index of something. If you do, conventional i, j, k, etc. are useful.
A lot of it depends what you’re doing (number crunching, for instance) or if you’re in a limited programming language (why won’t BASIC die already?) where parallel arrays are still a thing.
People who name iterators with one letter have no soul.
And people who iterate over 3D space using firstDimensionIndex, secondDimensionIndex, and thirdDimensionIndex instead of x, y, z have no sense 😜
A useful tip I picked up was to use ii
instead of j
for an inner loop. It’s far more distinct than j
.
If for some terrible reason you have even more inner loops you can easily continue the trend i
, ii
, iii
, iiii
, iiiii
- or iv
, v
if you’re feeling roman
When you have multiple indices you’re also bound to have multiple cardinals those indices count up to, say foo.length
and bar.length
, so foo_i
and bar_i
are perfectly legible and self-documenting. A bit Hungarian but Hungarian is good in small amounts. Unless you’re dealing with width
and height
in which case it’s x
and y
but it’s not that width_i
would be incomprehensible.
chuckles in Python
I’m honestly prefer short but (usually) complete words. Somewhere along the line I realized that being explicit really helps when you need to change it later.
due to convention everybody understands what i and j are, I don’t think they need longer names. If it’s something more complicated than a counter or index then maybe you should be using a foreach loop instead (if language supports it)
I generally use ‘count’ for a counter and ‘idx’ for index.
I’m not using C or Java languages though - if I were I would probably go with the more classic terse approach.
Also, if I’m reviewing a PR and I have to load more of the diff context to understand what a variable represents, then that variable has the wrong name.
Even as an embedded C developer I use “idx” and “count” instead of “i”. Not just because I’m a member of the “slightly longer but more descriptive names are better” gang, but also for searchability. If I’m trying to track down where an array is accessed in a loop, for example, “idx” is more likely to take me only to the results I’m looking for and not also the “i” in int8_t or whatever.