Avoiding Global Variables - revUp 93

Jim Ault jimaultwins at yahoo.com
Sun Jun 6 14:17:18 EDT 2010


My experience with people who are new to a language or new to  
programming tend to simplify or "round off" their efforts and produce  
the following:

Use globals as a short cut to passing parameters because it is simpler

Develop programming patterns that mean they use the same global names

Forget that globals are owned by Rev, not the stack(s)

Lose track of how many script containers touch and change the same  
global

Try to reuse globals, thinking that they will just keep track of  
clearing the global variable when they need to.


I used to be leader of the Advance Hypercard Special Interest Group  
back in the day.  The global naming was particularly problematic when  
a school teacher decided to jump in and do their own grade book and  
used:

global mySelectedStudent
-- as one declaration, without the 'g' prefix

-- then in field scripts, etc used
put "Tom Jones" into mySelectedStudent
-- forgetting to declare the global at the top of the script container
-- or forgetting they had declared it and it already had a value

-- or forgetting that the global value was supposed to be
         line 5 of field "studentList"
-- and defined it as the string "Tommy Smith"
--     thus dueling data formats

This became worse when they tried to employ "stacks in use", which  
meant that many globals became hidden library instances.  Now the  
globals were not even in the same stack or logical project.  They had  
a fighting chance if they were the authors of the 'stacks in use', but  
not when they acquired the stacks of others.

Our Hypercard group actually designed some scripts to map the globals  
and look for duplicate locals or missing global declarations.  Script  
locals were not a feature of Hypercard.  If the 'g' prefix were not  
used, mapping was essential for finding 'cross-wiring' (as we called  
it).

Hypercard was designed to run across hard drives and computers, so now  
globals became more difficult.  You had a choice to navigate and use  
the remote environment or keep using your own.  Remember the days of  
"Go Recent", "Pop Card" ?  On an AppleTalk network, like a classroom,  
this could lead to significant degrees of anarchy.  The students would  
use the same global names as the instructor, but for different tasks.

I found that most new programmers, including me, had challenges with  
the scope of variables.  Certainly experienced programmers have  
mastered the use of global variables and developed work patterns to  
use them wisely, thus they have become a valuable tool.  To the new  
programmer, they create extra bugs that are more difficult to find and  
fix.

There was one programming student who could not understand that  
globals were persistent, even if he closed his stack.  He would leave  
Hypercard running all the time, no matter which stacks he was  
developing or exploring.  Opening someone else's stack created  
variables you did not know about.

You can imagine at the end of 4 weeks how many globals were safely  
nestled into his application memory.  It was a clan of somewhat- 
related variables, most were of his own creation.  After all, part of  
the thrill of Hypercard was seeing all the wonderful stacks built by  
others.

Our Hypercard group rule was if your stacks were for distribution,  
sharing, and fun, don't use globals (or use unique names).

Hope this adds to the discussion by looking back to the beginning of  
the Hypercard-space-time continuum and the universal nature of globals  
and their nebulae.


Jim Ault
Las Vegas






More information about the use-livecode mailing list