| ▲ | DanHulton 2 hours ago |
| Xyz makes sense because that is what those axes are literally labeled, but ijk I will rail against until I die. There's no context in those names to help you understand them, you have to look at the code surrounding it. And even the most well-intentioned, small loops with obvious context right next to it can over time grow and add additional index counters until your obvious little index counter is utterly opaque without reading a dozen extra lines to understand it. (And i and j? Which look so similar at a glance? Never. Never!) |
|
| ▲ | jonahx an hour ago | parent | next [-] |
| > but ijk I will rail against until I die. > There's no context in those names to help you understand them, you have to look at the code surrounding it. Hard disagree. Using "meaningful" index names is a distracting anti-pattern, for the vast majority of loops. The index is a meaningless structural reference -- the standard names allow the programmer to (correctly) gloss over it. To bring the point home, such loops could often (in theory, if not in practice, depending on the language) be rewritten as maps, where the index reference vanishes altogether. |
| |
| ▲ | vilos1611 an hour ago | parent [-] | | I respectfully disagree. The issue isn't the names themselves, it's the locality of information. In a 3-deep nested loop, i, j, k forces the reader to maintain a mental stack trace of the entire block. If I have to scroll up to the for clause to remember which dimension k refers to, the abstraction has failed. Meaningful names like row, col, cell transform structural boilerplate into self-documenting logic. ijk may be standard in math-heavy code, but in most production code bases, optimizing for a 'low-context' reader is not an anti-pattern. | | |
| ▲ | jonahx 41 minutes ago | parent [-] | | If the loop is so big it's scrollable, sure use row, col, etc. That was my "vast majority" qualifier. For most short or medium sized loops, though, renaming "i" to something "meaningful" can harm readability. And I don't buy the defensive programming argument that you should do it anyway because the loop "might grow bigger someday". If it does, you can consider updating the names then. It's not hard -- they're hyper local variables. | | |
| ▲ | vilos1611 10 minutes ago | parent [-] | | In a single-level loop, i is just an offset. I agree that depending on the context (maybe even for the vast majority of for loops like you're suggesting) it's probably fine. But once you nest three deep (as in the example that kicked off this thread), you're defining a coordinate space. Even in a 10-line block, i, j, k forces the reader to manually map those letters back to their axes. If I see grid[j][i][k], is that a bug or a deliberate transposition? I shouldn't have to look at the for clause to find out. |
|
|
|
|
| ▲ | kaibee 2 hours ago | parent | prev [-] |
| ijk are standard in linear algebra for vector components. > (And i and j? Which look so similar at a glance? Never. Never!) This I agree with. |