Intro to Ruby

Class 4

Practice: English Numbers

You could expand the EnglishNumbers program by adding the following code to deal with thousands:


left  = number  #original code, set 'left' variable

write = left/1000          #  How many thousands left to write out?
left  = left - write*1000  #  Subtract off those thousands.

if write > 0
  thousands  = englishNumber write
  numString = numString + thousands + ' thousand'

  if left > 0
    numString = numString + ' '
  end
end

write = left/100 # this line begins the existing code that deals with hundreds
                  

Built in classes of Ruby

Ruby has many classes predefined:

  • String
  • Integer
  • Float
  • Array
  • Hash

They are commonly used object types, and have methods associated with them already. How convenient!


a = Array.new
b = String.new 

                    

Built in classes of Ruby

When we create new objects from these classes, we can do things with them immediately.

To see all methods associated with an object or class, run ".methods" on it.


b = "holy cow!"
b.methods
                    

You can view all the built in classes and their associated methods in the Ruby documentation.

Extending a Class

You can write new methods for the built in classes of Ruby. They will then be available to all instances of that class in your program.


class String
  def get_excited
    return self + "!!!" 
  end 
end 
                    

"self" refers to the object calling the method.

You can redefine existing methods for classes this way, too, but it's not recommended.

Creating a Class

It's very easy to create your own classes in Ruby.


# die.rb                    
class Die
  
  def roll 
     @numberShowing = 1 + rand(6) 
    #rand(6) returns a random-ish number between 0-5
  end 

  def showing 
    return @numberShowing
  end 

end 
                    

Inside the class, define its methods.

Creating a Class

You can use your class right away by loading it into IRB.


#in irb
load 'die.rb'
die = Die.new
die.roll
puts die.showing
                

You can use it in another file by requiring it. We'll discuss this later.

Refactoring a Class

What is the result of calling the .showing method on a newly-created, un-rolled Die object?

We can avoid this by calling the roll method as part of the creation of a new instance of Die.


# die.rb
class Die
  
  def initialize 
    roll
  end 

  def roll 
     @numberShowing = 1 + rand(6) 
  end 

  def showing 
    @numberShowing
  end 

end 
 
                    

Let's Develop It

  • In your text editor, create a "Character" class with an initialize method that sets the Character's name, and at least one other method.
  • Open IRB and load the class. Create one or more objects from the class and run some methods on them.
  • You could use the next slides as an example.

Example of creating a class


# in character.rb
class Character 

  def initialize(name)
    @name = name
    @health = 10
  end

  def heal
    @health += 6
  end 

  def adventure
    if @health > 0
      puts "#{@name} goes on a great adventure and meets a dragon!"
      puts "The dragon hugged #{@name} kind of hard..."
      @health -= 5
    else 
      puts "#{@name} is dead :("
      exit
    end 
  end 

end
                    

Running example program in IRB


# in irb
load 'character.rb'
me = Character.new("Cheri")
me.adventure
me.heal 
me.adventure
# repeat until you're done having fun

                    

Inheritance

Classes can inherit from one other class.

All elves are characters, so if all characters have an adventure method, so do all elves. Elves may also have their own methods that other characters do not.

Inheritance

Denote that Elf inherits from Character by using the < symbol


# in character.rb, after Character class code
class Elf < Character
  def twinkle
    puts "I'm super magical!"
  end 
end

#in irb
load 'character.rb'
me = Elf.new("Cheri")
me.adventure
me.twinkle 
                    

Notice that the initialize method was also inherited, as our new Elf knows its name and started off with 10 health.

Inheritance

Subclasses may differ from from their super classes in some ways. Methods can be overwritten when this is the case.


# in character.rb, after Character class code
class Elf < Character
  def twinkle
    puts "I'm super magical!"
  end

  def heal
    @health += 8 # it's easier to heal when you're magic
  end 
end

#in irb
load 'character.rb'
me = Elf.new("Cheri")
me.heal
                    

More information about inheritance can be found here.

Putting it all together

For a command line program, you need these pieces:

  1. File(s) containing your class definitions
  2. A file containing your program, which requires the class file(s)
  3. To call the program file from the command line (not IRB)

Putting it all together

The file containing your class definitions, here called character.rb:


# character.rb

class Character
  # contents of class here 
end

class Elf < Character
  # contents of class here 
end
                    

Putting it all together

The file containing your program, here called adventure.rb, which will run from the command line and requires the class file:


# adventure.rb

require_relative 'character.rb' 
  #file path relative to the location of adventure.rb file
require_relative 'die.rb'


puts "Your name?"
char = Character.new(gets.chomp)
# plus lots more adventuring..... 
                    

Putting it all together

Call the program file from the command line:


#in command line
ruby adventure.rb
# then have some fun!
                    

Let's Develop It

Putting it all together: A role-playing game!

  • If you didn't write a Character class, copy and paste the code to get one started.
  • Create a few subclasses of Character.
  • Write a command-line program that calls your character and die classes to allow the user to have an adventure!
  • Maybe user can choose their character type?
  • Maybe the user's progress will be dependent on outcome of dice-rolling?

Questions?

Resources

Codecademy Ruby Free online Ruby practice
Treehouse Ruby Foundations More in-depth online Ruby class (not free)
Women Who Code Community for women in tech - very friendly to new coders
Austin Railsbridge Free meetup to learn Rails at your own pace with mentors to help
Austin on Rails Local Ruby on Rails user group
Austin.rb Local Ruby user group
Refresh Austin General web development and design meetup
Cafe Bedouins Every week - bring a project to work on, meet other coders

Further Resources

Ruby-doc.org Official Ruby Documentation
Project Euler Offers tons of small math problems to be solved via programming, plus forums to share and discuss solutions
Ruby Monk Free, interactive, in-browser tutorials
Ruby the Hard Way Fun, free (HTML version) book with great information about programming
Sinatra A basic web app framework that runs on Ruby
The Rails Tutorial The Rails web app framework is the most popular use of Ruby... are you ready to dive in?
Girl Develop It Local workshops, events, and coding sessions with awesome people