Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

When writing scripts using a modern scripting language, e.g. Powershell or JavaScript, where should I define constants? Should I make all constants global for readability and ease of use, or does it make sense to define constants as close to their scopes as possible (in a function, for instance, if it's not needed elsewhere)? I'm thinking mostly of error messages, error IDs, paths to resources or configuration options.

share|improve this question

2 Answers 2

Consts are good for just giving descriptive variable names to avoid the magic number problems, but they cause a similarly annoying problem of not being able to identify the value actually being used when the const is defined away from it's use.

My suggestion, in all languages: define consts in as close a scope as possible to their actual usage. If used in only one class; only put in that class. Multiple classes would mean make sure it's at least in the same namespace as all classes using it.

In javascript this means as close lexically in scope as it can be to all usages.

share|improve this answer
    
they cause a similarly annoying problem of not being able to identify the value actually being used Shouldn't IDEs have a "go to definition" or be able to preview the value as any other var? The metadata's harder to for scripts I suppose. –  StuperUser Oct 26 '12 at 15:05
1  
Typically one isn't using an IDE to build shell scripts. And even when one is the dynamic nature does not lend itself to resharper style "go to definition" tooling. –  Wyatt Barnett Oct 26 '12 at 15:06
1  
@StuperUser I am a VS StuperUser going on 12 years now so I'm all for using the tooling available, but I think a better approach in designing is to think about how the code can be as maintainable without the tools as possible, this lends to design concepts useful across languages with less tooling, and usually has no effect on the usefulness of the tools if available. Tools at times can make bad designs easy to maintain, which is why tool reliance is often panned. –  Jimmy Hoffa Oct 26 '12 at 15:09
    
similarly annoying problem of not being able to identify the value actually being used One doesn't have to check very often that GRAVITATIONAL_ACCELERATION is 9.80665. Once a constant is set you should abstract yourself for the value, and think in the name of the thing. –  user61852 Oct 27 '12 at 2:34
    
+1 anyway for the rest of the answer. –  user61852 Oct 27 '12 at 2:39

Instead of using constants, you could use a configuration file. JavaScript allows you to have easily parsable files in json format. I don't know about PowerShell.

Configuration files have the advantage of being centralized, yet the name of the property in the function scope (when you retrieve it) allows you to maintain readability.

share|improve this answer
    
Sometimes that can be overkill. Especially if the value is only used internally to the code and not displayed to the user. I prefer to keep my configuration files minimal so that the app easier to setup. –  David Hogue Oct 26 '12 at 16:04

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.