Intro to Ruby

What we will cover in this section

  • What is programming?
  • Why Ruby?
  • Variables, Arithmetic & Objects
  • Methods and Error Messages

What is programming?

  • Teaching the computer to do a task.
  • A program is made of one or more files of code, each of which solve part of the overall task.
  • Programming code is human readable but also needs a form that the computer can run directly. This form is not human readable.

Why Ruby?

  • It reads like English. The syntax is intuitive.
  •       
      # Java
      for(int i = 0; i < 5; i++)
    
      # Ruby
      5.times do
          
        
  • The community is large, active and interested in helping others learn.
  • You can get a web app off the ground quickly.

What is Ruby used for?

  • Web development (Rails)
  • iPhone apps (RubyMotion)
  • System Administration (Chef)
  • Testing (Vagrant)
  • Security (Metasploit)

Who is using Ruby?

  • Hulu
  • LivingSocial
  • Github
  • Spiceworks
  • Spredfast
  • UT
  • WP Engine
  • #2 in 2014 on github

Working with IRB

  • IRB is a command line interface to ruby that is installed when we install Ruby. It works like a calculator and is a great way to get started quickly.
  • Open: In the terminal, type `irb`
  • Quit: Type `quit` and then press `enter`
  • Follow along with the examples in the slides. Type them in!
  • Feel free to explore as well. You will not accidentally break things.

Arithmetic

Try out some calculator functions

    
  3 + 4
  2 * 4
  6 - 2
  4 / 2
  4 /* 2
  => SyntaxError: (irb):10:syntax error, unexpected *
    
  

Errors are Neat!

  • There are different kinds of errors that can occur. We just saw the SyntaxError which often helps us find misspelled words or missing quotes.
  • Take time to read each Error. They often tell you how to fix the issue and can be a great starting point when searching for help online.
    
  irb> hi
  NameError: undefined local variable or method `hi' for main:Object
    
  

Variables

  • Variables are references to information.
  • We reference variables by name.
  • They are called variable because the information they reference may change.

  # Everything after this pound sign will not be evaluated.
  # These are called comments and I will use them to annotate code
  age = 50
  days_in_year = 365
  days_alive = age * days_in_year
  => 18250
  

Ruby's Variables

  • Ruby has three kinds of variables
  • A local variable starts with a lower case letter or an underscore character (_) and consists entirely of letters, numbers and underscores.

  age = 50
  _age = 50
  _my_age = 50
  

What can I do with a Variable?

  • Create - Initialize
  • Access - Read
  • Assign - Replace

  # create and assign in one line
  age = 0

  # access the value in age
  age

  # replace value in age
  age = 40
  

Variable naming

  • Express what is stored inside
  • Make it easy to read
  • Should be understood by someone who has no idea what your program does
  • Should be unique

  # good
  occupation = "software engineer"

  # bad
  occupation_i_always_dreamed_of_having_in_austin = "software engineer"
  o = "software engineer"
  1st_occupation = "software engineer"
  

Local Variable Values

  • No default value
  • No type declaration
  • Do not live forever

  # error
  name

  name = "Heather"
  defined?(name)
  

Data Types

Built-in: Numbers, Strings, Symbols, Booleans, Regular Expressions, Arrays, Ranges & Hashes

  • Data always has a "type"
  • You will hear the words Class/Type/Object used interchangeably
  • Let's explore a few built in Objects

  irb> 1.class
  => Fixnum
  irb> "Hello".class
  => String
  irb> 1.0022.class
  => Float
  irb> [1,2,3].class
  => Array
  

Strings

Strings are characters inside double or single quotes.


  a = 'Hello '
  b = "World"
  c = a + b
  c.reverse
  => "dlroW olleH"
  

  a = "Spam "
  b = a * 4
  # Here multiplying a by 4 concatenates (links) four strings together
  =>"Spam Spam Spam Spam "
  

String Practice


  "Heather".upcase
  "Heather".downcase
  "heather".capitalize
  "Hello".reverse
  "Heather".length
  "Heather Moore".swapcase
  "".empty?
  

What is the reverse of your name?

How many characters long is your name?

Can you repeat the word hello 100 times?

Numbers

Numeric data comes in two types: Integers and Floats

Integers are either Fixnum or Bignum. They do not have decimals.


    irb> 1_000_000_000_000_000_000.class
     => Fixnum
    irb> 1_000_000_000_000_000_000_000.class
     => Bignum
  

Floats are numbers with at least one number to the left of a decimal point.


    irb> 1.001.class
     => Float
  

Number Practice


  7/8
  7.0/8.0
  3.14.to_s
  3.14.to_i
  1 + "2"
  1 + "2".to_i
  (1 + 2) * 3
  1 + (2 * 3)
  

How many seconds are in an hour?

How many minutes are in a week?

How many years old are you if you've been alive 1 million seconds?

Symbols

You can think of symbols as lightweight Strings.

It's good to know these exist, but don't worry about them too much for now.


  # string
  "hello"

  # symbol
  :hello
  

Booleans

This is another Object that we will learn about later.

For now, when you hear Boolean, think TRUE and FALSE.


  # NOT true
  !true
  => false

  # NOT false
  !false
  => true
  

Arrays, Ranges & Hashes

We will also leave these data types for the next class

Examples of what they will look like:


  # Arrays are used to hold sets of data.
  irb> array_of_numbers = [1,2,3]
  irb> array_of_numbers.first
  => 1

  # Ranges are used to express a sequence.
  irb> range_of_numbers = (1..5)
  irb> range_of_numbers.include?(4)
  => true

  # Hashes are like dictionaries. You can look up a value by a key.
  irb> hash_of_key_to_value =
    {
      "Apple" => "A fruit.",
      "Cucumber" => "A vegetable."
    }
  

Methods

  • Methods define the behavior for an Object.
  • String Objects can reverse, for example.
  • Some methods are accessed using our friend 'dot' and some are standalone.
  • Let's call some methods
    
  irb> puts "hello"
  hello
  => nil
  irb> "2".to_i
  => 2
  irb> 2.to_s
  => "2"
  irb> "2" / 5
  NoMethodError: undefined method `/' for "2":String
    
  

User Input

  • To obtain user input, use `gets`
  • To print out information, use `puts`
  • Let's create our first program together


Put the code below in a file and save it as name.rb


  puts 'Hello there, and what\'s your name?'
  name = gets
  puts 'Your name is ' + name.chomp! + '? What a lovely name!'
  puts 'Pleased to meet you, ' + name + '. :)'
  

Run your program from the command line:


ruby name.rb 
  

Let's Develop It

  • Write your own program using 'puts' and 'gets' to ask a user for their age and then tell them how old they are in dog years.
  • reminder: 'gets' method returns a string. To do math on it, convert it to an integer with .to_i method.
  • 
        #1 dog year = 7 human years
        user_age = gets.to_i
        

Bonus Feature 1

  • Update your code to return a message in all capital letters.

  # YOU ARE 5 YEARS OLD IN DOG YEARS
  

Bonus Feature 2

  • Update your code to return a message in all capital letters with a count of the characters returned in parens.

  # YOU ARE 5 YEARS OLD IN DOG YEARS (32 characters)
  

Questions?

Practice

Write a command line program that asks the user for the year they were born, then calculates their age in years, days, and seconds. Tell the user how old they are in these different formats. (Note: you'll be using 'gets' and 'puts' in this program, along with some math)