That persnickey state that insists on showing up everywhere in your program. The common belief is that they should be avoided (GlobalVariablesAreBad
The great thing about GlobalVariables is if you fix one, your whole program gets better!
See also the SingletonPattern
and the MonostatePattern
Why are global variables verboten? I doubt you can write a serious application without a single global variable, not counting the given data, code and stack segment pointers. -- SunirShah
There must be some reason that two opposing views are signed by the same person. It's probably a really amusing one.
- How ironic. I came to this page to disagree. Our latest application doesn't have a single global variable, as that's a restriction of the platform. -- SunirShah
Hey, I agree big guy. I just wanted to get people debating about something other than religion and I figured that the "global variables" issue is always good for a debate. ;) -- RobertDiFalco
I have written a number of significant C applications without using a single global variable. However, all of them used the SingletonPattern
(not that I realized it at the time). The problems with global variables are very similar to the problems with public fields in OO. Conceptually, if you consider variables form the current state logic of a StateMachine
, global variables provide no defenses against InvalidStateTransition?
s. For very simple cases, a careful programmer can avoid introducing an InvalidStateTransition?
with the usual trend as the program becomes more complex.
In C, you protect yourself from InvalidStateTransition?
s by making the global FileScope
, and confine yourself to using functions to manipulate it. In JavaLanguage
, you can use the Singleton pattern.
Note that in this discussion I haven't mentioned the SoftwareMaintenance?
s introduce, the advantages during development are sufficient for me. This despite the fact that the maintenance issues tend to outweigh the development hassles over time. -- AndraeMuys
Like a goto
, the global variable
isn't always bad. The problem with some global variables is, it isn't obvious who has responsibility for changing the variable. see ProgramResponsibility
See also GlobalVariablesAreBad