'with' bug?

Chris Cain clcain at uncg.edu
Sun Nov 4 16:45:51 PST 2012


On Sunday, 4 November 2012 at 23:51:15 UTC, Faux Amis wrote:
> In your last paragraph you are getting to my point in my other 
> post:
> I think there is nothing wrong with a module scope private var 
> as in D a module is the first encapsulation and adding a 
> wrapper only adds noise.
>
> These are equivalent(from a good-coding pov):
> ---
> module a;
>
> private int i;
> ---
> module b;
>
> // annoying wrapper
> //which makes it difficult to have a single b in the program
> struct S{
>  int i;
> }
> ---
>
> These are also equivalent:
> ---
> module a;
>
> int i;
> ---
> module b;
>
> struct S{
>  static int i;
> }
> ---

Like I said, I don't think it's something that should be banned 
outright, but I've seen many examples of code where someone 
didn't take the time to be explicit about the dependencies in 
their code and instead chose to "hide" it like you propose is 
appropriate. Trust me, as the person who has to maintain and 
extend their code, **I don't appreciate their laziness**.

If you can, you should avoid such things. Module-scoped variables 
mitigate the problems, but they don't eliminate them.

Also, bearophile's suggestion to try to make everything "pure" is 
a good idea. I write as much code as I can using immutable and 
pure and only relax those restrictions when the cost is far too 
great to maintain that. When I come back to the code later, I 
find it significantly easier to figure out for many of the 
reasons I outlined in my previous post.

---
void bar(ref int b) {
     //code using b
}
---

Is generally better than

---
int b;
void bar() {
     // code using b
}
---

Even if b is only private module scoped. I've outlined the 
reasons why in my previous post.

On Sunday, 4 November 2012 at 23:58:08 UTC, bearophile wrote:
> Generally it's better to minimize the scope of variables.

Quoted for truth.

Heck, I've seen examples of code where instance variables were 
too liberally applied, like so:

---
struct S {
    int b;
    void bar() {
       // b is initialized and used in this scope, but no where 
else
    }

    // more code where b isn't used
}
---

is worse than:

---
struct S {
    void bar() {
        int b = ...;
        // use b
    }

    // more code
}
---

Now, maybe b used to be used elsewhere, (I can't say for sure...) 
but sometimes I wonder why people are so willing to let things 
like that leak out of the scope where it's used... it makes the 
next person's job much harder for no reason.


More information about the Digitalmars-d mailing list