$pets.length
$pets.first[:name]
$pets.each{|p| puts p[:name]}
$pets.select{|p| p[:nocturnal] == true}.count
$pets.select{|p| p[:legs] == 4}.each{|p| puts p[:name]}
A method is a name for a chunk of code
Methods are often used to define reusable behavior.
Let's look at methods we've already used:
1.even?
=> false
"fred".capitalize
=> "Fred"
puts "Hello there"
Hello there
=> nil
If you have some code you want to reuse or organize, methods are the way to do it.
Let's write a method together (in IRB)
def means define
subtract is the name of the method
x, y are parameters
x - y is the body of the method
x - y is also the return value
def subtract x, y
x - y
end
Every Ruby method returns something.
Usually, it's the last statement in the method.
It could be the value sent to return if that came first.
def subtract(x,y)
x - y
'another thing'
end
puts subtract(5, 2)
def subtract(x,y)
return x - y
'another thing'
end
puts subtract(5, 2)
Let's write a method that takes in a number and tells us if it is even.
It could return string, like "even" or "odd", or a boolean, like true
or false
.
def method_name(parameter)
# method implementation
end
Hint: if number % 2 == 0, then it is even
Technically speaking, arguments are passed and parameters are declared.
In this code, 5 is an argument and x is a parameter
In reality, you'll often hear the terms used interchangeably
def subtract(x,y)
x - y
end
subtract(5, 2)
The parentheses around arguments and paramaters are optional in Ruby.
I find that using them makes your code clearer, and recommend it.
# They're often ommitted for the puts method
puts "HELLO"
puts("HELLO")
Local variables are only available in the methods where they were defined.
# Let's assign the length of the parameter to a local variable
def length_finder(our_string)
length = our_string.length
end
puts length
=> NameError! :(
An Object is the building block of a program.
Objects do things and have properties.
Object: Number What can it do? - Add - Subtract - Divide - Multiply What are some properties of your Number? - Length - Base - Even
Objects can be grouped by Class.
Classes define a template for objects. They describe what a certain type of object can do and what properties they have in common.
There are many kinds of objects, including String, Number, Array, Hash, Time, ...
To create an object we use .new
new_arr = []
new_arr = Array.new
now new_arr refers to an object instance
Represent object state
Names start with an @
Only visible inside the object
cookie = Object.new
def cookie.add_chips(num_chips)
@chips = num_chips
end
def cookie.yummy?
@chips > 100
end
cookie.add_chips(500)
cookie.yummy? #=> true
Ruby has many classes predefined:
They are commonly used object types, and have methods associated with them already. How convenient!
a = Array.new
b = String.new
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.
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.
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.
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
# in character.rb
class Character
def initialize(name)
@name = name
@health = 10
end
def heal
@health += 6
end
def adventure
if @health > 0
puts "The dragon hugged #{@name} kind of hard..."
@health = @health - 5
else
puts "#{@name} is dead :("
exit
end
end
end
# in irb
load 'character.rb'
me = Character.new("Cheri")
me.adventure
me.heal
me.adventure
# repeat until you're done having fun
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.
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.
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.
For a command line program, you need these pieces:
The file containing your class definitions, here called character.rb:
# in character.rb
class Character
# contents of class here
end
class Elf < Character
# contents of class here
end
The file containing your program, here called adventure.rb, which requires the class file:
# in 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.....
Call the program file from the command line:
#in command line
ruby adventure.rb
# then have some fun!
Putting it all together: A role-playing game!
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 |
Practice: Make your final project even bigger and better! If you're taking this class as part of a job plan, attend a local meetup and talk to a couple of strangers about what you've learned and what you're excited about doing with programming.