More name hiding
bearophile
bearophileHUGS at lycos.com
Fri Aug 19 21:54:18 PDT 2011
nsf:
> Well, D currently says I can't shadow variables:
Right, that's a third way to shadow variables that D forbids, thank you. But in my post I've shown other kinds of shadowing that currently D accepts. Shadowing global variables has caused some problems in my C code. One good commercial C lint lists all such cases with a warning.
> which pisses me off personally. It's such a handy feature.
It's a handy anti-feature, good source of bugs. Style guides suggest to rename one of them. If I see production C/C++ code that does that, I rename one of the two variables. In Haskell in your situation you are allowed to use x and x'.
> And there is exactly one way to solve your problem which comes in two parts:
Surely there are some alternative ways to solve this problem, SPARK and Java doesn't use your solution.
> 1. Don't violate the rule: "one or two screens of text per function".
> 2. Keep the low number of variables in a function, people say it should
> be close to seven.
I like to add a third rule, for D code:
3. Use pure functions everywhere possible. This avoids the shadowing problem.
But:
1) Old C code translated to D often doesn't follow your rules, unfortunately.
2) I have had colleagues that don't always follow your rules.
3) Even good codebases sometimes have longer functions. You find them even in the C sources of Python.
4) Even if you always follow your two rules, you are able to shadow a global (or outer) variable still, and 20 lines later sometimes you think that you are using the global variable, while you are modifying the local one. I have seen this happen even in code written by expert programmers, and it causes problems.
> /me wants to be able to shadow his variables everywhere
Good luck :-)
Bye and thank you for your comments,
bearophile
More information about the Digitalmars-d
mailing list