Object-Oriented Programming
Identifying Objects
In Ruby almost everything is an object - including numerics, booleans, strings and symbols - and each object in Ruby has a unique id.
1.object_id # => 3
"1".object_id # => 70102006679520
class Animal; end
Animal.object_id # => 70102006843460
Animal.new.object_id # => 70102007385240
Animal.new.object_id # => 70102024293860
Sending Messages
It could be argued that the basis of Ruby programming is sending messages to objects and dealing with their responses. 1+2
is really sending a message :+
to the object 1
with the argument of 2
. The whole adding operation is really a syntactic sugar for 1.send(:+, 2)
Responding to Messages
Each object in Ruby responds to a message in one way or another. If the object knows how to handle the message it returns some value and if it does not it raises a NoMethodError
.
class Animal
def self.walk
"Walking ..."
end
end
Animal.walk # => "Walking ..."
Animal.fly # => NoMethodError: undefined method `fly' for Animal:Class
Self
As opposed to JavaScript where this
might be undefined
in Ruby there is always a self
object. self
means the current object within context of which methods are being defined and code evaluation is being effected. Even after directly accessing a Ruby console and without creating any objects there is a self
.
$ irb
> self # => main
Methods defined within a context of main
object are not anonymous functions as they are associated with the main
object. This puts into question an existence in Ruby of pure procedural programming paradigm.