defining and using globals in an application
    Richard Gaskin 
    ambassador at fourthworld.com
       
    Thu Jul  7 11:47:23 EDT 2011
    
    
  
Nonsanity wrote:
> I actually prefer to use custom properties even for values that I want to be
> session-specific. The reason being that I'd rather have personal control
> over when the value is cleared than leave it to the environment to handle.
> This way I can be sure I know the contents of the variable (as a custom
> property) at all times. It never gets changed out from under me, and so will
> never surprise me or my code.
>
> With globals, you need to handle the case of an empty (unset) value
> everywhere the global is used, or you need to initialize the global to a
> starting value at startup - The place where it will get emptied at the start
> of each session.
>
> Using a custom property, if you need the value to be reset to a particular
> value on startup you do it yourself in the OpenCard or PreOpenCard. If you
> want it to be emptied like a global, you can do that there too. But at least
> you have all the control yourself. No more surprises.
>
> I really only use globals when I'm doing a quick hack script for debugging
> purposes, but even there my old Hypercard habits (where globals were the
> only option) are being replaced with custom properties.
>
> I really do think of custom properties as the complete replacement, in all
> ways, for globals.
Respectfully, those issues and solutions seem to work both ways.  For 
example, you can set the value of a global on preOpenCard just as easily 
as you can set the value of a property, and any script from anywhere can 
alter a property just as easily as it can alter a global.
For myself, in addition to the persistence issue (I'm a compulsive 
saver) it comes down to simply laziness - I'd rather write:
   SetDefaultWidgetHeight 200
...than:
   set the uDefaultWidgetHeight of button "someButton" \
     of card "someCard" of stack "someStack" to 200
Where properties are unbeatable is when you need to bind data to a 
specific object. If you have multiple objects in which each need a 
different value, implementing those as properties is the with-the-grain 
solution.
But if you need something that's global in scope, I see no harm in using 
globals.
 From time to time I come across recommendations that globals are 
somehow bad practice, yet almost every language supports them so I'm 
inclined to think they have a place among our options for value storage.
--
  Richard Gaskin
  Fourth World
  LiveCode training and consulting: http://www.fourthworld.com
  Webzine for LiveCode developers: http://www.LiveCodeJournal.com
  LiveCode Journal blog: http://LiveCodejournal.com/blog.irv
    
    
More information about the use-livecode
mailing list