4 ms·
I generally find if you need multi letter variable names it means your function or scope is to long, or manipulating to many things. It's a nice little red flag
by zbobet2012 8y ago
I generally find if you need multi letter variable names it means your function or scope is to long, or manipulating to many things. It's a nice little red flag for me.
Up to four or five single letter variables is pretty trivial to remember. Especially when three of those are i, j, and k. More than 6 or 7 rapidly becomes painful. But if you are manipulating 6 or 7 variables _in the same scope_ you are doing to much.
I also agree with Pikes comments about typography here: http://doc.cat-v.org/bell_labs/pikestyle http://doc.cat-v.org/bell_labs/pikestyle
- pcwalton 8y agoI could not disagree more. When I'm skimming code, I want to immediately know what a variable means. I don't want to go cross-reference elsewhere.
- zbobet2012 8y agoIf you have to go "cross-reference" elsewhere you are modifying something "to far away" from you. That's a giant sign of spaghetti code. Also names vary with there contextual scope. Larger scopes mean longer names generally. Russ Cox gives a succinct description here: https://research.swtch.com/names https://research.swtch.com/names A name's length should not exceed its information content. For a local variable, the name i conveys as much information as index or idx and is quicker to read. Similarly, i and j are a better pair of names for index variables than i1 and i2 (or, worse, index1 and index2), because they are easier to tell apart when skimming the program. Global names must convey relatively more information, because they appear in a larger variety of contexts. Even so, a short, precise name can say more than a long-winded one: compare acquire and take_ownership. Make every name tell. Variables should generally have short scope (we don't want a lot of global, or even package level variables). So _variable names_ in particular should be short.
- bpicolo 8y ago> For a local variable, the name i conveys as much information as index or idx and is quicker to read This is only true because i is a specific, common abbreviation for index. When writing arbitrary glue code, a single letter variable would be a meaningless abbreviation without shared context. If you encounter "i" and it doesn't mean "index of a for loop", you're going to be taking additional time parsing meaning.
- 12298765 8y agoAn example where I disagree, and use 1-letter names daily: arrow functions in both Java and JS. `usersList.stream().forEach(u -> someSet.add(u))` It's immediately obvious that u is a user in usersList. I realize that it's debatable if u is really more readable than spelling out user, but I prefer it, and I don't think anyone is going to be confused by it. If the chain does get really long, also, I will spell it out explicitly.
- irishsultan 8y agoShouldn't you be able to write that as `usersList.stream().forEach(someSet.add)` For Javascript at least that would work.
- leshow 8y agoI haven't written Java since like java 5, but I believe java 8 has syntax for this as well: `usersList.stream().forEach(someSet::add)`
- bpicolo 8y agoSure, for a lambda I think it’s arbitrary. For larger functions / classes it matters
- arvinsim 8y agoI disagree. I am pretty sure that there's some code that is short and simple but you want to have descriptive names anyway like financial related computations.
- coldtea 8y ago>I generally find if you need multi letter variable names it means your function or scope is to long, or manipulating to many things. It's a nice little red flag for me. Many times your function should be longer, rather than shorter. Short methods and functions used just for the sake of being short just move the complexity of understanding in the interaction between them, making logic harder to follow an algorithm when it could have been all in the same place (for related functionality of course, I don't advocate having a function do 2 different irrelevant things).