0:08
Let’s talk about variables. You hear the word “variables” a lot in bank heist movies when they talk
0:13
about things that might go wrong. You might hear a variable defined as a “known-unknown” –
0:20
something that you know exists, but you don’t know what it is. But often times in scripting you will
0:25
definitely know what your variable is, and you just chose to use a variable to make your script easier
0:31
to write. I prefer to think of a variable as just a convenient label for a value that may or may not
0:38
In algebra, you’ve probably seen x, y, and z often used as variables: they’re just a letter that
0:45
represents some other number. In Lua, you could define these variables just by typing the name of
0:51
of your variable, the equal sign, and then whatever you want that variable to represent. But you’re
0:57
not limited to single letters, or to numbers. You could use whole words to represent variables, and
1:03
a variable could define a numerical value, or a string, or a control property,
1:08
or even a complete function, or more.
1:12
Here's an example of using a variable to represent a changing value. I’ll assign variable “s” as the
1:18
string “Hello”, then I’ll “print(s)”. This prints the variable s rather than the literal character of “s”.
1:27
Next I’ll reassign variable “s” as the string “World” and “print(s)” again. The two commands here,
1:34
“print(s)” are identical, but because the variable has changed in between them as the compiler runs
1:41
through the script, we get two different results, based on what the variable was at the time the
1:48
Similarly, you might use a variable to represent a control’s Value or String. This information isn’t
1:55
defined within the scope of your script, it comes from the normal Q-SYS environment. But when you
2:01
print your variable, it will show you the current state of that control.
2:05
Often times you might use a variable as an easy shortcut for something that is used multiple times.
2:11
For instance, what if you had a larger script in which you have multiple functions that all return a
2:16
string of “Message Complete.” If you wanted to change that string later on, you would have to search
2:22
through every function and change it line-by-line, or you could have just used a variable in the first
2:28
place. Then you could define your variable at the top of the script, so you only need to ever change it
2:33
in one place and that will be carried forward to every instance the variable is referenced.
2:40
These variables we’ve been creating are called global variables, because they’re valid everywhere in
2:45
the script. Sometimes you might want to create a local variable, which will be defined within the
2:50
body of a function or control structure, and that variable is only valid within the scope of that
2:56
function. If you had multiple functions that all do very similar things, for instance, it might be tedious
3:02
to use global variables such as output1, output2, output3, etc. Instead, each function could create its
3:09
own local variable called “output” which would never interact with anything outside of its function.
3:15
We’ll look at how to create functions in the next video.
3:18
In the Block Controller, you can manipulate variables with the blocks you’ll find here in the “Variables
3:24
and Functions” tab. Use the “Create” block to make a new variable, which you can then define (or
3:31
not) on the other side of the equal sign. You can then set this variable to a new value using the “set”
3:38
block. If you need to reference this variable, you can use this block here with the variable’s name. If I
3:45
wanted to print a variable that is defined by one of my control’s Values, I might do so like this.
3:51
When you’ve created multiple variables, you’ll see their names are all available in the drop down
3:56
box. You’ll notice that the default variable name is “foo” which, and I cannot stress this enough, you
4:06
That’s right. Pity the foo. Okay, but all seriousness aside, if you don’t like the name Foo you can, of
4:13
course, change it, but it’s a fine name. For those of you who feel the need to fight the foo, let just say
4:20
this. All My Life I’ve been dealing with variables, and a good global variable is My Hero. There’s no
4:28
reason to throw a Monkey Wrench in your script In Times Like These. Think of a variable as the
4:35
Pretender, which can represent anything you want. It will make the Best of You … and ensure that
4:40
your design will last … Everlong.
4:45
One last thing in the Block Controller, note that it knows the variable is a global variable. Whereas if
4:52
you were to create this variable within the construct of a function block, it will automatically
4:57
understand that this is a local variable. You don’t need to decide if it is one or the other.
5:02
Also, in the Block Controller, you can only use the Create block for each variable once. After the
5:08
variable is created, you can only change it to something else using the Set block. In Lua you can use
5:14
the same command to either create or redefine a variable, as you can see from the Lua tab of these
5:20
blocks: “foo=”awesome” and “foo=moreawesome” but the Block Controller needs those two
5:29
And that’s it for variables. We have an exercise on variables in your Control Worksheet, and once
5:34
it’s done we’ll move on to talk about Functions.