On ven 23 novembre 2007, Melchior FRANZ wrote:
> Most people seem to think that "var" in Nasal is a kind of
> redundant decoration, and really just noise. It isn't.
> In fact, I consider Nasal code *not* using it broken.
>
>
> "var" makes a variable guaranteed to be local. And note that
> functions assigned to variables are no exception! If you write
> code without using "var" on variables, then you risk (often
> hard to debug) breakage at a later time. Consider this code
> in one of your scripts:
>
>  output = func(v) {                        # missing "var"
>      state = getprop("/sim/foo/state");    # missing "var"
>      do_something(state, v);
>  }
>
>
> where neither "output" nor "state" have been declared to
> be a local variable using "var" in this file. Everything will
> work fine. For a while. Until someone creates a file
> $FG_ROOT/Nasal/state.nas or $FG_ROOT/Nasal/output.nas.
> Then your "output" and "state" will no longer create
> a safe variable, but they'll overwrite the global namespaces
> that these files meant to create. You can try this with these
> examples:
>
>
>  props = func {                            # missing "var"
>      print("I'm props. And I just wiped the whole props namespace.");
>  }
>
>
> Or with this:
>
>
>  foo = func {                              # missing "var"
>      props = " :-P ";                      # missing "var"
>  }
>  ...
>  foo();
>
>
> After this code was run, all props methods will stop working,
> as the props namespace containing all the important stuff was
> replaced by cheesy, thought to be local stuff.
>
> Note, again, that variables set to hold a function object are
> no exception. They should use the "var" keyword as well:
>
>   var foo = func {}
>
>
> But there's another reason why "var" should be used consequently,
> even if a variable is safe enough from later side effects, because
> it's called "bo105_livery" or something. The "var" keyword makes
> reading code for others (and for the author after some time) easier,
> as it makes clear: "this variable starts its life *HERE*". No need
> to search around to see whether assigning a value to it means
> something to other code outside or not. Also, with an editor
> offering proper syntax highlighting reading such code is actually
> easier, despite the "noise".
>
> But why then does some code still not use "var", even code written
> by Andy? Because the keyword didn't exist from the beginning. It was
> added after I had run into weird error messages when starting with
> the bo105. It took me a while to find out that a variable "state"
> had nasty and unexpected side effects on the $FG_ROOT/Nasal/state.nas
> script. And now you know why this script is now known as "ac_state.nas".
>
> m.
>
>

Thanks, 

I will have a lot of updates to do    :(

Regards


-- 
Gérard
http://pagesperso-orange.fr/GRTux/


-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Flightgear-devel mailing list
Flightgear-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/flightgear-devel

Reply via email to