News for hackers. Stuff that matters.
Re:On F# code readability by tikhonj on Monday March 04, 2013 @01:25PM (#5319637)
The x::xs example is bad because it's a widely used idiom, similar to using i as a loop counter.

Also, I think that short names are completely justified if the variable is used on a single line. In fact, in those cases, the shorter name is often clearer because it doesn't obscure the structure of the line.

So, my rule of thumb: top-level bindings, function arguments for complicated functions and local bindings that are either used in more than one place or away from where they are defined all get descriptive names. (Although I do try to keep even those brief--more than two words is probably too much, and even two is suspicious.) Function arguments to small functions and local variables that are used immediately (usually from pattern matches) get short names--one or two characters, usually.

Of course, this really is just a rule of thumb. If deviating from it seems to improve my code, I deviate. But it does give a good idea of the shape of my code.

Re:On F# code readability by gnaritas on Monday March 04, 2013 @01:42PM (#5319773)
> The x::xs example is bad because it's a widely used idiom, similar to using i as a loop counter.

And IMHO bad for the same reason. I'd rather see "index" than "i" and I'd rather see "head::tail" than "x::xs", abbreviations for variable names are terrible; the English language is not running out of words and readability is more important than brevity. Of course, I'm a Smalltalker and we like to actually have readable code.

Re:On F# code readability by mich41 on Monday March 04, 2013 @02:46PM (#5320350)
Everybody who has ever seen any C code has

  #define i index
programmed deeply in his brain's CPP.

Using i for loop counter never causes confusion and using index makes the for statement 12 characters longer for no reason.

Re:On F# code readability by gnaritas on Monday March 04, 2013 @03:07PM (#5320508)
I'm sure they do, it's not relevant; using short meaningless variables names as a matter of habit eventually always causes confusion because of nested loops. If you can touch type, counting characters is an absurd reason to write obtuse code. Code is read far far far more than it is written; optimize for reading, not writing.

I'm very well are "i" is idiomatic; I still think it's stupid, as are many such idiomatic hangovers. Idiomatic does not mean correct or good, it means popular. Well chosen meaningful variable names are always a plus and are a sign of a programmer that understands code is read far more than it is written and not always by those who know all the little idioms of a particular language.

Re:On F# code readability by mich41 on Monday March 04, 2013 @03:42PM (#5320765)
If you count to 100 or iterate over some array, i, j, k, l are more readable than index1, index2, index3, index4 simply because they are shorter and still mean the same.

And if you iterate over some collections of "meaningful" objects, meaningful names are more readable than either i or index.

It never makes sense to use index over i.

Re:On F# code readability by gnaritas on Monday March 04, 2013 @04:21PM (#5321058)
If there were nested loops, I'd use meaningful names, and as a matter of course of using meaningful names, index beats i on a single loop. It's silly to sometimes use meaningful names and sometimes abbreviate because you're too lazy to type.

Of course, these are personal subjective things, but if you allow the habit of abbreviation, it tends to spread where it isn't appropriate, better to simply not do it.

Re:On F# code readability by Dylan16807 on Monday March 04, 2013 @05:40PM (#5321524)
'index' just isn't meaningful. Use actual meaning or use shorthand. Don't waste verbosity.
Re:On F# code readability by gnaritas on Monday March 04, 2013 @05:58PM (#5321598)
"index" is very meaningful, it tells me I'm indexing and not counting, otherwise I'd use "count". Confusion between those two often causes off by one errors, so yes it does actually matter and is actually meaningful. You might like "i" or "n" to convey the same meaning, but as I said, I want words not abbreviations.
Re:On F# code readability by klibertp on Monday March 04, 2013 @05:58PM (#5321597)
Of course, it should be `aStreamPosition` rather than `index` - still not `i` ;)
Re:On F# code readability by sseveran on Monday March 04, 2013 @02:32PM (#5320246)
x::xs or x:xs in haskell is a very common naming pattern for pattern matching on lists. head and tail are functions that operate over lists so using them as a variable would be considered name shadowing. i is good to use as a loop counter in C for the same reason, its widely recognized and people will know what it means.