Держу пари, ты уже пекла печенье. Если вы еще не видели, вы наверняка видели, как кто-то отмерял и смешивал муку, яйца, сахар и масло. У всех нас есть представление о том, из чего состоит файл cookie, но каждый файл cookie в чем-то уникален. Может быть, секрет рецепта печенья вашего отца заключается в том, что он добавляет в него дополнительную столовую ложку сливочного масла. Может быть, ваша тетя добавляет щепотку мускатного ореха. Может быть, ваш сосед по комнате любит заменять молочный шоколад чипсами из темного шоколада. Все здесь следуют одному и тому же рецепту, но получаются разные продукты.
Именно так работают классы на любом объектно-ориентированном языке (например, Ruby или Python). Класс — это, по сути, рецепт — тот, который может создавать разные версии одного и того же типа снова и снова. Давайте посмотрим на пример:
class Cookie end
Мы хотим создать класс cookie, чтобы мы могли написать кулинарную книгу, используя Ruby. Cookie нужно писать с заглавной буквы, чтобы Ruby распознавал его как класс. Здорово! Все идет нормально. Мы хотим, чтобы все наши файлы cookie имели некоторую стандартную информацию: тип файла cookie, количество чашек муки, надстройки любого типа и количество файлов cookie, которые делает рецепт. Мы решили, что это важные определяющие факторы файла cookie.
class Cookie def initialize(type, cups_of_flour, add_ins, number) @type = type @cups_of_flour = cups_of_flour @add_ins = add_ins @number = number end end
Здесь мы используем метод инициализации, чтобы сообщить Ruby, с чем должен быть создан каждый файл cookie. Каждый файл cookie должен принимать несколько фрагментов информации, и эта информация должна быть доступна для всего класса, чтобы мы могли использовать эту информацию позже. Это то, что происходит внутри метода инициализации — мы создаем переменные экземпляра из предоставленной нам информации.
Теперь мы хотим иметь возможность что-то делать с этой информацией. Вот тут-то и появляются методы нашего класса.
class Cookie def initialize(type, cups_of_flour, add_ins, number) @type = type @cups_of_flour = cups_of_flour @add_ins = add_ins @number = number end def type @type end end
Это выглядит довольно глупо, но этот метод type
позволяет нам получить доступ к @type
, когда мы захотим. Теперь давайте сделаем cookie и посмотрим:
class Cookie def initialize(type, cups_of_flour, add_ins, number) @type = type @cups_of_flour = cups_of_flour @add_ins = add_ins @number = number end def type @type end end cookie1 = Cookie.new(sugar, 1.5, cinnamon, 12) cookie1.type >>sugar
Здесь внизу мы создали новую версию Cookie с некоторыми специфическими атрибутами. Это конкретное печенье представляет собой сахарное печенье, в него входит 1,5 стакана муки, добавляется корица, и получается 12 печений. Когда мы используем метод type
для нашего нового файла cookie, он показывает нам тип, который мы ввели ранее. Мы только что испекли новое печенье по нашему рецепту! Далее мы хотим добавить больше методов
class Cookie def initialize(type, cups_of_flour, add_ins, number) @type = type @cups_of_flour = cups_of_flour @add_ins = add_ins @number = number end def type @type end def cups_of_flour “#{@cups_of_flour} cups of flour” end def add_ins @add_ins end def number “#{@number} cookies” end def all_gone "The cookies are all gone! end end cookie1 = Cookie.new(“sugar”, 1.5, “cinnamon”, 12) puts cookie1.type >>"sugar" puts cookie1.cups_of_flour >>"1.5 cups of flour" puts cookie1.add_ins >>"cinnamon" puts cookie1.number >>"12 cookies" puts cookie1.all_gone >>"The cookies are all gone!"
Теперь мы можем получить доступ ко всем уникальным аспектам cookie1
!
Используя тот же самый план, мы можем сделать множество различных типов файлов cookie.
cookie2 = Cookie.new(“chocolate chip”, 1.5, “almonds”, 24) puts cookie2.type >>"chocolate chip" puts cookie2.add_ins >>"almonds" puts cookie2.number >>"24 cookies"
Вот и все! Вы создали свой первый класс Ruby. А теперь иди и испеки печенье!