Pattern: '''Local Variables Defined and Used on One Page''' ...this pattern helps complete the SimplyUnderstoodCode pattern; it settles part of the question of how to make the use of local variables understandable. * * * Local variables hold local state and serve as a means to abbreviate certain parts of the computation or to prevent computations from being repeated causing inefficiency or incorrectness. Frequently local variables disorient people reading the code. You are writing a piece of code that requires local variables to hold temporary results. The code will be in use for a long time with relatively infrequent attention for maintenance. You expect that by the time you go back to the code it will be unfamiliar or else someone who has never seen it before will be working on it. People need to stare at code in order to understand it well enough to feel secure making changes to it; understanding the role and uses of a local variable is central to this understanding. People understand best things read top to bottom. ''Therefore,'' Lay out the definition of a local variable so that all of its uses are visible on one page of a typical screen or window size for the developers who might need to work on the code. Ideally the definition of the local variable will be above its use or reference. * * * This won't work well if the variable is assigned multiple times within the visible field, and it will work even worse if it is assigned multiple times partly within and partly outside the visible field. See the pattern AssignVariablesOnce. ---- There's an assumption here that the routine is bigger than a page. This is probably a bad idea in itself. If the function fits on a page, all its local variables will on a page also. Sometimes the local variables are the reason the function has got so big. That is, you can't split it into smaller functions because all the parts of it need access to local variables. Some techniques for dealing with that situation are discussed in WellFactoredCode. If you write SideEffectFreeFunctions, then local variables become mere caches, used for efficiency and clarity and without having any effect on correctness. ''Frequently local variables disorient people reading the code'' -- this may be a sign you need to chose their names more carefully. Using a variable for intermediate results can split a complicated expression into simpler ones, and giving a name to a quantity helps explain what that quantity is. It is usually better to introduce variables than to write comments. -- DaveHarris ---- This pattern is for languages such as C and Fortran, which cannot get anything done with 3-line functions. A better way to say the rule - a more inclusive way - is "give everything the narrowest scope possible." --PhlIp ------ See Also: NestedFunctions ---- CategoryCodingIssues