Now let's talk about something you've been using this whole time: Functions. Whenever you've used commands like rect() or fill() or text(), you've been calling functions, and those functions have drawn what you've told them to do. What is a function really? It's a collection of code that we've grouped together and given a name because we want to be able to use that bit of functionality many times. Think about rect()? What does a rect() do? It just draws four lines, right? We could just do that using our line() function, right? And here we have what looks like a rectangle. But we realize that we kind of want to be able to draw a rectangle a lot of times, and it would be really annoying to do the math every time to try and figure out how to draw a line from one corner to the next and next and next. So instead, we just made a rect() function, and that function does exactly the same thing that those four lines of code did, but in much less code. So that's pretty cool, and rect() is one of those functions that we've made available for ALL programs to use here on Khan Academy. But - you can also make up your own functions to use in each of your programs. For example - let's say we are making a program and we want to draw Winston multiple times - maybe cause we're going to tell the life story of Winston and show him at every age in his life. So, here's what our Winston drawing code might start off as: We have 'faceX' and 'faceY' variables to store the center of the face, and then we draw the eyes and the mouth relative to those variables. Right now the program sees the code, and it's not inside any function, so it just runs it, and it only runs it once. OK, let's turn this into a function. To do that, we do it very similarly to the way we declare a variable, because that's actually what we are doing. So we say 'var drawWinston'. We give it a nice name, very descriptive, and then '=', but here, instead of writing a number or a string, we're going to write 'function' (make sure you spell it right) and then empty parentheses '()' and then an open curly '{' and then a close curly '}' and our semicolon ';' OK so what we need to do is put everything that we want inside our function in between the start and end curly. So we're going to take all this code here, put it in our function (indent it nicely), and Ta Da! So now what we have is we have this variable that is storing a function - so basically we've given a label to this block of code, so that we'd be able to tell our program at any time, "Hey, find that block of code with that label and run it!" We we're making this bit of code reusable. But now notice, that we have no Winston anymore! We've lost Winston! Where did he go? OK - so what happened is that once we put this inside a function, we told our program "hey here's a bunch of code that I want to be able to run later, but only when I TELL you to run it." So we have to tell it to run the code, which means we need to 'call' the function - just like we do with ellipse() and rect() and line(). So we just write the function name drawWinston followed by our start and end parentheses '()' and, of course, our semicolon, and Ta Da! -- We have a Winston! OK! So I think it's cool, but you might not think it's cool because all we've done is made our program do exactly what it did before. Kinda silly huh? The whole point of functions is we can reuse them. So let's do that now. We can just copy and paste this function call... Ta da! Ta da! Over and over. Hmmm, but it looks the same, well, it worked - it's drawing multiple Winstons, but the problem is they're all in the same place. If we had x-ray vision, we could x-ray the canvas and see three Winstons, but I don't have x-ray vision. I don't know about you. But, we can make a small change to our function that WILL make it obvious. So you see faceX and faceY - they're always 202 and 208? We can change this to using the random() function - - let's say like random() from 50 to 350 and it'll generate a random number between those two - and we can do the same thing for here - and so every time this function is called, it generates this new random number, and if we push restart, we can keep getting random Winstons. So cool! Whoo!! Alright - so I think this is cool because it would have been a lot of code to write this if we didn't have it in a function. It would have been three times the amount of code. But it's still not AS useful as it could be, because we probably don't want random Winstons. We probably want to be able to position a Winston at specific points on the screen. So stay tuned, 'cause we'll talk about how pass parameters to our functions next, and then you'll be able to do exactly that.