Термин «я» в Ruby был одним из самых сложных для понимания. Бывают случаи, когда «я» относится к классу, а бывают случаи, когда «я» относится к экземпляру этого класса, что влияет на то, как мы пишем методы.

Чтобы понять методы экземпляра и класса, давайте сначала разберем, что такое экземпляры и классы на самом деле. Класс, по сути, представляет собой набор экземпляров. Если мы думаем об этом вместе с базой данных, класс представляет всю таблицу, а экземпляры представляют каждую строку этой таблицы.

Теперь, когда мы понимаем, как связаны экземпляры и классы, мы можем поговорить о методах. Методы — это то, что мы используем для манипулирования и экстраполяции деталей из нашей базы данных. Мы можем создавать методы для поиска, сортировки, удаления и многого другого. Вопрос на миллион долларов звучит так: «Хотим ли мы, чтобы наш метод влиял на класс в целом, или мы хотим, чтобы наш метод влиял на каждый экземпляр?»


Методы класса

Если мы хотим, чтобы наш метод влиял на наш класс в целом, нам нужно написать метод класса. Методы класса обычно представляются с точкой, например ClassName.method_name. Это дает нам понять, что наше «я» — это класс, поэтому наш код будет выглядеть примерно так:

class ClassName
   def self.method_name
      ClassName.method
   end
end
Войти в полноэкранный режим

Выйти из полноэкранного режима


Методы экземпляра

Если мы хотим, чтобы наш метод воздействовал на каждый экземпляр класса, нам нужно написать метод экземпляра. Методы экземпляра обычно представлены хэштегом, например ClassName#method_name. Это дает нам понять, что наше «я» является экземпляром, поэтому наш код будет выглядеть примерно так:

class ClassName
   def method_name
      self.method
   end
end
Войти в полноэкранный режим

Выйти из полноэкранного режима


Хм, хорошо, но я все еще в замешательстве

Если вы все еще чувствуете, что это «я» пугает, я рекомендую использовать консоль для проверки. Во Flatiron нас призвали начать сеанс прослушивания, чтобы проверить наши методы в консоли. Для методов класса мы набираем ClassName.method_name. Например, методы, нам нужно подумать о конкретном экземпляре для тестирования. Один встроенный корпус является «первым» экземпляром. Это будет первая строка таблицы. Итак, при тестировании методов в консоли мы можем ввести ClassName.first.method_name.


Вывод

Я оставлю вас с тем, что я повторял про себя много раз: методы класса влияют на весь класс, то есть на всю таблицу; методы экземпляра влияют на экземпляр классаон же строка таблицы.