To complete our map of the world of a script, we must include variables. A variable is an association (formally, a binding) between a name and a value. You can think of it as a shoebox with a label on it, into which something is placed for storage. The shoebox's label is the variable's name; what's inside the shoebox is the variable's value. For example, when we say:
set x to 5
it is as if we had a shoebox labeled "x" into which we place the number 5.
Naturally, variables are very useful things, which is why just about all computer languages have them. To be able to assign your own names to things makes your program clearer and easier to maintain. And in a way any computer program is all about manipulating values, so it's nice to have a place to put each value when you're not using it, so that you can retrieve it again later. A variable's value is like the coffee in your cup when you set the cup on the table, do something else, and then pick up the cup and take a sip. The cup is like the variable; without it, the coffee would just flow onto the floor when you're not using it.
Variables and code are intimately related. Code is where variables are defined; code is where variables are given their values and where those values are retrieved.
Variables and scope blocks (handler definitions and script object definitions) are intimately related. Variables are what scope is all about: they are the "things" that other regions of the code either can or can't see, depending on the rules of scope, the location of the code, and the nature of the walls constructed by the scope blocks. In fact, we can go even further and say that every variable "lives" at the top level of a handler or a script object (and those are the only places where a variable can "live"). In fact, we can go even further than that: handlers and script objects live at the top level of a script object too, and this is because handlers and script objects are themselves variable values. This may sound confusing right now, but after you've read a few more chapters, it will all seem perfectly natural.
Script objects, handlers, variables, and code constitute the entire structure of a script. There is nothing else. Together they are AppleScript's "gang of four," the sole and supreme rulers of the AppleScript world. We have now mapped that world completely. Let's review. At the top is the script object; the script itself is a script object. At the top level of a script object there can be variables, handlers, and script objects. At the top level of a handler there can be variables and script objects, but a handler cannot be nested directly in a handler. Handlers and script objects are the scope blocks, determining where their variables can be seen. Code can go only in a handler, but that handler might be a script object's implicit run handler, so in that sense code can go in a script object too.