Intro to Ruby

For Non-Programmers

RailsBridge Boston

slides linked at bit.ly/RBB-jan2017

Ruby is a Programming Language

Actually Running Ruby Code

From a Text File

From IRB

Values

my_name = "Aniket"
my_age = 32
age_of_my_cat = my_age - 22

Variable Names

Values

my_name = "Aniket"
my_age = 32
age_of_my_cat = my_age - 22


puts "My name is #{my_name}"
# My name is Aniket

Method

my_name = "Aniket"
my_age = 32
age_of_my_cat = my_age - 22


puts "My name is #{my_name}"
# My name is Aniket


puts "I am " + my_age + " and my cat is #{age_of_my_cat}"
# I am 32 and my cat is 10

Types of Data

  • Strings (of characters)
  • Numbers
  • Booleans
  • Collections
  • Others!
type_of_cat = "Tuxedo"

number_of_cats = 2

is_black = true
is_white = true
is_orange = false

Basic Types

cats_in_my_house = ["Charlotte", "Ivan"]

puts cats_in_my_house[0]
# Charlotte

puts cats_in_my_house[1]
# Ivan

Collections

Array

Hash

cat_ages = {"Charlotte" => 10, "Ivan" => 8}

puts cat_ages["Charlotte"]
# 10

puts cat_ages["Ivan"]
# 8
current_time = Time.now
puts current_time
# 2016-06-23 18:03:39 -0400

one_to_five = 1..5
puts one_to_five
# 1..5

no_value = nil
puts no_value
#

Others

Making Decisions

"Conditionals"

guest_name = "Sarah"

if guest_name == "Aniket"
  puts "Welcome home!"
elsif guest_name == "Sam"
  puts "Stay away!"
else
  puts "Hello #{my_name}!"
end

# "Hello Sarah!"
guest_name = "Sarah"

puts "Hey Ted" unless guest_name != "Ted"
#

guest_name = "Aniket"

puts "Welcome home!" if guest_name == "Aniket"
# Welcome home!

Repeating Yourself

Looping and Arrays

puts "I would like to pet Ivan."
# I would like to pet Ivan.

puts "I would like to pet Charlotte."
# I would like to pet Charlotte.

puts "I would like to pet Bri."
# I would like to pet Bri.

puts "I would like to pet Jade."
# I would like to pet Jade.
cats = ["Ivan", "Charlotte", "Bri", "Jade"]

cats.each do |cat|
  puts "I would like to pet #{cat}."
end

# I would like to pet Ivan.
# I would like to pet Charlotte.
# I would like to pet Bri.
# I would like to pet Jade.

A method attached to every Array

A "block"

cats = ["Ivan", "Charlotte", "Bri", "Jade"]

cats.each do |cat|
  puts "I would like to pet #{cat}." unless cat == "Bri"
end

# I would like to pet Ivan.
# I would like to pet Charlotte.
# I would like to pet Jade.
one_to_five = 1..5

one_to_five.each do |n|
  puts n * n
end

# 1
# 4
# 9
# 16
# 25

Questions?

Some Advice

Code As Cooking

"Objects"

Programming is like writing a recipe

Ingredients

Instructions

Recipes are all based on the same template which includes:

  • A name
  • One or more ingredients
  • One or more instructions

In Programming Terms...

Recipes are all based on the same class which includes:

  • A name
  • One or more attributes
  • One or more methods

This is an instance based on the cookie recipe class

In Ruby Code...

class ChocolateChipCookiesRecipe
  attr_accessor :butter, :sugar, :chocolate_bits, ...

  def cream
    ...
  end

  def beat
    ...
  end

  def stir
    ...
  end

  def bake(how_long)
    ...
  end
  ...
end

Name

Attributes

Methods

class, attr_accessor, def and end are all ruby keywords - part of the language

Parameter

class ChocolateChipCookiesRecipe
  attr_accessor :butter, :sugar, :chocolate_bits, ...

  def cream
    ...
  end

  def beat
    ...
  end

  def stir
    ...
  end

  def bake(how_long)
    ...
  end
  ...
end

my_recipe = ChocolateChipCookiesRecipe.new

Now we can store an instance of the ChocolateChipCookiesRecipe class in a variable

But what about the Sugar Cookies recipe?  Do I have to write the whole recipe over again?

Shared Behaviors

class CookiesRecipe
  def combine
    ...
  end

  def beat
    ...
  end

  def bake(how_long)
    ...
  end
end
class ChocolateChipCookiesRecipe < CookiesRecipe
  attr_accessor :butter, :sugar, :chocolate_bits, ...

  def stir
    ...
  end
end

chocolate_chip_recipe = ChocolateChipCookiesRecipe.new

ChocolateChipCookiesRecipe inherits from CookiesRecipe

"parent"

"child"

class ChocolateChipCookiesRecipe < CookiesRecipe
  attr_accessor :butter, :sugar, :chocolate_bits, ...

  def stir
    ...
  end
end

class SugarCookiesRecipe < CookiesRecipe
  attr_accessor :butter, :white_sugar, :baking_powder,...

  def blend
    ...
  end

  def decorate
    ...
  end
end

sugar_cookies = SugarCookiesRecipe.new

You've learned the basics of "Object-Oriented Programming"

A little more advice

Thanks For Listening!

Questions?

Copy of Intro to Ruby

By Suzi Curran

Copy of Intro to Ruby

Presentation at RailsBridge Boston, June 2016

  • 51