Classes
Classes
- Avoid the usage of class (
@@) variables
due to their “nasty” behavior in inheritance.
[link]
class Parent
@@class_var = 'parent'
def self.print_class_var
puts @@class_var
end
end
class Child < Parent
@@class_var = 'child'
end
Parent.print_class_var # => will print "child"
As you can see all the classes in a class hierarchy actually share one
class variable. Class instance variables should usually be preferred
over class variables.
- Use
def self.methodto define singleton
methods. This makes the methods more resistant to refactoring changes.
[link]
class TestClass
# bad
def TestClass.some_method
...
end
# good
def self.some_other_method
...
end
- Avoid
class << selfexcept when necessary,
e.g. single accessors and aliased attributes.
[link]
class TestClass
# bad
class << self
def first_method
...
end
def second_method_etc
...
end
end
# good
class << self
attr_accessor :per_page
alias_method :nwo, :find_by_name_with_owner
end
def self.first_method
...
end
def self.second_method_etc
...
end
end
- Indent the
public,protected, and
privatemethods as much the method definitions they apply to. Leave one
blank line above and below them.[link]
class SomeClass
def public_method
# ...
end
private
def private_method
# ...
end
end
