Добро пожаловать в мир объектно-ориентированного Ruby! Объектно-ориентированный Ruby сейчас может показаться сложным и подавляющим, но не бойтесь, потому что я здесь, чтобы показать вам, что все может быть довольно простым. Хранение ваших кодов в классах сделает вашу программу более эффективной и читаемой, чем когда-либо прежде. Ruby - сладкий язык, набитый полезными инструментами, которые помогают нам сделать наш код работающим с максимальной эффективностью. Ruby изобилует отличными макросами, которые помогают нам выполнять множество задач. Ruby разработан для вас, программиста, и он хочет, чтобы вы были как можно более ленивыми, поэтому использование этих инструментов, которые он предоставляет, может максимизировать как нашу мощь, так и нашу лень!

МАКРОСЫ ATTR

Ах, наши attr-макросы и как они делают наш код простым и красивым! Если вы попробуете использовать макрос attr, пути назад уже не будет! Прошли те времена, когда писали свои методы получения и установки. Занимая драгоценное пространство и зря теряя драгоценное время! Мы можем разместить attr_writer в верхней части нашей конструкции нашего класса для создания метода установки, attr_reader для создания метода получения, или мы можем использовать attr_accessor для создания обоих из них для нас. Эти простые макросы обладают мощным эффектом и делают наш код более универсальным с помощью всего одной простой строчки. Одна-две строки кода, и наш класс уже наполовину построен! Обожаю это для нас! Ниже приведен пример того, как каждый из них может искать информацию, которую мы хотели бы инициализировать для класса Dog.

Хранение ВСЕЙ информации о классе

Вы можете подумать, конечно, это здорово, что мы все это создали. Конечно, мы создали класс, который может создавать новые экземпляры Dogs (или как вам угодно, некоторые люди предпочитают кошек, а я универсален). Но где мы будем хранить всю эту информацию, чтобы иметь к ней доступ? Вы совершенно правы! Нам нужен метод для доступа ко всей информации, хранящейся в этом классе. Вот где пригодится удобная переменная класса! Переменные класса начинаются с @@, и типичное соглашение для классов состоит в том, чтобы хранить всю информацию внутри переменной класса с именем @@, все установлено равным пустому массиву (на данный момент), я имею в виду, верно? Совершенно очевидно, что то, что мы храним ВСЮ информацию, называется @@ all. Но нам также нужен метод для доступа ко ВСЕЙ информации, хранящейся в @@ all. Мы могли бы создать метод Dog.all, который действует как считыватель массива, но другое соглашение Ruby делает наш код более динамичным и универсальным для использования в будущем.

Доступ к этим переменным

Переменные здесь, в OO Ruby, выглядят немного иначе. Вы можете видеть выше, что в нашем коде есть все эти @, и это не случайно, и это определенно не Твиттер. One @ создает переменную экземпляра, которая отличается от других переменных в том смысле, что она становится доступной для всего экземпляра класса экземпляра. Это упрощает работу с нашим кодом, вместо того, чтобы создавать и изменять множество локальных переменных во всем коде. Переменная с двумя @@ ’создает переменную класса, которая также доступна для всего класса, но больше похожа на глобальную переменную. Его основное использование - хранить информацию, которую мы создаем о нашем классе, внутри массива. @@ - все, что мы обсуждали ранее.

Ленивые самовлюбленные программисты

Если я узнал одну вещь с тех пор, как начал Flatiron School, так это то, что программисты очень ленивы. Эта мантра была втиснута мне в голову больше, чем что-либо еще, чему я научился, и я принял эту мантру, потому что я тоже довольно ленив. Ruby знает об этом и предоставляет инструменты, позволяющие избежать дальнейшей лени. self - это важный и полезный инструмент в Ruby, который не только обеспечивает универсальность кода, но также допускает лень! Даааааааааааааааааааааааааааааааааааааааааа.. self используется для представления экземпляра вызываемого класса. Выше, где мы написали def Dog.all, вместо него можно было бы заменить def self.all. Это может быть легко скопировано и вставлено в другой код, если это необходимо, и по-прежнему будет работать почти без изменений, а также избавит нас от необходимости изменять многочисленные строки кода, которые могли быть названы Dog.average_age, Dog.all_names и т. Д. изменил имя класса, нам, возможно, придется переименовать все эти методы, и я не знаю, упоминал ли я об этом, но ... программисты ленивы! Мы можем заменить все эти экземпляры Dog. с собой. и получите тот же результат с гораздо большей универсальностью.

Использование всех этих инструментов вместе делает наши классы более мощными и универсальными (я постоянно это говорю, но это действительно правда!). Это делает нас лучше и эффективнее программистов, но сохраняет код чистым и экономичным! Использование всех этих инструментов выведет ваш код на новый уровень и заставит других программистов взглянуть на ваш код и искренне восхищаться возможностями, внешне проявляющимися в вашем коде.

Это лишь некоторые из инструментов, включенных в Ruby, которые делают нашу жизнь программистов проще. Они нужны для того, чтобы сделать наш код более элегантным и менее повторяющимся. Вы не поверите, но есть еще больше инструментов, которые мы можем использовать, чтобы сделать наш код ДАЖЕ проще и универсальнее. В это сложно поверить, но это правда, но пока эти инструменты преобразуют ваш код и сделают его более мощным как для вас, так и для пользователя. На данный момент код, который вы создаете, будет для вас самым красивым, эффективным и элегантным кодом, пока вы не научитесь быть более ленивым, а вы научитесь. Но даже когда вы действительно ленитесь, не забывайте о Ruby, и это «волшебные» условности, которые делают его таким простым и мощным одновременно.