Globals have always been a "code smell" red flag to me. And if Roger hadn't said it, I'd sugest passing an object or a struct or whatever else is available. OK, Roger can do lots of things that the rest of us can't, but everyone else ought to avoid globals like the plague.
-----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Roger Hui Sent: Monday, September 11, 2006 1:13 PM To: Programming forum Subject: Re: [Jprogramming] Developing large projects I have participated in projects in which there are hundreds of globals. Passing all of them as arguments would be really complicated. On the other hand, there have been a few times when I got burned as where f called g and g changed a global which then wrecked things for f . I solved the problem as follows: g=: 3 : 0 old=. global global=: new blah blah blah global=: old result ) ----- Original Message ----- From: Ewart Shaw <[EMAIL PROTECTED]> Date: Monday, September 11, 2006 5:29 am Subject: [Jprogramming] Developing large projects > Hello again all. > > I've been working away on a (large, complex) software package, and > have a question on programming style. This stems from a recent post I > made to comp.lang.apl about niladic functions: > > > ========== (original query) ========== > > > I used the APL niladic function to generate > >tutorials in several versions of APL. When J > >came out I was planning to do the same, but > >was unable to do so because J does not support > >niladic functions. > > ============ (my response) =========== > > You can write a monadic function fun say that ignores its argument, > and call it in J with > fun'' > > I mainly use niladic functions to return globals, for example > setpc=: 3 : 'PENCOL=: y' NB. usually more complex than this! > getpc=: 3 : 'PENCOL' NB. again may be more complex > NB. e.g. return 0 0 0 if PENCOL undefined > ... > p=. getpc'' NB. pen colour > ... > > As a side-effect of the "idiom" fun'' it's then easy for me to check > when I may be using globals, just by searching for '' . This > technique makes development less error-prone, at least for me > - for example, if (when?) I decide to change PENCOL to be a stack. > > ========== (further response) ========== > > Someone (Markus Triska) then replied saying that > "Passing PENCOL to all functions using it is even less error-prone" > > ========== (end of extracts) ========== > > > My experience has been different from Markus's: I know if a particular > function needs access to PENCOL, but keeping track of "all functions > using it" would be a nightmare, particularly in the development stage > (& I expect the development stage to last forever). I've also found my > approach useful whether or not I'm using J's object-oriented features. > > Has anyone any comments? How do other people avoid being strangled by > spaghetti code? (I'm talking several hundred k of .ijs scripts) ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
