Other Pages

Expand All

ruby_language.step

goals do
  goal "Be able to use the basic building blocks of Ruby code"
  goal "Use IRB to run Ruby code"
  goal "Do simple calculations"
  goal "Use and understand variables"
  goal "Use and understand arrays"
  goal "Use loops and conditional statements"
end

steps do
  step do
    message "Type this in the terminal to start the Interactive Ruby Shell, a program which lets you try out Ruby code:"

    console_without_message "irb"

    message "Yours might look different, but it should look something like this:"

    irb_without_message(
      "irb(main):001:0> "
    )
  end

  step do
    message "Next try some simple math that's built into Ruby. Type these lines into IRB:"

    irb_without_message <<-RUBY
      3 + 3
      7 * 6
    RUBY
  end

  step do
    irb_with_message(
      "**Variables** are names with values assigned to them.",
      "my_variable = 5"
    )

    message "This assigns the value `5` to the name `my_variable`."
  end

  step do
    irb_with_message(
      "You can also do math with variables:",
      <<-RUBY
        my_variable + 2
        my_variable * 3
      RUBY
    )
  end

  step do
    message "Variables can also hold more than one value. This is called an **array**."
    irb_without_message <<-RUBY
      fruits = ["kiwi", "strawberry", "plum"]
    RUBY

    message "Here we're using the variable `fruits` to hold a collection of fruit names."
  end

  step do
    irb_without_message <<-RUBY
      fruits = fruits + ["orange"]
      fruits = fruits - ["kiwi"]
    RUBY

    message "`+` and `-` are called operators. We can use them with the array of fruits just like we can use them with numbers."
  end

  step do
    irb_with_message(
      "Everything in Ruby has a **class**. Type this into IRB:",
      <<-RUBY
        7.class
        "kiwi".class
        fruits.class
      RUBY
    )

    message "These are the three data types introduced so far: **Fixnum** (numbers), **String** (text), and **Array** (lists)."
  end

  step do
    message <<-MARKDOWN
      Each class has different **methods** that can be used on **instances**
      of that class. If you're not quite sure what an instance is, [this page
      on Ruby classes](http://docs.railsbridgeboston.org/ruby/classes) might
      help
    MARKDOWN

    irb_without_message <<-RUBY
      fruits.length
      fruits.first
    RUBY

    message "You can see all the methods available for an object:"

    irb_without_message <<-RUBY
      fruits.methods
    RUBY

    irb_with_message(
      "And you can call multiple methods in a row:",
      <<-RUBY
        fruits.methods.sort
      RUBY
    )

    message <<-MARKDOWN
      In `fruit.methods.sort` above, `fruit.methods` returns an array, and
      `.sort` sorts that array. It's exactly like this, but without the `array`
      variable:
    MARKDOWN

    irb_without_message <<-RUBY
      array = fruits.methods
      array.sort
    RUBY
  end

  step do
    message "Arrays have a method called **each** which iterates through the list running code on each item."
    irb_without_message <<-RUBY
      fruits.each do |fruit|
        puts fruit
      end
    RUBY

    message <<-MARKDOWN
      This takes the first item from the `fruits` array (`"strawberry"`),
      assigns it to the variable `fruit`, and runs the code between `do` and
      `end`. Then it does the same thing for each other item in the list. The
      code above should print a list of the fruits.
    MARKDOWN
  end

  step do
    message "A **conditional** runs code only when a statement evaluates to true."

    irb_without_message <<-RUBY
      if my_variable > 1
        puts "YAY!"
      end
    RUBY

    message "This prints `YAY!` if the value stored in `my_variable` is greater than 1."

    message "Try changing the `>` in the conditional to a `<`."
  end

  step do
    message "You can also make your own methods:"
    irb_without_message <<-RUBY
      def pluralize(word)
        word + "s"
      end
      pluralize("kiwi")
    RUBY

    message "Methods take **parameters**, which are the variables they work on. In this case, we made a method called pluralize that takes one parameter, a word."

    message "Methods can also return data. In this case, pluralize returns the word with an 's' added to the end of it. In Ruby, methods return whatever the last line of the method evaluates to."
  end

  step do
    message "This is an *optional* practice question if you want to brush up on your Ruby. Feel free to skip it! Or talk to your TA if you get stuck, or discuss your solution once you have completed the checkpoint."

    message "Write some Ruby that prints out the names of the people in your group."

    message <<-MARKDOWN
      Hints:

      1. Start by opening up `irb`.
      1. Create the names as strings in an array.
      1. Store that array to a variable.
      1. Then use the `.each` method on the stored array to loop through each of the names.
      1. Use the `puts` method to print out the names.
    MARKDOWN
  end
end

next_step "creating_a_rails_application"