Garry's Mod Wiki

Revision Difference

Beginner_Tutorial_Variables#513971

<cat>Dev.Lua</cat>⤶ # Variables, what are they?⤶ Variables let your script hold information. Using a variable you can put aside some data for later and then call it back whenever you want. Variables themselves don't have a type assigned to them and they can hold absolutely anything.⤶ ⤶ ## Recapitulation and the print function⤶ From now on it is assumed you don't need explanations about opening notepad, saving, and loading a script in Garry's Mod. Refer to the [first page](/gmod/Beginner_Tutorial_Intro) if you forgot.⤶ ⤶ Open up your editor, we'll be making a new script, with variables!⤶ ⤶ If you remember, last time we did this:⤶ ⤶ ```⤶ ⤶ print( "Hello World!" )⤶ ```⤶ ⤶ ⤶ ⤶ This was simple enough. Whenever the script was opened, it said Hello World! in the console.⤶ ⤶ <page>Global.print</page>() is a function. A function is a command that does something when you call it. Many functions can take arguments, which is data you give the function to change exactly what it does. In this case, <page>Global.print</page>() takes one argument, which is a string (a series of letters, numbers, spaces, and so on), and when <page>Global.print</page>() is called, it puts that <page>string</page> into the console.⤶ ⤶ So, let's take our script apart so we can understand it.⤶ ⤶ ```⤶ ⤶ print( "Hello World!" )⤶ ```⤶ ⤶ ⤶ ⤶ print is the name of the binding.⤶ The ( and the ) (these symbols are called **parentheses**) are where you put the text for print to print.⤶ ⤶ "Hello World!" is the text we chose to print. Notice the "" (**quotation marks**). The quotation marks tell lua that everything in between them is a <page>string</page>, and not the name of a variable. Doing this:⤶ ⤶ ```⤶ ⤶ print( Hello World! )⤶ ```⤶ ⤶ ⤶ ⤶ doesn't work. Lua will think that Hello and World! are the name of a variable, instead of a <page>string</page>.⤶ ⤶ Any time we want lua to know that the information we're giving it is text, we put it inbetween quotation marks. Text in quotation marks is called a <page>string</page>.⤶ ⤶ Whew! Are you still with me? These are the words you need to remember so far:⤶ Variable⤶ Binding⤶ Function⤶ Print⤶ Parentheses⤶ Quotation Marks⤶ String⤶ ⤶ Okay, now that we've gone over how print works and about text and whatnot, we'll move onto how to write variables.⤶ ⤶ # Defining variables⤶ A variable can be created by doing this:⤶ ⤶ ```⤶ ⤶ myName = "Jeff"⤶ ```⤶ ⤶ ⤶ ⤶ The name of the variable is on the left. The equal sign says you want to set this variable to what's on the right. If you remembered well, "Jeff" is a <page>string</page>, because it has quotation marks around it. myName is the name of a variable, because it doesn't have quotation marks around it! Getting the hang of it?⤶ ⤶ So now you're probably thinking, what's the point of this?⤶ Well, that's what we're here to see.⤶ ⤶ But first, let's see how to use <page>Global.print</page>() with a variable instead of text.⤶ As you know by now, the first way we used message was like so.⤶ ⤶ ```⤶ ⤶ print("Hello World!")⤶ ```⤶ ⤶ ⤶ ⤶ We're using a <page>string</page> inside of <page>Global.print</page>() to tell it what to print. But if we want to use a variable, we do this:⤶ ⤶ ```⤶ ⤶ myName = "Jeff" ⤶ print( myName )⤶ ```⤶ ⤶ ⤶ ⤶ Whenever this runs, <page>Global.print</page>() prints Jeff into the console, because myName is Jeff. Heh, see?⤶ ⤶ You can change variables the same way you make them. Like so:⤶ ⤶ ```⤶ ⤶ myName = "Jeff"⤶ print( myName )⤶ myName = "Josh"⤶ print( myName )⤶ ```⤶ ⤶ ⤶ ⤶ The example above prints "Jeff" first, and "Josh" second.⤶ ⤶ ⤶ # Local Variables⤶ ⤶ Local variables are variables that are available only in the code block they are defined in, and in all child code blocks. They are defined like this:⤶ ⤶ ```⤶ ⤶ local myName = "Jeff" ⤶ print( myName )⤶ ```⤶ ⤶ ⤶ In most cases you want to use local variables, so other scripts can't override them or so that your script won't break other scripts.⤶ ⤶ This example shows the difference between a global variable and a local variable:⤶ ⤶ ⤶ ```⤶ local myName = "Jeff"⤶ local myAge = 18⤶ myPetName = "Peter"⤶ filename = "test.lua"⤶ print( myName, myPetName, myLastName, myAge, filename )⤶ ⤶ if ( true ) then⤶ local myName = "George"⤶ local myLastName = "Jackson"⤶ local filename = "nope.jpg"⤶ myPetName = "Bob"⤶ myAge = 20⤶ print( myName, myPetName, myLastName, myAge, filename )⤶ end⤶ ⤶ print( myName, myPetName, myLastName, myAge, filename )⤶ ```⤶ ⤶ ⤶ This code will have this output:⤶ ⤶ ⤶ ```⤶ Jeff Peter nil 18 test.lua⤶ George Bob Jackson 20 nope.jpg⤶ Jeff Bob nil 20 test.lua⤶ ```⤶ ⤶ ⤶ # Concatenation⤶ Now the next thing we will learn is how to join two <page>string</page>s together. Joining two types of data together to make a <page>string</page> is called **concatenation**. To concatenate, you just need to use .. - See below:⤶ ⤶ ```⤶ ⤶ print( "I don't like " .. "being apart. ")⤶ ```⤶ ⤶ ⤶ ⤶ "I don't like ".."being apart." becomes "I don't like being apart.".⤶ ⤶ Likewise, you can join a <page>string</page> and a variable:⤶ ⤶ ```⤶ ⤶ myName = "Jeff" ⤶ print( "Welcome to the Atlantic, " .. myName )⤶ ```⤶ ⤶ ⤶ This prints "Welcome to the Atlantic, Jeff" because myName is "Jeff". So really what it's doing is: "Welcome to the Atlantic, ".."Jeff"⤶ ⤶ You can use .. as many times as you want. See below:⤶ ⤶ ```⤶ ⤶ myName = "Jeff" ⤶ print( "Welcome to the Atlantic, "..myName..". As you know, we are very glad to have you. If you ever get uncomfortable " .. myName .. ", we have a sick bay on board to assist you." )⤶ ```⤶ ⤶ ⤶ This prints :⤶ ⤶ ```⤶ Welcome to the Atlantic, Jeff. As you know, we are very glad to have you. If you ever get uncomfortable Jeff, we have a sick bay on board to assist you.⤶ ```⤶ ⤶ ⤶ ## Newlines⤶ Last thing we will cover here is how to use **newlines**. Newlines are denoted by **\n** in a <page>string</page>. You can use newlines anywhere in the <page>string</page> to make a new line (see below):⤶ ⤶ ```⤶ ⤶ myName = "Jeff" ⤶ print( "Hello, " .. myName .. "!\nHow are you today?\nI'm feeling great." )⤶ ```⤶ ⤶ ⤶ This prints this into the console:⤶ ⤶ ⤶ ```⤶ Hello, Jeff!⤶ How are you today?⤶ I'm feeling great.⤶ ```⤶ ⤶ ⤶ Multiline <page>string</page>s can also be defined by using double square brackets instead of quotes. This allows you to create newlines in the <page>string</page> by just pressing enter.⤶ ⤶ Example:⤶ ⤶ ```⤶ ⤶ print( <page>Hello, Jeff!⤶ How are you today?⤶ I'm feeling great.</page> )⤶ ```⤶ ⤶ ⤶ ⤶ ```⤶ Hello, Jeff!⤶ How are you today?⤶ I'm feeling great.⤶ ```⤶ ⤶ ⤶ # What's next?⤶ ⤶ Next we will learn about [operators](/gmod/Beginner_Tutorial_If_Then_Else).⤶ ⤶ ⤶ ⤶