Best Practices Question
Devin Asay
devin_asay at byu.edu
Wed May 27 10:44:22 EDT 2009
Hi Bill,
On May 27, 2009, at 8:05 AM, Bill Andersen wrote:
> Can someone point me to a "Best Practices" or good itermediate
> tutorial
> on programming in Rev. I've been able to do quite a bit and can use
> the dictionary to learn how to use the language, but I'm having
> trouble
> understanding how most people use Globals, Custom Properties, etc.
>
> I've read pro and cons on using globals. I've tried to write
> functions
> and pass params around to avoid them (which I think is best), but then
> there are times a global seems to be a better idea... OR would a
> Custom
> Property be better? I just don't know how others would do it. I've
> looked through a lot of examples and it seems it is all over the
> board!
>
> I know it isn't written in stone (and really a personal preference),
> but has someone put together a "Best Practices" document?
I teach a Revolution programming for non-programmers class, and a
couple of years back I put together a fairly basic set of Best
Practices. See <http://revolution.byu.edu/design/bestpractices.html>.
Obviously there are many more issues than this, and as you said, much
of it is determined by programmer preference. The Best Practices list
I put together represents some of my own biases, to be sure, but are
intended to help learners develop good habits and discipline as they
write code.
As you mentioned there have been many wide ranging discussions here on
the list debating the pros and cons of this or that issue, notably the
recent discussion about custom properties. You're right that much of
this boils down to what makes sense for you and seems logical for you.
If you're interested in some nitty-gritty discussion of best
programming practices, based on the principles of interoperability of
shared Revolution stacks and resources, you can do no better than look
through the documents created by the Revolution Interoperability
project at <http://tech.groups.yahoo.com/group/revInterop/>. Note that
it's a Yahoo group that requires (I believe) you to register (I
believe to see the materials. Under the leadership of many of the
leading lights of the Rev developer community, notably Richard Gaskin
and Ken Ray, the Interop project has done some serious thinking about
best practices and come up with lots of good guidance.
Incidentally, Richard has summarized much of this work at <http://www.fourthworld.com/embassy/articles/scriptstyle.html
>.
Finally, a few random thought from people on this list. When I was
putting together my simple beginners list I solicited feedback from
folks on the list. For various reasons, including personal laziness, I
haven't yet included them all. But you may find some of the remarks of
interest.
## quote
Students should always write their programs as if someone else will
later come along to either maintain or enhance it. It's a good habit
to get into as it forces better design practices. When it comes to
maintaining or more importantly adding code to a loop the last thing
you want is problems figuring out where and how the loop control
variable is modified.
See Richard Gaskin's Script Style Guide at http://www.fourthworld.com/embassy/articles/scriptstyle.html
Ken Ray:
I name all buttons exactly the same as their labels, without any
spaces or punctuation, so for example a checkbox that says "Use
meaningful names" would be named "UseMeaningfulNames" - this makes it
unnecessary to look up the name of a button in order to address it in
a script. The only times I break this habit is where conventional
abbreviations are things that come to "top of mind" as an alternative
(for example, a button that says "Download Now" would be named "DLNow"
because "DL" is a very common alternative for "Download").
Similarly I name all fields based on the label that precedes it (if
there is one) using the same approach. So a label field that says
"First Name:" and has a text entry field next to it would have the
entry field named "FirstName". I generally don't give names to label
fields, but if I do need to, I follow the rule above and add "lbl" in
front of it (so the label field I describe above would be called
"lblFirstName" if I needed to address it).
Inspired by Kay Lan:
As much as possible, keep object names unique within a stack. It will
make finding and changing references to object names in scripts
easier, should it become necessary.
Shari at gypsyware.com
Comment your scripts: Agree again. Sometimes naming the handler to
match isn't enough, especially with a long script. One thing I do
with very long scripts with many if's and repeat loops nested, is to
comment the beginning and ending of an IF or REPEAT, in order to match
them up. I've got scripts where it's nearly impossible to figure out
which END goes with which beginning. And if you're trying to
troubleshoot, having things well labeled can be a lifesaver.
ME:
Hard-coding data in scripts and object inspectors is a Bad Idea™.
Inevitably, runtime conditions will change over the life of your
program, and the hard-coded data will no longer be valid, breaking
your program. Instead, save data that could potentially change in text
files or custom properties. In the case of dynamic information like
file paths, it is best to dynamically derive them at runtime.
Addition to comments and/or if-then-else rule:
For very long or nested if or else clauses it is a good idea to
comment sections of the structure so you know which 'end if' belongs
with which 'if'.
Mark Wieder:
Keep standard handlers (i.e., mouseUp) as short as possible, putting
the real code in separate handlers:
on mouseUp
doSomething
end mouseUp
on doSomething
--lots of code here
end doSomething
----------------------------------
Quote string literals:
Use "hello" instead of hello.
----------------------------------
And since you've already decided that not everybody will agree with
all of
these:
Declare your local variables and enable the "variable checking by
default"
option.
It will help prevent typos and cut down your debugging time.
## end quote
There! That's probably more than you bargained for. And I'm sure
others will chime in with more advice. We all have plenty of that, for
free. :-)
>
> We really need a Rev for Dummies book!
Well maybe it's not Rev for Dummies, but revolution.byu.edu is at
least "Rev for Newbies". :-)
(BTW, there is a "Programming for Dummies" book that includes examples
in Revolution as well as other languages. I haven't seen it so can't
make any claims as to its quality.)
HTH,
Devin
Devin Asay
Humanities Technology and Research Support Center
Brigham Young University
More information about the use-livecode
mailing list