Сегодня у меня была первая оценка, и она прошла хорошо, я много возился. Я вернулся и собираюсь попробовать еще раз с моими новыми знаниями о классах и экземплярах. Это ускользнуло от меня во время оценки, но класс — это шаблон или «идея», которую мы использовали для создания объектов в программе, которую мы собираемся сделать. Когда разработчики работают над проектом, им нужен план, чтобы они знали, в каком направлении двигаться. В Ruby то же самое, класс содержит инструкции по созданию этих объектов, а также возможность для создания указанных объектов. Когда человек использует .new в классе, мы создаем совершенно новый объект, используя наш план, но вы можете подумать, как этот объект работает, ну, вот тут-то и появляется часть экземпляра. Экземпляр — это единственный появление объекта, когда мы, как программисты, используем экземпляр, мы вдыхаем жизнь в объект, и он становится отдельным объектом, производимым из класса. В кодировании у нас есть переменные класса, методы и области видимости, а также экземпляры этих вещей.

Переменная класса против переменной экземпляра: сначала давайте начнем с переменных, переменная класса, которая использует @@, является переменными, которые являются общими для данного класса и всех его подклассов, тогда как переменная экземпляра, которая использует @, доступна только в любом экземпляре метод в определенном классе и принадлежит только этому классу. Это означает, что значение, хранящееся в переменной экземпляра, специфично для любого экземпляра класса, к которому он принадлежит. Эти переменные экземпляра также можно назвать переменными экземпляра класса, поскольку они принадлежат этому классу. С другой стороны, переменная класса, как я упоминал ранее, доступна среди всех объектов, пока она инициализирована; другой способ думать об этом состоит в том, что переменная класса является глобальной в контексте одного класса, а экземпляр является локальным для объекта. Переменная экземпляра также отвечает за хранение информации об экземпляре класса и доступна только для экземпляра, в то время как переменная класса доступна для всего класса, она имеет область действия класса и хранит информацию о классе в целом.

Методы класса против методов экземпляра. Метод класса предоставляет функциональность самому классу и работает с классом в целом, но не имеет доступа к переменной конкретного экземпляра, если вы не сделаете экземпляр переменной. Методы экземпляра являются общими для всех экземпляров класса и живут в объекте класса. Как я упоминал ранее, методы класса используются для функций, которые не являются специфическими для какого-либо экземпляра класса. Метод экземпляра отличается, потому что вы используете его, когда вам нужно действовать с конкретным экземпляром класса.

Область действия класса и область действия экземпляра. Область действия определяет, откуда доступна переменная в программе, хотя у ruby ​​пять областей видимости: константа, локальная, глобальная, класс и экземпляр. Я буду говорить о классе и экземпляре. Я упомянул в разделе переменных, что при написании переменной класса вы используете @@. Это область действия класса, которая позволяет использовать ее для всех экземпляров класса. Если вы измените значение переменной, новое значение также изменит все остальные переменные. Область действия экземпляра использует @ при записи переменных экземпляра. Они похожи на переменную класса, но вместо того, чтобы быть общими для класса, их значения являются локальными для конкретного экземпляра объекта.

Ого, кажется, я много об этом говорил, но давайте сегодня рассмотрим нашу последнюю тему: Attr_accessor на этом примере. В Pokemon у нас есть Kyogre, который правит водой, и Groudon, который правит землей. Оба этих покемона имеют возможность формировать соответствующие регионы по своему усмотрению. Они оба похожи на attr_accessors, так как у них есть возможность доступа к воде и земле соответственно, и это то, чем является attr_accessor. Это ruby-модуль, который имеет возможность читать и писать по-другому: attr_reader + attr_writer = attr_accessor. Кайорге и Гроудон могут читать воду и землю, а затем писать и редактировать их. Это еще один способ использования геттеров и сеттеров, относящихся к одному и тому же атрибуту.