Why people dislike global variables so much while I find them so convenient?

Dukc ajieskola at gmail.com
Tue Jan 25 21:34:57 UTC 2022

On Tuesday, 25 January 2022 at 09:53:25 UTC, rempas wrote:
> It is known that people dislike global variables and the reason 
> is that they make the code harder to debug.

Assuming you mean mutable global state. Immutable global data is 
okay IMO.

Because purity is convenient. When I call a function, let's say 
`field.initializeUnit(12, 15)` it's so much nicer and tidier if I 
can rest assured it won't affect anything else than `field`, and 
if I know it acts the exact same way every time, when the 
arguments are similar.

Now consider if `field` was a global variable. Okay, 
`initializeUnit(12, 15)` is shorter than 
`field.initializeUnit(12, 15)`. But I have to set the field I 
want to manipulate in advance, `theField = /*whatever*/`. And 
when reading code that acts like this, I do not know what affects 
what without peeking what each of the called functions do. Did 
the `initializeUnit` use `theField` or `thatOtherField`? With the 
pure version I can instantly see it's the `field` variable I'm 
using. The non-pure version is much uglier and harder to read 
after all, despite having a shorter argument list.

If the argument lists get lengthy, it is sometimes worth to 
collect the argument sets into structs or classes that have most 
of the needed data in one place. You might also consider the 
`with` statement. But globals just plain blow.

More information about the Digitalmars-d mailing list