Introduction to Ruby
This is a minimal introduction to the Ruby programming language, intended to get you far enough to begin using the Ruby on Rails web application framework.
bin/setupis complete, at a new Terminal prompt
and press return. You should end up at a prompt that says
 pry(main)>and looks something like this:
(You may not have to
cdinto the folder; ignore that part.)
You have launched an app called the Rails Console that is an interactive playground; it allows you to try out the Ruby language as you read about it below.
You're now ready to start reading the introduction below. As you read, try out each new Ruby concept at the prompt.
If you make a typo and the console gets into a weird state or infinite loop, you can always close the terminal tab and open a fresh one by clicking the green circled + icon and
What is Ruby? To answer that, first consider what we can and can't do with plain old HTML:
- Give data structure with HTML.
- Give data style with CSS.
But we can't:
- Perform computations on data.
- For example,
24 × 365, or how many hours are there in a year? HTML cannot answer this question.
- Have dynamic content like a random word that we didn't type into the source code of the page ourselves.
- For example, did a computer opponent choose rock, paper, or scissors?
- Display messages only if certain conditions are met.
- For example, "You win!" if you chose rock and the opponent chose scissors.
Basically, HTML by itself can only produce static, unchanging websites that look the same to all visitors, and all you can do on them is click around them and read them. It's a markup language for content.
This might be fine for some informational sites (like the location, hours, and menu of a restaurant), but it will clearly not do for the kind of tailored, interactive web applications that we want to build (like GrubHub, where we can leave reviews or order delivery).
So, we need to learn a general purpose language in addition to HTML, so that we're not limited to just formatting static data. We want to save information on behalf of our users, tailor the experience for them based on who they are, and much more.
There are many general purpose programming languages, but the one that we're going to learn is called Ruby. It can do all three of the above things, and much more.
Let's spend a few minutes just getting our hands dirty with Ruby before we describe the theory behind it.
Try out the commands below in your
rails console. Type each one after the prompt that says
pry(main)>and press return after each line, and you will see how Ruby interprets each expression on the next line after the
24 * 365
If everything went well, you should see something like this:
 pry(main)> 24*365
Now try all the below:
Try it again (you can just press the up arrow to get back your last command):
Try it again if you have to until you get a different number 🎲🎲
This might be a good time to point out that if you make a mistake while entering an expression into
rails console— let's say for example that you forgot a closing parenthesis — it's possible to get into a weird state where you press return and nothing happens. It's still waiting for that closing parenthesis, and then you start typing more commands, and it gets confused, and then you get confused.
If something like this happens, press Ctrl+C to break out of the weird state and reset back to a clean state. You can then use the up arrow to scroll back through your history and try to fix the malformed command.
(Only type the stuff before the
#; the stuff after are known as code comments, and are just there as notes to ourselves. They have no effect on the program.)
1 < 2 # "1 is less than 2"
2 < 1 # "2 is less than 1"
24*365 > 10000 # There are more than 10,000 hours in a year
1 == 1 # "1 is equivalent to 1"
1 == 2 # "1 is equivalent to 2"
1 != 1 # "1 is NOT equivalent to 1"
1 != 2 # "1 is NOT equivalent to 2"
Unlike your phone's calculator app, Ruby can work with many more data types than just numbers. Most importantly, Ruby can work with text, which we wrap inside quotation marks and refer to as "strings" (of characters):
That wasn't very interesting, but note that if you left out the quotation marks, Ruby gets confused:
Your very first error message! You are going to see a lot of these — 99% of developing software is trying to figure out error messages. They might look scary at first, but later on they will become helpful old friends!
Anyway, let's do something more interesting with strings:
Remember, you can use your up and down arrows to scroll through your command history. That would have saved you from retyping
"Hello"over and over.
But Ruby has a more important way to save that piece of data: we can create a box to hold it and give that box a name, like so:
s = "Hello" # Create a box, label it `s`, and store "Hello" in it
s # Retrieve the value in `s`
You could also throw away what you have in the box labeled
sand put in something new:
s = "hi"
s = 60 * 60
You could even replace the value in the box with an updated version of the old value, because the instructions on the right side of the equals sign are executed before the throwing away happens:
s = "hi"
s = s.capitalize
And you can create as many of these boxes as you want:
a = "hi"
b = "there"
c = "world"
(Note that here we are using a single-equals sign,
=, the variable assignment operator. Above, while doing comparisons, we used the completely and totally different double-equals sign,
==, the logical equivalence operator. Mixing up these two operators is a very easy mistake to make, and even experienced devs make it all the time — watch out.)
Believe it or not, from these simple building blocks, we can build up much of what happens on the web today. For example, when Twitter tries to make sure that no one can sign up using the same username as David Heinemeier Hansson, the creator of Ruby on Rails, even if they try to be sneaky and use mixed-case, they would do something like
user_input = "DhH"
existing_username = "dhh"
user_input == existing_username # double-equals, not single!
user_input.downcase == existing_username
Remember our Photogram Database exercise? Figuring out which photos were on a user's timeline — a seemingly complicated task — ended up being a long sequence of small and simple steps, like the ones above. Most applications are. It was tedious for us to do it by hand, though, so now we just need to learn enough Ruby vocabulary to teach the computer to do it for us. We'll spend the next several lessons learning just that.
Before we dig in to Ruby, let's talk a little bit more about Ruby on Rails.
Ruby, as a general purpose language, can be used for just about anything — producing music, flying drones — you name it. What we want to do with it, though, is produce useful HTML pages and send them to our users.
“Ruby on Rails” is just a name for a bunch of pre-written Ruby code — like what you downloaded when you began this project. It already includes, out of the box, all of the plumbing involved with delivering the output of Ruby programs to users through browsers.
That way, instead of re-inventing the wheel for all that first, we can just get right down to the fun stuff — bringing our ideas to life!