際際滷

際際滷Share a Scribd company logo
Ruby and OO
Cory Foy | @cory_foy
http://www.coryfoy.com
Triangle.rb
June 24, 2014
Thursday, June 26, 14
Triangle.rb Meetup
June 25th, 2012
Cory Foy | @cory_foy
http://www.coryfoy.com
Ruby and OO
Overview
 What is Ruby?
 Ruby Basics
 Advanced Ruby
 Wrap-up
Thursday, June 26, 14
Triangle.rb Meetup
June 25th, 2012
Cory Foy | @cory_foy
http://www.coryfoy.com
Ruby and OO
What is Ruby?
 First released in 1995 by Yukihiro
Matsumoto (Matz)
 Object-Oriented
 number = 1.abs #instead of Math.abs(1)
 Dynamically Typed
 result = 1+3
Thursday, June 26, 14
Triangle.rb Meetup
June 25th, 2012
Cory Foy | @cory_foy
http://www.coryfoy.com
Ruby and OO
What is Ruby?
 http://www.rubygarden.org/faq/entry/show/3
class Person
attr_accessor :name, :age # attributes we can set and retrieve
def initialize(name, age) # constructor method
@name = name # store name and age for later retrieval
@age = age.to_i 
 # (store age as integer)
end
def inspect # This method retrieves saved values
"#{@name} (#{@age})" # in a readable format
end
end
p1 = Person.new('elmo', 4) # elmo is the name, 4 is the age
puts p1.inspect # prints elmo (4)
Thursday, June 26, 14
Triangle.rb Meetup
June 25th, 2012
Cory Foy | @cory_foy
http://www.coryfoy.com
Ruby and OO
Will It Change Your Life?
 Yes!
 Ok, Maybe
 Its fun to program with
 And what is programming if it isnt fun?
Thursday, June 26, 14
Triangle.rb Meetup
June 25th, 2012
Cory Foy | @cory_foy
http://www.coryfoy.com
Ruby and OO
Ruby Basics
 Variables, Classes and Methods
 Properties / Attributes
 Exceptions
 Access Control
 Importing Files and Libraries
 Duck Typing
Thursday, June 26, 14
Triangle.rb Meetup
June 25th, 2012
Cory Foy | @cory_foy
http://www.coryfoy.com
Ruby and OO
Ruby Basics - Variables
 Local (lowercase, underscores)
 fred_j = Person.new(Fred)
 Instance (@ sign with lowercase)
 @name = name
 Class (@@ with lowercase)
 @@error_email = testing@test.com
 Constant (Starts with uppercase)
 MY_PI = 3.14
 class Move
 Global ($ with name)
 $MEANING_OF_LIFE = 42
Thursday, June 26, 14
Triangle.rb Meetup
June 25th, 2012
Cory Foy | @cory_foy
http://www.coryfoy.com
Ruby and OO
Variables contain
references to objects
Thursday, June 26, 14
Triangle.rb Meetup
June 25th, 2012
Cory Foy | @cory_foy
http://www.coryfoy.com
Ruby and OO
Ruby Basics - Classes
 Class definitions are started with
class,are named with a CamelCase
name, and ended with end
class Move
attr_accessor :up, :right
def initialize(up, right)
@up = up
@right = right
end
end
Thursday, June 26, 14
Triangle.rb Meetup
June 25th, 2012
Cory Foy | @cory_foy
http://www.coryfoy.com
Ruby and OO
Classes (and Modules) are
Objects
Thursday, June 26, 14
Triangle.rb Meetup
June 25th, 2012
Cory Foy | @cory_foy
http://www.coryfoy.com
Ruby and OO
Ruby Basics - Classes
 Attributes and fields normally go at the
beginning of the class definition
class Move
attr_accessor :up, :right
def initialize(up, right)
@up = up
@right = right
end
end
Thursday, June 26, 14
Triangle.rb Meetup
June 25th, 2012
Cory Foy | @cory_foy
http://www.coryfoy.com
Ruby and OO
Ruby Basics - Classes
 initialize is the same concept as a
constructor from .NET or Java, and is called
when someone invokes your object using
Move.new to set up the objects state
class Move
attr_accessor :up, :right
def initialize(up, right)
@up = up
@right = right
end
end
Thursday, June 26, 14
Triangle.rb Meetup
June 25th, 2012
Cory Foy | @cory_foy
http://www.coryfoy.com
Ruby and OO
Ruby Basics - Methods
 Methods return the last expression
evaluated. You can also explicitly return from
methods
class Move
def up
@up
end
def right
return @right
end
end
Thursday, June 26, 14
Triangle.rb Meetup
June 25th, 2012
Cory Foy | @cory_foy
http://www.coryfoy.com
Ruby and OO
Every Expression
Evaluates to an Object
Thursday, June 26, 14
Triangle.rb Meetup
June 25th, 2012
Cory Foy | @cory_foy
http://www.coryfoy.com
Ruby and OO
Ruby Basics - Methods
 Methods can take in specified
parameters, and also parameter lists
(using special notation)
class Move
def initialize(up, right)
@up = up
@right = right
end
end
Thursday, June 26, 14
Triangle.rb Meetup
June 25th, 2012
Cory Foy | @cory_foy
http://www.coryfoy.com
Ruby and OO
Its All About Sending
Messages to Objects
Thursday, June 26, 14
Triangle.rb Meetup
June 25th, 2012
Cory Foy | @cory_foy
http://www.coryfoy.com
Ruby and OO
Ruby Basics - Methods
 Class (Static) methods start with
either self. or Class.
class Move
def self.create
return Move.new
end
def Move.logger
return @@logger
end
end
Thursday, June 26, 14
Triangle.rb Meetup
June 25th, 2012
Cory Foy | @cory_foy
http://www.coryfoy.com
Ruby and OO
Ruby Basics - Properties
 Ruby supports the concept of
Properties (called Attributes)
class Move
def up
@up
end
end
class Move
def up=(val)
@up = val
end
end
move = Move.new
move.up = 15
puts move.up #15
Thursday, June 26, 14
Triangle.rb Meetup
June 25th, 2012
Cory Foy | @cory_foy
http://www.coryfoy.com
Ruby and OO
Ruby Basics - Properties
 Ruby also provides convenience
methods for doing this
class Move
attr_accessor :up #Same thing as last slide
end
move = Move.new
move.up = 15
puts move.up #15
Thursday, June 26, 14
Triangle.rb Meetup
June 25th, 2012
Cory Foy | @cory_foy
http://www.coryfoy.com
Ruby and OO
Ruby Basics - Properties
 You can specify read or write only
attributes as well
class Move
attr_reader :up #Cant write
attr_writer :down #Cant read
end
move = Move.new
move.up = 15 #error
d = move.down #error
Thursday, June 26, 14
Triangle.rb Meetup
June 25th, 2012
Cory Foy | @cory_foy
http://www.coryfoy.com
Ruby and OO
Ruby Basics - Exceptions
 Ruby has an Exception hierarchy
 Exceptions can be caught, raised and
handled
 You can also easily retry a block of
code when you encounter an exception
Thursday, June 26, 14
Triangle.rb Meetup
June 25th, 2012
Cory Foy | @cory_foy
http://www.coryfoy.com
Ruby and OO
Ruby Basics - Exceptions
process_鍖le = File.open(test鍖le.csv)
begin #put exceptional code in begin/end block
#...process 鍖le
rescue IOError => io_error
puts IOException occurred. Retrying.
retry #starts block over from begin
rescue => other_error
puts Bad stuff happened:  + other_error
else #happens if no exceptions occur
puts No errors in processing. Yippee!
ensure # similar to 鍖nally in .NET/Java
process_鍖le.close unless process_鍖le.nil?
end
Thursday, June 26, 14
Triangle.rb Meetup
June 25th, 2012
Cory Foy | @cory_foy
http://www.coryfoy.com
Ruby and OO
Ruby Basics  Access Control
 Ruby supports Public, Protected and
Private methods
 Private methods can only be accessed
from the instance of the object, not from
any other object, even those of the
same class as the instance
Thursday, June 26, 14
Triangle.rb Meetup
June 25th, 2012
Cory Foy | @cory_foy
http://www.coryfoy.com
Ruby and OO
Ruby Basics  Access Control
 Access is controlled by using keywords
class Move
private
def calculate_move
end
#Any subsequent methods will be private until..
public
def show_move
end
#Any subsequent methods will now be public
end
Thursday, June 26, 14
Triangle.rb Meetup
June 25th, 2012
Cory Foy | @cory_foy
http://www.coryfoy.com
Ruby and OO
Ruby Basics  Access Control
 Methods can also be passed as args
class Move
def calculate_move
end
def show_move
end
public :show_move
protected :calculate_move
end
Thursday, June 26, 14
Triangle.rb Meetup
June 25th, 2012
Cory Foy | @cory_foy
http://www.coryfoy.com
Ruby and OO
Ruby Basics - Imports
 To use a class from another file in your
class, you must tell your source file
where to find the class you want to use
require calculator
class Move
def calculate_move
return @up * Calculator::MIN_MOVE
end
end
Thursday, June 26, 14
Triangle.rb Meetup
June 25th, 2012
Cory Foy | @cory_foy
http://www.coryfoy.com
Ruby and OO
Ruby Basics - Imports
 There are two types of imports
 require
 Only loads the file once
 load
 Loads the file every time the method is executed
 Both accept relative and absolute paths, and
will search the current load path for the file
Thursday, June 26, 14
Triangle.rb Meetup
June 25th, 2012
Cory Foy | @cory_foy
http://www.coryfoy.com
Ruby and OO
Ruby Basics  Duck Typing
 What defines an object?
 How can you tell a car is a car?
 By model?
 By name?
 Or, by its behavior?
Thursday, June 26, 14
Triangle.rb Meetup
June 25th, 2012
Cory Foy | @cory_foy
http://www.coryfoy.com
Ruby and OO
Ruby Basics  Duck Typing
 Wed use static typing! So only the valid
object could be passed in
 What if my object has the same
behavior as a Car?
class CarWash
def accept_customer(car)
end
end
 How would we
validate this
in .NET or Java?
Thursday, June 26, 14
Triangle.rb Meetup
June 25th, 2012
Cory Foy | @cory_foy
http://www.coryfoy.com
Ruby and OO
Ruby Basics  Duck Typing
 What is
this?
Thursday, June 26, 14
Triangle.rb Meetup
June 25th, 2012
Cory Foy | @cory_foy
http://www.coryfoy.com
Ruby and OO
Ruby Basics  Duck Typing
 How
about
this?
Thursday, June 26, 14
Triangle.rb Meetup
June 25th, 2012
Cory Foy | @cory_foy
http://www.coryfoy.com
Ruby and OO
Ruby Basics  Duck Typing
 What
about
this?
Thursday, June 26, 14
Triangle.rb Meetup
June 25th, 2012
Cory Foy | @cory_foy
http://www.coryfoy.com
Ruby and OO
Ruby Basics  Duck Typing
 We know objects based on the
behaviors and attributes the object
possesses
 This means if the object passed in can
act like the object we want, that should
be good enough for us!
Thursday, June 26, 14
Triangle.rb Meetup
June 25th, 2012
Cory Foy | @cory_foy
http://www.coryfoy.com
Ruby and OO
Ruby Basics  Duck Typing
 Or we could just let it fail as a runtime
error
Class CarWash
def accept_customer(car)
if car.respond_to?(:drive_to)

 @car = car

 wash_car
else

 reject_customer
end
end
end
Thursday, June 26, 14
Triangle.rb Meetup
June 25th, 2012
Cory Foy | @cory_foy
http://www.coryfoy.com
Ruby and OO
Advanced Ruby - Blocks
 A block is just a section of code
between a set of delimters  { } or
do..end
{ puts Ho }
3.times do
puts Ho 
end #prints Ho Ho Ho
Thursday, June 26, 14
Triangle.rb Meetup
June 25th, 2012
Cory Foy | @cory_foy
http://www.coryfoy.com
Ruby and OO
Advanced Ruby - Blocks
 Blocks can be associated with method invocations.
The methods call the block using yield
def format_print
puts Con鍖dential. Do Not Disseminate.
yield
puts 息 SomeCorp, 2006
end
format_print { puts My name is Earl! }
-> Con鍖dential. Do Not Disseminate.
-> My name is Earl!
-> 息 SomeCorp, 2006
Thursday, June 26, 14
Triangle.rb Meetup
June 25th, 2012
Cory Foy | @cory_foy
http://www.coryfoy.com
Ruby and OO
Advanced Ruby - Blocks
 We can check to see if a block was passed to our
method
def MyConnection.open(*args)
conn = Connection.open(*args)
if block_given?
yield conn #passes conn to the block
conn.close #closes conn when block 鍖nishes
end
return conn
end
Thursday, June 26, 14
Triangle.rb Meetup
June 25th, 2012
Cory Foy | @cory_foy
http://www.coryfoy.com
Ruby and OO
Advanced Ruby - Iterators
 Iterators in Ruby are simply methods
that can invoke a block of code
 Iterators typically pass one or more
values to the block to be evaluated
Thursday, June 26, 14
Triangle.rb Meetup
June 25th, 2012
Cory Foy | @cory_foy
http://www.coryfoy.com
Ruby and OO
Advanced Ruby - Iterators
def 鍖b_up_to(max)
i1, i2 = 1, 1
while i1 <= max
yield i1
i1, i2 = i2, i1+i2 # parallel assignment
end
end
鍖b_up_to(100) {|f| print f +  }
-> 1 1 2 3 5 8 13 21 34 55 89
 Pickaxe Book, page 50
Thursday, June 26, 14
Triangle.rb Meetup
June 25th, 2012
Cory Foy | @cory_foy
http://www.coryfoy.com
Ruby and OO
Advanced Ruby - Modules
 At their core, Modules are like
namespaces in .NET or Java.
module Kite
def Kite.鍖y
end
end
module Plane
def Plane.鍖y
end
end
Thursday, June 26, 14
Triangle.rb Meetup
June 25th, 2012
Cory Foy | @cory_foy
http://www.coryfoy.com
Ruby and OO
Advanced Ruby - Mixins
 Modules cant have instances  they
arent classes
 But Modules can be included in
classes, who inherit all of the instance
method definitions from the module
 This is called a mixin and is how Ruby
does Multiple Inheritance
Thursday, June 26, 14
Triangle.rb Meetup
June 25th, 2012
Cory Foy | @cory_foy
http://www.coryfoy.com
Ruby and OO
Advanced Ruby - Mixins
module Print
def print
puts Company Con鍖dential
yield
end
end
class Document
include Print
#...
end
doc = Document.new
doc.print { Fourth Quarter looks great! }
-> Company Con鍖dential
-> Fourth Quarter looks great!
Thursday, June 26, 14
Triangle.rb Meetup
June 25th, 2012
Cory Foy | @cory_foy
http://www.coryfoy.com
Ruby and OO
Advanced Ruby - Reflection
 How could we call the Length of a
String at runtime in .NET?
String myString = "test";
int len = (int)myString

 
 .GetType()

 
 .InvokeMember("Length",
System.Re鍖ection.BindingFlags.GetProperty,

 
 null, myString, null);
Console.WriteLine("Length: " + len.ToString());
Thursday, June 26, 14
Triangle.rb Meetup
June 25th, 2012
Cory Foy | @cory_foy
http://www.coryfoy.com
Ruby and OO
Advanced Ruby - Reflection
 In Ruby, we can just send the
command to the object
myString = Test
puts myString.send(:length) # 4
Thursday, June 26, 14
Triangle.rb Meetup
June 25th, 2012
Cory Foy | @cory_foy
http://www.coryfoy.com
Ruby and OO
Advanced Ruby - Reflection
 We can also do all kinds of fancy stuff
#print out all of the objects in our system
ObjectSpace.each_object(Class) {|c| puts c}
#Get all the methods on an object
Some String.methods
#see if an object responds to a certain method
obj.respond_to?(:length)
#see if an object is a type
obj.kind_of?(Numeric)
obj.instance_of?(FixNum)
Thursday, June 26, 14
Triangle.rb Meetup
June 25th, 2012
Cory Foy | @cory_foy
http://www.coryfoy.com
Ruby and OO
Sending Can Be Very, Very
Bad
Thursday, June 26, 14
Triangle.rb Meetup
June 25th, 2012
Cory Foy | @cory_foy
http://www.coryfoy.com
Ruby and OO
Ruby Basics  Other Goodies
 RubyGems  Package Management for
Ruby Libraries
 Rake  A Pure Ruby build tool (can use
XML as well for the build files)
 RDoc  Automatically extracts
documentation from your code and
comments
Thursday, June 26, 14
Triangle.rb Meetup
June 25th, 2012
Cory Foy | @cory_foy
http://www.coryfoy.com
Ruby and OO
Ruby Resources
 Programming Ruby by Dave Thomas (the
Pickaxe Book)
 http://www.ruby-lang.org
 http://www.rubycentral.org
 http://www.ruby-doc.org
 http://www.triangleruby.com
 http://www.manning.com/black3/
 http://www.slideshare.net/dablack/wgnuby
Thursday, June 26, 14
Cory Foy
foyc@coryfoy.com
@cory_foy
blog.coryfoy.com
prettykoolapps.com
coryfoy.com
Thursday, June 26, 14

More Related Content

Viewers also liked (16)

GOTO Berlin - When Code Cries
GOTO Berlin - When Code CriesGOTO Berlin - When Code Cries
GOTO Berlin - When Code Cries
Cory Foy
Rails as a Pattern Language
Rails as a Pattern LanguageRails as a Pattern Language
Rails as a Pattern Language
Cory Foy
SQE Boston - When Code Cries
SQE Boston - When Code CriesSQE Boston - When Code Cries
SQE Boston - When Code Cries
Cory Foy
Patterns in Rails
Patterns in RailsPatterns in Rails
Patterns in Rails
Cory Foy
Collaborating with Customers using Innovation Game
Collaborating with Customers using Innovation GameCollaborating with Customers using Innovation Game
Collaborating with Customers using Innovation Game
Enthiosys Inc
Scrum and kanban
Scrum and kanbanScrum and kanban
Scrum and kanban
Agileee
Ruby for C# Developers
Ruby for C# DevelopersRuby for C# Developers
Ruby for C# Developers
Cory Foy
Agile Roots: The Agile Mindset - Agility Across the Organization
Agile Roots: The Agile Mindset - Agility Across the OrganizationAgile Roots: The Agile Mindset - Agility Across the Organization
Agile Roots: The Agile Mindset - Agility Across the Organization
Cory Foy
Choosing Between Scrum and Kanban - TriAgile 2015
Choosing Between Scrum and Kanban - TriAgile 2015Choosing Between Scrum and Kanban - TriAgile 2015
Choosing Between Scrum and Kanban - TriAgile 2015
Cory Foy
Code Katas
Code KatasCode Katas
Code Katas
Cory Foy
Stratgic Play - Doing the Right Thing at the Right Time
Stratgic Play - Doing the Right Thing at the Right TimeStratgic Play - Doing the Right Thing at the Right Time
Stratgic Play - Doing the Right Thing at the Right Time
Cory Foy
Continuous Deployment and Testing Workshop from Better Software West
Continuous Deployment and Testing Workshop from Better Software WestContinuous Deployment and Testing Workshop from Better Software West
Continuous Deployment and Testing Workshop from Better Software West
Cory Foy
Scrum vs Kanban - Implementing Agility at Scale
Scrum vs Kanban - Implementing Agility at ScaleScrum vs Kanban - Implementing Agility at Scale
Scrum vs Kanban - Implementing Agility at Scale
Cory Foy
Scrum & Kanban for Social Games
Scrum & Kanban for Social GamesScrum & Kanban for Social Games
Scrum & Kanban for Social Games
Wooga
Kanban boards step by step
Kanban boards step by stepKanban boards step by step
Kanban boards step by step
Giulio Roggero
Design Thinking Method Cards
Design Thinking Method CardsDesign Thinking Method Cards
Design Thinking Method Cards
Design Thinking HSG
GOTO Berlin - When Code Cries
GOTO Berlin - When Code CriesGOTO Berlin - When Code Cries
GOTO Berlin - When Code Cries
Cory Foy
Rails as a Pattern Language
Rails as a Pattern LanguageRails as a Pattern Language
Rails as a Pattern Language
Cory Foy
SQE Boston - When Code Cries
SQE Boston - When Code CriesSQE Boston - When Code Cries
SQE Boston - When Code Cries
Cory Foy
Patterns in Rails
Patterns in RailsPatterns in Rails
Patterns in Rails
Cory Foy
Collaborating with Customers using Innovation Game
Collaborating with Customers using Innovation GameCollaborating with Customers using Innovation Game
Collaborating with Customers using Innovation Game
Enthiosys Inc
Scrum and kanban
Scrum and kanbanScrum and kanban
Scrum and kanban
Agileee
Ruby for C# Developers
Ruby for C# DevelopersRuby for C# Developers
Ruby for C# Developers
Cory Foy
Agile Roots: The Agile Mindset - Agility Across the Organization
Agile Roots: The Agile Mindset - Agility Across the OrganizationAgile Roots: The Agile Mindset - Agility Across the Organization
Agile Roots: The Agile Mindset - Agility Across the Organization
Cory Foy
Choosing Between Scrum and Kanban - TriAgile 2015
Choosing Between Scrum and Kanban - TriAgile 2015Choosing Between Scrum and Kanban - TriAgile 2015
Choosing Between Scrum and Kanban - TriAgile 2015
Cory Foy
Code Katas
Code KatasCode Katas
Code Katas
Cory Foy
Stratgic Play - Doing the Right Thing at the Right Time
Stratgic Play - Doing the Right Thing at the Right TimeStratgic Play - Doing the Right Thing at the Right Time
Stratgic Play - Doing the Right Thing at the Right Time
Cory Foy
Continuous Deployment and Testing Workshop from Better Software West
Continuous Deployment and Testing Workshop from Better Software WestContinuous Deployment and Testing Workshop from Better Software West
Continuous Deployment and Testing Workshop from Better Software West
Cory Foy
Scrum vs Kanban - Implementing Agility at Scale
Scrum vs Kanban - Implementing Agility at ScaleScrum vs Kanban - Implementing Agility at Scale
Scrum vs Kanban - Implementing Agility at Scale
Cory Foy
Scrum & Kanban for Social Games
Scrum & Kanban for Social GamesScrum & Kanban for Social Games
Scrum & Kanban for Social Games
Wooga
Kanban boards step by step
Kanban boards step by stepKanban boards step by step
Kanban boards step by step
Giulio Roggero

More from Cory Foy (13)

Defending Commoditization: Mapping Gameplays and Strategies to Stay Ahead in ...
Defending Commoditization: Mapping Gameplays and Strategies to Stay Ahead in ...Defending Commoditization: Mapping Gameplays and Strategies to Stay Ahead in ...
Defending Commoditization: Mapping Gameplays and Strategies to Stay Ahead in ...
Cory Foy
When Code Cries
When Code CriesWhen Code Cries
When Code Cries
Cory Foy
Getting Unstuck: Working with Legacy Code and Data
Getting Unstuck: Working with Legacy Code and DataGetting Unstuck: Working with Legacy Code and Data
Getting Unstuck: Working with Legacy Code and Data
Cory Foy
Mud Tires: Getting Traction in Legacy Code
Mud Tires: Getting Traction in Legacy CodeMud Tires: Getting Traction in Legacy Code
Mud Tires: Getting Traction in Legacy Code
Cory Foy
Fostering Software Craftsmanship
Fostering Software CraftsmanshipFostering Software Craftsmanship
Fostering Software Craftsmanship
Cory Foy
Delivering What's Right
Delivering What's RightDelivering What's Right
Delivering What's Right
Cory Foy
Koans and Katas, Oh My! From redev 2010
Koans and Katas, Oh My! From redev 2010Koans and Katas, Oh My! From redev 2010
Koans and Katas, Oh My! From redev 2010
Cory Foy
Technically Distributed - Tools and Techniques for Distributed Teams
Technically Distributed - Tools and Techniques for Distributed TeamsTechnically Distributed - Tools and Techniques for Distributed Teams
Technically Distributed - Tools and Techniques for Distributed Teams
Cory Foy
Growing and Fostering Software Craftsmanship
Growing and Fostering Software CraftsmanshipGrowing and Fostering Software Craftsmanship
Growing and Fostering Software Craftsmanship
Cory Foy
IronRuby for the .NET Developer
IronRuby for the .NET DeveloperIronRuby for the .NET Developer
IronRuby for the .NET Developer
Cory Foy
Blackberry 101 - Day of Mobile, March 2010
Blackberry 101 - Day of Mobile, March 2010Blackberry 101 - Day of Mobile, March 2010
Blackberry 101 - Day of Mobile, March 2010
Cory Foy
Lean and Kanban Principles for Software Developers
Lean and Kanban Principles for Software DevelopersLean and Kanban Principles for Software Developers
Lean and Kanban Principles for Software Developers
Cory Foy
Tools for Agility
Tools for AgilityTools for Agility
Tools for Agility
Cory Foy
Defending Commoditization: Mapping Gameplays and Strategies to Stay Ahead in ...
Defending Commoditization: Mapping Gameplays and Strategies to Stay Ahead in ...Defending Commoditization: Mapping Gameplays and Strategies to Stay Ahead in ...
Defending Commoditization: Mapping Gameplays and Strategies to Stay Ahead in ...
Cory Foy
When Code Cries
When Code CriesWhen Code Cries
When Code Cries
Cory Foy
Getting Unstuck: Working with Legacy Code and Data
Getting Unstuck: Working with Legacy Code and DataGetting Unstuck: Working with Legacy Code and Data
Getting Unstuck: Working with Legacy Code and Data
Cory Foy
Mud Tires: Getting Traction in Legacy Code
Mud Tires: Getting Traction in Legacy CodeMud Tires: Getting Traction in Legacy Code
Mud Tires: Getting Traction in Legacy Code
Cory Foy
Fostering Software Craftsmanship
Fostering Software CraftsmanshipFostering Software Craftsmanship
Fostering Software Craftsmanship
Cory Foy
Delivering What's Right
Delivering What's RightDelivering What's Right
Delivering What's Right
Cory Foy
Koans and Katas, Oh My! From redev 2010
Koans and Katas, Oh My! From redev 2010Koans and Katas, Oh My! From redev 2010
Koans and Katas, Oh My! From redev 2010
Cory Foy
Technically Distributed - Tools and Techniques for Distributed Teams
Technically Distributed - Tools and Techniques for Distributed TeamsTechnically Distributed - Tools and Techniques for Distributed Teams
Technically Distributed - Tools and Techniques for Distributed Teams
Cory Foy
Growing and Fostering Software Craftsmanship
Growing and Fostering Software CraftsmanshipGrowing and Fostering Software Craftsmanship
Growing and Fostering Software Craftsmanship
Cory Foy
IronRuby for the .NET Developer
IronRuby for the .NET DeveloperIronRuby for the .NET Developer
IronRuby for the .NET Developer
Cory Foy
Blackberry 101 - Day of Mobile, March 2010
Blackberry 101 - Day of Mobile, March 2010Blackberry 101 - Day of Mobile, March 2010
Blackberry 101 - Day of Mobile, March 2010
Cory Foy
Lean and Kanban Principles for Software Developers
Lean and Kanban Principles for Software DevelopersLean and Kanban Principles for Software Developers
Lean and Kanban Principles for Software Developers
Cory Foy
Tools for Agility
Tools for AgilityTools for Agility
Tools for Agility
Cory Foy

Recently uploaded (20)

Adobe After Effects Crack latest version 2025
Adobe After Effects Crack latest version 2025Adobe After Effects Crack latest version 2025
Adobe After Effects Crack latest version 2025
saniasabbba
SketchUp Pro Crack [2025]-Free Download?
SketchUp Pro Crack [2025]-Free Download?SketchUp Pro Crack [2025]-Free Download?
SketchUp Pro Crack [2025]-Free Download?
kiran10101khan
Adobe Illustrator Crack Free Download 2025 latest version
Adobe Illustrator Crack Free Download 2025 latest versionAdobe Illustrator Crack Free Download 2025 latest version
Adobe Illustrator Crack Free Download 2025 latest version
saniasabbba
Enscape Latest 2025 Crack Free Download
Enscape Latest 2025  Crack Free DownloadEnscape Latest 2025  Crack Free Download
Enscape Latest 2025 Crack Free Download
rnzu5cxw0y
Mastering Software Test Automation: A Comprehensive Guide for Beginners and E...
Mastering Software Test Automation: A Comprehensive Guide for Beginners and E...Mastering Software Test Automation: A Comprehensive Guide for Beginners and E...
Mastering Software Test Automation: A Comprehensive Guide for Beginners and E...
Shubham Joshi
Wondershare Filmora Crack Free Download
Wondershare Filmora  Crack Free DownloadWondershare Filmora  Crack Free Download
Wondershare Filmora Crack Free Download
zqeevcqb3t
Hire Odoo Developer OnestopDA Experts.
Hire Odoo Developer  OnestopDA Experts.Hire Odoo Developer  OnestopDA Experts.
Hire Odoo Developer OnestopDA Experts.
OnestopDA
Why Every Cables and Wires Manufacturer Needs a Cloud-Based ERP Solutions
Why Every Cables and Wires Manufacturer Needs a Cloud-Based ERP SolutionsWhy Every Cables and Wires Manufacturer Needs a Cloud-Based ERP Solutions
Why Every Cables and Wires Manufacturer Needs a Cloud-Based ERP Solutions
Absolute ERP
AutoDesk Revit Crack | Revit Update 2025 free download
AutoDesk Revit Crack | Revit Update 2025 free downloadAutoDesk Revit Crack | Revit Update 2025 free download
AutoDesk Revit Crack | Revit Update 2025 free download
anamaslam971
Minitool Partition Wizard Crack Free Download
Minitool Partition Wizard Crack Free DownloadMinitool Partition Wizard Crack Free Download
Minitool Partition Wizard Crack Free Download
v3r2eptd2q
Carousel - Five Key FinTech Trends for 2025
Carousel - Five Key FinTech Trends for 2025Carousel - Five Key FinTech Trends for 2025
Carousel - Five Key FinTech Trends for 2025
Anadea
Instagram Feed Snippet, Instagram posts display in odoo website
Instagram Feed Snippet, Instagram posts display in odoo websiteInstagram Feed Snippet, Instagram posts display in odoo website
Instagram Feed Snippet, Instagram posts display in odoo website
AxisTechnolabs
OutSystems User Group Utrecht February 2025.pdf
OutSystems User Group Utrecht February 2025.pdfOutSystems User Group Utrecht February 2025.pdf
OutSystems User Group Utrecht February 2025.pdf
mail496323
Computer Architecture Patterson chapter 1 .ppt
Computer Architecture Patterson chapter 1 .pptComputer Architecture Patterson chapter 1 .ppt
Computer Architecture Patterson chapter 1 .ppt
jaysen110
iTop VPN Latest Version 2025 Crack Free Download
iTop VPN Latest Version 2025 Crack Free DownloadiTop VPN Latest Version 2025 Crack Free Download
iTop VPN Latest Version 2025 Crack Free Download
lr74xqnvuf
Data Storytelling for Portfolio Leaders - Webinar
Data Storytelling for Portfolio Leaders - WebinarData Storytelling for Portfolio Leaders - Webinar
Data Storytelling for Portfolio Leaders - Webinar
OnePlan Solutions
Cybersecurity & Innovation: The Future of Mobile App Development
Cybersecurity & Innovation: The Future of Mobile App DevelopmentCybersecurity & Innovation: The Future of Mobile App Development
Cybersecurity & Innovation: The Future of Mobile App Development
iProgrammer Solutions Private Limited
Online Software Testing Training Institute in Delhi Ncr
Online Software Testing Training Institute in Delhi NcrOnline Software Testing Training Institute in Delhi Ncr
Online Software Testing Training Institute in Delhi Ncr
Home
AI/ML Infra Meetup | Optimizing ML Data Access with Alluxio: Preprocessing, ...
AI/ML Infra Meetup | Optimizing ML Data Access with Alluxio:  Preprocessing, ...AI/ML Infra Meetup | Optimizing ML Data Access with Alluxio:  Preprocessing, ...
AI/ML Infra Meetup | Optimizing ML Data Access with Alluxio: Preprocessing, ...
Alluxio, Inc.
LDPlayer 9.1.20 Latest Crack Free Download
LDPlayer 9.1.20 Latest Crack Free DownloadLDPlayer 9.1.20 Latest Crack Free Download
LDPlayer 9.1.20 Latest Crack Free Download
5ls1bnl9iv
Adobe After Effects Crack latest version 2025
Adobe After Effects Crack latest version 2025Adobe After Effects Crack latest version 2025
Adobe After Effects Crack latest version 2025
saniasabbba
SketchUp Pro Crack [2025]-Free Download?
SketchUp Pro Crack [2025]-Free Download?SketchUp Pro Crack [2025]-Free Download?
SketchUp Pro Crack [2025]-Free Download?
kiran10101khan
Adobe Illustrator Crack Free Download 2025 latest version
Adobe Illustrator Crack Free Download 2025 latest versionAdobe Illustrator Crack Free Download 2025 latest version
Adobe Illustrator Crack Free Download 2025 latest version
saniasabbba
Enscape Latest 2025 Crack Free Download
Enscape Latest 2025  Crack Free DownloadEnscape Latest 2025  Crack Free Download
Enscape Latest 2025 Crack Free Download
rnzu5cxw0y
Mastering Software Test Automation: A Comprehensive Guide for Beginners and E...
Mastering Software Test Automation: A Comprehensive Guide for Beginners and E...Mastering Software Test Automation: A Comprehensive Guide for Beginners and E...
Mastering Software Test Automation: A Comprehensive Guide for Beginners and E...
Shubham Joshi
Wondershare Filmora Crack Free Download
Wondershare Filmora  Crack Free DownloadWondershare Filmora  Crack Free Download
Wondershare Filmora Crack Free Download
zqeevcqb3t
Hire Odoo Developer OnestopDA Experts.
Hire Odoo Developer  OnestopDA Experts.Hire Odoo Developer  OnestopDA Experts.
Hire Odoo Developer OnestopDA Experts.
OnestopDA
Why Every Cables and Wires Manufacturer Needs a Cloud-Based ERP Solutions
Why Every Cables and Wires Manufacturer Needs a Cloud-Based ERP SolutionsWhy Every Cables and Wires Manufacturer Needs a Cloud-Based ERP Solutions
Why Every Cables and Wires Manufacturer Needs a Cloud-Based ERP Solutions
Absolute ERP
AutoDesk Revit Crack | Revit Update 2025 free download
AutoDesk Revit Crack | Revit Update 2025 free downloadAutoDesk Revit Crack | Revit Update 2025 free download
AutoDesk Revit Crack | Revit Update 2025 free download
anamaslam971
Minitool Partition Wizard Crack Free Download
Minitool Partition Wizard Crack Free DownloadMinitool Partition Wizard Crack Free Download
Minitool Partition Wizard Crack Free Download
v3r2eptd2q
Carousel - Five Key FinTech Trends for 2025
Carousel - Five Key FinTech Trends for 2025Carousel - Five Key FinTech Trends for 2025
Carousel - Five Key FinTech Trends for 2025
Anadea
Instagram Feed Snippet, Instagram posts display in odoo website
Instagram Feed Snippet, Instagram posts display in odoo websiteInstagram Feed Snippet, Instagram posts display in odoo website
Instagram Feed Snippet, Instagram posts display in odoo website
AxisTechnolabs
OutSystems User Group Utrecht February 2025.pdf
OutSystems User Group Utrecht February 2025.pdfOutSystems User Group Utrecht February 2025.pdf
OutSystems User Group Utrecht February 2025.pdf
mail496323
Computer Architecture Patterson chapter 1 .ppt
Computer Architecture Patterson chapter 1 .pptComputer Architecture Patterson chapter 1 .ppt
Computer Architecture Patterson chapter 1 .ppt
jaysen110
iTop VPN Latest Version 2025 Crack Free Download
iTop VPN Latest Version 2025 Crack Free DownloadiTop VPN Latest Version 2025 Crack Free Download
iTop VPN Latest Version 2025 Crack Free Download
lr74xqnvuf
Data Storytelling for Portfolio Leaders - Webinar
Data Storytelling for Portfolio Leaders - WebinarData Storytelling for Portfolio Leaders - Webinar
Data Storytelling for Portfolio Leaders - Webinar
OnePlan Solutions
Online Software Testing Training Institute in Delhi Ncr
Online Software Testing Training Institute in Delhi NcrOnline Software Testing Training Institute in Delhi Ncr
Online Software Testing Training Institute in Delhi Ncr
Home
AI/ML Infra Meetup | Optimizing ML Data Access with Alluxio: Preprocessing, ...
AI/ML Infra Meetup | Optimizing ML Data Access with Alluxio:  Preprocessing, ...AI/ML Infra Meetup | Optimizing ML Data Access with Alluxio:  Preprocessing, ...
AI/ML Infra Meetup | Optimizing ML Data Access with Alluxio: Preprocessing, ...
Alluxio, Inc.
LDPlayer 9.1.20 Latest Crack Free Download
LDPlayer 9.1.20 Latest Crack Free DownloadLDPlayer 9.1.20 Latest Crack Free Download
LDPlayer 9.1.20 Latest Crack Free Download
5ls1bnl9iv

Ruby and OO for Beginners

  • 1. Ruby and OO Cory Foy | @cory_foy http://www.coryfoy.com Triangle.rb June 24, 2014 Thursday, June 26, 14
  • 2. Triangle.rb Meetup June 25th, 2012 Cory Foy | @cory_foy http://www.coryfoy.com Ruby and OO Overview What is Ruby? Ruby Basics Advanced Ruby Wrap-up Thursday, June 26, 14
  • 3. Triangle.rb Meetup June 25th, 2012 Cory Foy | @cory_foy http://www.coryfoy.com Ruby and OO What is Ruby? First released in 1995 by Yukihiro Matsumoto (Matz) Object-Oriented number = 1.abs #instead of Math.abs(1) Dynamically Typed result = 1+3 Thursday, June 26, 14
  • 4. Triangle.rb Meetup June 25th, 2012 Cory Foy | @cory_foy http://www.coryfoy.com Ruby and OO What is Ruby? http://www.rubygarden.org/faq/entry/show/3 class Person attr_accessor :name, :age # attributes we can set and retrieve def initialize(name, age) # constructor method @name = name # store name and age for later retrieval @age = age.to_i # (store age as integer) end def inspect # This method retrieves saved values "#{@name} (#{@age})" # in a readable format end end p1 = Person.new('elmo', 4) # elmo is the name, 4 is the age puts p1.inspect # prints elmo (4) Thursday, June 26, 14
  • 5. Triangle.rb Meetup June 25th, 2012 Cory Foy | @cory_foy http://www.coryfoy.com Ruby and OO Will It Change Your Life? Yes! Ok, Maybe Its fun to program with And what is programming if it isnt fun? Thursday, June 26, 14
  • 6. Triangle.rb Meetup June 25th, 2012 Cory Foy | @cory_foy http://www.coryfoy.com Ruby and OO Ruby Basics Variables, Classes and Methods Properties / Attributes Exceptions Access Control Importing Files and Libraries Duck Typing Thursday, June 26, 14
  • 7. Triangle.rb Meetup June 25th, 2012 Cory Foy | @cory_foy http://www.coryfoy.com Ruby and OO Ruby Basics - Variables Local (lowercase, underscores) fred_j = Person.new(Fred) Instance (@ sign with lowercase) @name = name Class (@@ with lowercase) @@error_email = testing@test.com Constant (Starts with uppercase) MY_PI = 3.14 class Move Global ($ with name) $MEANING_OF_LIFE = 42 Thursday, June 26, 14
  • 8. Triangle.rb Meetup June 25th, 2012 Cory Foy | @cory_foy http://www.coryfoy.com Ruby and OO Variables contain references to objects Thursday, June 26, 14
  • 9. Triangle.rb Meetup June 25th, 2012 Cory Foy | @cory_foy http://www.coryfoy.com Ruby and OO Ruby Basics - Classes Class definitions are started with class,are named with a CamelCase name, and ended with end class Move attr_accessor :up, :right def initialize(up, right) @up = up @right = right end end Thursday, June 26, 14
  • 10. Triangle.rb Meetup June 25th, 2012 Cory Foy | @cory_foy http://www.coryfoy.com Ruby and OO Classes (and Modules) are Objects Thursday, June 26, 14
  • 11. Triangle.rb Meetup June 25th, 2012 Cory Foy | @cory_foy http://www.coryfoy.com Ruby and OO Ruby Basics - Classes Attributes and fields normally go at the beginning of the class definition class Move attr_accessor :up, :right def initialize(up, right) @up = up @right = right end end Thursday, June 26, 14
  • 12. Triangle.rb Meetup June 25th, 2012 Cory Foy | @cory_foy http://www.coryfoy.com Ruby and OO Ruby Basics - Classes initialize is the same concept as a constructor from .NET or Java, and is called when someone invokes your object using Move.new to set up the objects state class Move attr_accessor :up, :right def initialize(up, right) @up = up @right = right end end Thursday, June 26, 14
  • 13. Triangle.rb Meetup June 25th, 2012 Cory Foy | @cory_foy http://www.coryfoy.com Ruby and OO Ruby Basics - Methods Methods return the last expression evaluated. You can also explicitly return from methods class Move def up @up end def right return @right end end Thursday, June 26, 14
  • 14. Triangle.rb Meetup June 25th, 2012 Cory Foy | @cory_foy http://www.coryfoy.com Ruby and OO Every Expression Evaluates to an Object Thursday, June 26, 14
  • 15. Triangle.rb Meetup June 25th, 2012 Cory Foy | @cory_foy http://www.coryfoy.com Ruby and OO Ruby Basics - Methods Methods can take in specified parameters, and also parameter lists (using special notation) class Move def initialize(up, right) @up = up @right = right end end Thursday, June 26, 14
  • 16. Triangle.rb Meetup June 25th, 2012 Cory Foy | @cory_foy http://www.coryfoy.com Ruby and OO Its All About Sending Messages to Objects Thursday, June 26, 14
  • 17. Triangle.rb Meetup June 25th, 2012 Cory Foy | @cory_foy http://www.coryfoy.com Ruby and OO Ruby Basics - Methods Class (Static) methods start with either self. or Class. class Move def self.create return Move.new end def Move.logger return @@logger end end Thursday, June 26, 14
  • 18. Triangle.rb Meetup June 25th, 2012 Cory Foy | @cory_foy http://www.coryfoy.com Ruby and OO Ruby Basics - Properties Ruby supports the concept of Properties (called Attributes) class Move def up @up end end class Move def up=(val) @up = val end end move = Move.new move.up = 15 puts move.up #15 Thursday, June 26, 14
  • 19. Triangle.rb Meetup June 25th, 2012 Cory Foy | @cory_foy http://www.coryfoy.com Ruby and OO Ruby Basics - Properties Ruby also provides convenience methods for doing this class Move attr_accessor :up #Same thing as last slide end move = Move.new move.up = 15 puts move.up #15 Thursday, June 26, 14
  • 20. Triangle.rb Meetup June 25th, 2012 Cory Foy | @cory_foy http://www.coryfoy.com Ruby and OO Ruby Basics - Properties You can specify read or write only attributes as well class Move attr_reader :up #Cant write attr_writer :down #Cant read end move = Move.new move.up = 15 #error d = move.down #error Thursday, June 26, 14
  • 21. Triangle.rb Meetup June 25th, 2012 Cory Foy | @cory_foy http://www.coryfoy.com Ruby and OO Ruby Basics - Exceptions Ruby has an Exception hierarchy Exceptions can be caught, raised and handled You can also easily retry a block of code when you encounter an exception Thursday, June 26, 14
  • 22. Triangle.rb Meetup June 25th, 2012 Cory Foy | @cory_foy http://www.coryfoy.com Ruby and OO Ruby Basics - Exceptions process_鍖le = File.open(test鍖le.csv) begin #put exceptional code in begin/end block #...process 鍖le rescue IOError => io_error puts IOException occurred. Retrying. retry #starts block over from begin rescue => other_error puts Bad stuff happened: + other_error else #happens if no exceptions occur puts No errors in processing. Yippee! ensure # similar to 鍖nally in .NET/Java process_鍖le.close unless process_鍖le.nil? end Thursday, June 26, 14
  • 23. Triangle.rb Meetup June 25th, 2012 Cory Foy | @cory_foy http://www.coryfoy.com Ruby and OO Ruby Basics Access Control Ruby supports Public, Protected and Private methods Private methods can only be accessed from the instance of the object, not from any other object, even those of the same class as the instance Thursday, June 26, 14
  • 24. Triangle.rb Meetup June 25th, 2012 Cory Foy | @cory_foy http://www.coryfoy.com Ruby and OO Ruby Basics Access Control Access is controlled by using keywords class Move private def calculate_move end #Any subsequent methods will be private until.. public def show_move end #Any subsequent methods will now be public end Thursday, June 26, 14
  • 25. Triangle.rb Meetup June 25th, 2012 Cory Foy | @cory_foy http://www.coryfoy.com Ruby and OO Ruby Basics Access Control Methods can also be passed as args class Move def calculate_move end def show_move end public :show_move protected :calculate_move end Thursday, June 26, 14
  • 26. Triangle.rb Meetup June 25th, 2012 Cory Foy | @cory_foy http://www.coryfoy.com Ruby and OO Ruby Basics - Imports To use a class from another file in your class, you must tell your source file where to find the class you want to use require calculator class Move def calculate_move return @up * Calculator::MIN_MOVE end end Thursday, June 26, 14
  • 27. Triangle.rb Meetup June 25th, 2012 Cory Foy | @cory_foy http://www.coryfoy.com Ruby and OO Ruby Basics - Imports There are two types of imports require Only loads the file once load Loads the file every time the method is executed Both accept relative and absolute paths, and will search the current load path for the file Thursday, June 26, 14
  • 28. Triangle.rb Meetup June 25th, 2012 Cory Foy | @cory_foy http://www.coryfoy.com Ruby and OO Ruby Basics Duck Typing What defines an object? How can you tell a car is a car? By model? By name? Or, by its behavior? Thursday, June 26, 14
  • 29. Triangle.rb Meetup June 25th, 2012 Cory Foy | @cory_foy http://www.coryfoy.com Ruby and OO Ruby Basics Duck Typing Wed use static typing! So only the valid object could be passed in What if my object has the same behavior as a Car? class CarWash def accept_customer(car) end end How would we validate this in .NET or Java? Thursday, June 26, 14
  • 30. Triangle.rb Meetup June 25th, 2012 Cory Foy | @cory_foy http://www.coryfoy.com Ruby and OO Ruby Basics Duck Typing What is this? Thursday, June 26, 14
  • 31. Triangle.rb Meetup June 25th, 2012 Cory Foy | @cory_foy http://www.coryfoy.com Ruby and OO Ruby Basics Duck Typing How about this? Thursday, June 26, 14
  • 32. Triangle.rb Meetup June 25th, 2012 Cory Foy | @cory_foy http://www.coryfoy.com Ruby and OO Ruby Basics Duck Typing What about this? Thursday, June 26, 14
  • 33. Triangle.rb Meetup June 25th, 2012 Cory Foy | @cory_foy http://www.coryfoy.com Ruby and OO Ruby Basics Duck Typing We know objects based on the behaviors and attributes the object possesses This means if the object passed in can act like the object we want, that should be good enough for us! Thursday, June 26, 14
  • 34. Triangle.rb Meetup June 25th, 2012 Cory Foy | @cory_foy http://www.coryfoy.com Ruby and OO Ruby Basics Duck Typing Or we could just let it fail as a runtime error Class CarWash def accept_customer(car) if car.respond_to?(:drive_to) @car = car wash_car else reject_customer end end end Thursday, June 26, 14
  • 35. Triangle.rb Meetup June 25th, 2012 Cory Foy | @cory_foy http://www.coryfoy.com Ruby and OO Advanced Ruby - Blocks A block is just a section of code between a set of delimters { } or do..end { puts Ho } 3.times do puts Ho end #prints Ho Ho Ho Thursday, June 26, 14
  • 36. Triangle.rb Meetup June 25th, 2012 Cory Foy | @cory_foy http://www.coryfoy.com Ruby and OO Advanced Ruby - Blocks Blocks can be associated with method invocations. The methods call the block using yield def format_print puts Con鍖dential. Do Not Disseminate. yield puts 息 SomeCorp, 2006 end format_print { puts My name is Earl! } -> Con鍖dential. Do Not Disseminate. -> My name is Earl! -> 息 SomeCorp, 2006 Thursday, June 26, 14
  • 37. Triangle.rb Meetup June 25th, 2012 Cory Foy | @cory_foy http://www.coryfoy.com Ruby and OO Advanced Ruby - Blocks We can check to see if a block was passed to our method def MyConnection.open(*args) conn = Connection.open(*args) if block_given? yield conn #passes conn to the block conn.close #closes conn when block 鍖nishes end return conn end Thursday, June 26, 14
  • 38. Triangle.rb Meetup June 25th, 2012 Cory Foy | @cory_foy http://www.coryfoy.com Ruby and OO Advanced Ruby - Iterators Iterators in Ruby are simply methods that can invoke a block of code Iterators typically pass one or more values to the block to be evaluated Thursday, June 26, 14
  • 39. Triangle.rb Meetup June 25th, 2012 Cory Foy | @cory_foy http://www.coryfoy.com Ruby and OO Advanced Ruby - Iterators def 鍖b_up_to(max) i1, i2 = 1, 1 while i1 <= max yield i1 i1, i2 = i2, i1+i2 # parallel assignment end end 鍖b_up_to(100) {|f| print f + } -> 1 1 2 3 5 8 13 21 34 55 89 Pickaxe Book, page 50 Thursday, June 26, 14
  • 40. Triangle.rb Meetup June 25th, 2012 Cory Foy | @cory_foy http://www.coryfoy.com Ruby and OO Advanced Ruby - Modules At their core, Modules are like namespaces in .NET or Java. module Kite def Kite.鍖y end end module Plane def Plane.鍖y end end Thursday, June 26, 14
  • 41. Triangle.rb Meetup June 25th, 2012 Cory Foy | @cory_foy http://www.coryfoy.com Ruby and OO Advanced Ruby - Mixins Modules cant have instances they arent classes But Modules can be included in classes, who inherit all of the instance method definitions from the module This is called a mixin and is how Ruby does Multiple Inheritance Thursday, June 26, 14
  • 42. Triangle.rb Meetup June 25th, 2012 Cory Foy | @cory_foy http://www.coryfoy.com Ruby and OO Advanced Ruby - Mixins module Print def print puts Company Con鍖dential yield end end class Document include Print #... end doc = Document.new doc.print { Fourth Quarter looks great! } -> Company Con鍖dential -> Fourth Quarter looks great! Thursday, June 26, 14
  • 43. Triangle.rb Meetup June 25th, 2012 Cory Foy | @cory_foy http://www.coryfoy.com Ruby and OO Advanced Ruby - Reflection How could we call the Length of a String at runtime in .NET? String myString = "test"; int len = (int)myString .GetType() .InvokeMember("Length", System.Re鍖ection.BindingFlags.GetProperty, null, myString, null); Console.WriteLine("Length: " + len.ToString()); Thursday, June 26, 14
  • 44. Triangle.rb Meetup June 25th, 2012 Cory Foy | @cory_foy http://www.coryfoy.com Ruby and OO Advanced Ruby - Reflection In Ruby, we can just send the command to the object myString = Test puts myString.send(:length) # 4 Thursday, June 26, 14
  • 45. Triangle.rb Meetup June 25th, 2012 Cory Foy | @cory_foy http://www.coryfoy.com Ruby and OO Advanced Ruby - Reflection We can also do all kinds of fancy stuff #print out all of the objects in our system ObjectSpace.each_object(Class) {|c| puts c} #Get all the methods on an object Some String.methods #see if an object responds to a certain method obj.respond_to?(:length) #see if an object is a type obj.kind_of?(Numeric) obj.instance_of?(FixNum) Thursday, June 26, 14
  • 46. Triangle.rb Meetup June 25th, 2012 Cory Foy | @cory_foy http://www.coryfoy.com Ruby and OO Sending Can Be Very, Very Bad Thursday, June 26, 14
  • 47. Triangle.rb Meetup June 25th, 2012 Cory Foy | @cory_foy http://www.coryfoy.com Ruby and OO Ruby Basics Other Goodies RubyGems Package Management for Ruby Libraries Rake A Pure Ruby build tool (can use XML as well for the build files) RDoc Automatically extracts documentation from your code and comments Thursday, June 26, 14
  • 48. Triangle.rb Meetup June 25th, 2012 Cory Foy | @cory_foy http://www.coryfoy.com Ruby and OO Ruby Resources Programming Ruby by Dave Thomas (the Pickaxe Book) http://www.ruby-lang.org http://www.rubycentral.org http://www.ruby-doc.org http://www.triangleruby.com http://www.manning.com/black3/ http://www.slideshare.net/dablack/wgnuby Thursday, June 26, 14