# Modules

Module is a chunk of code you can include in a class or into another module:

module MyModule
attr_accessor :x, :y

def initialize(options={})
@x = options[:x] || 0
@y = options[:y] || 0
end

def right
self.x += 1
end

def left
self.x -= 1
end

def up
self.y += 1
end

def down
self.y -= 1
end
end

class Robot
include MyModule

def label
'*'
end
end

class Dog
include MyModule

def up
end

def left
end

def label
'@'
end
end

class Human
include MyModule

def label
'H'
end
end


In the program above we defined the module with “module... end” syntax and included the module to our classes with “include” keyword. Class diagram would look like this:

Visually it looks pretty much like inheritance. However, using inheritance just to copy/share the code is not cool, it’s just not the right tool. It’s better to be honest about what are you doing. With modules you are honest and you admit: yes, I’m just copying the code, there is no any inheritance involved.