Впервые войдя в мир программирования, я почувствовал себя Гарри Поттером, который вошел в мир волшебства в первый год обучения и чье маггловское происхождение не совсем подготовило его к такому серьезному культурному сдвигу. Вместо забавных слов, таких как «квиддич», «дементоры» и «жаберонник», я слышу такие вещи, как «контроль версий», «командная строка» и «подсказка BASH». Прогуливаясь по нашим программам, я вижу доски, заполненные забавными знаками и символами, которые я не узнаю, но подозреваю, что они каким-то образом связаны с нашим ремеслом.
Как и Гарри, даже несмотря на то, что этот мир странный, я рад быть его частью, и я полон решимости найти свой собственный путь и проявить себя (хотя для меня, к сожалению, это не будет самым молодым Искателем на свете). ).
Я изучаю мощный язык Ruby, и пока что неплохо. Я научился писать несколько простых и несколько более сложных методов, узнал, что такое хеш, что такое итерация и почему область видимости так важна. Хотя мне иногда хотелось вырвать волосы, когда я не могу пройти через определенное сообщение об ошибке, или когда я узнал, что уже в который раз забыл ключевое слово «конец», меня по-настоящему поразило, что я смог заставить мой компьютер делать что-то за меня. Немного самодовольный, удовлетворенный взгляд Гермионы заставил ее взлететь в воздух.

Ruby очень организован - информация разбита на определенные типы данных или классы. Например, в классе string символы заключаются в кавычки. Целые числа - это тип данных, отличный от строк, поэтому они организованы в свой собственный целочисленный класс.
Здесь я установил переменную snape_name, которая ссылается на экземпляр или пример, string class и другую переменную, страница, которая ссылается на экземпляр класса integer.
snape_name = «Северус Снейп»
page = 394
Ruby может делать определенные вещи с одними классами, но не с другими. Если бы я попытался сказать Ruby добавить snape_name и page, вот так…
snape_name + страница
Я получаю сообщение об ошибке!
TypeError: нет неявного преобразования Fixnum в String
Это мой компьютер говорит…

только приятнее.
Знак + является математическим оператором и предназначен только для использования с числовыми типами, а не со строками. Поэтому логично, что когда вы пытаетесь добавить число к нечисловому, ваш компьютер не знает, что делать.
Возвращаясь к волшебному миру, мы все знаем, что заклинание «Алохомора» открывает вещи. Ну, а что произойдет, если мы попытаемся назвать «Алохомора» кого-то вроде Косолапого Шэнкса, кота Гермионы?

Кошку нельзя разблокировать, поэтому, опять же, наша палочка (или язык программирования) не знает, что мы пытаемся сделать.
«Алохомора» - это заклинание - оно что-то делает с вещами, которые мы вызываем (т.е. разблокирует вещи) - в мире программирования мы называем эти методами. Если бы мы вызывали «Alohomora» для экземпляра класса LockedThing , это сработало бы! Но если мы попытаемся вызвать это на чем-то, кроме LockedThing, это не сработает.
В Ruby уже определено определенное количество классов, и каждый из них имеет определенное количество методов, которые мы можем вызывать. (Полезный совет - используйте метод #methods, чтобы узнать, какие методы вы можете вызывать для определенного типа класса - например, String.methods - обязательно используйте заглавные буквы в рассматриваемом классе). Вы также можете ознакомиться с этой документацией Ruby, чтобы получить более исчерпывающую информацию о классах и методах (включая как их использовать) - это лучший ресурс, который я нашел для новичка. - как и Гермиона, я довольно часто нахожусь в этой библиотеке.
Итак, Гарри, Рон, Гермиона и все другие первокурсники успешно учатся правильно пользоваться своими жезлами (языками программирования) и своими заклинаниями (методами) - узнавая, какое заклинание использовать в какой ситуации и как говорить. их правильно.

Но что, если Гарри, Рону и Гермионе сказали, что ОНИ МОГУТ НАПИСАТЬ СВОИ ЗАКЛИНАНИЯ, как первокурсники? !!!

В конце концов, на это способны только самые могущественные ведьмы и волшебники.
Что, если бы я сказал вам, что как новичок в программировании, я могу это сделать. Я могу создавать свои собственные классы в Ruby, создавать экземпляры этих классов И писать свои собственные методы, которые можно вызывать для этих классов и экземпляров.
Это невозможно, потому что я сверхмощная ведьма, ну, я имею в виду, программист - это потому, что я опираюсь на плечи тех, кто был до меня - еще в 60-х и 70-х годах, когда ООП или объект Так родилось ориентированное программирование.
В 1960-х годах первым языком программирования, использующим объекты, был Simula 67, разработанный в Норвегии Кристен Найгаард и Оле-Йохан Далем. Затем, в 1970-х годах, термин объектно-ориентированное программирование впервые был использован Адель Голдберг и Аланом Кей в Xerox PARC в их языке программирования Smalltalk. Smalltalk был более динамичным, чем Simula 67 (что означает, что он мог делать больше и был более гибким), а также был первым языком, в котором была представлена концепция наследования (не волнуйтесь, если вы еще не знаете, что это такое ... это супер круто, но немного более продвинутый, чем моя текущая тема). Если вы хотите узнать больше об истории ООП, вы можете сделать это здесь.
Объектно-ориентированное программирование просто относится к процессу использования объектов (классов) в качестве основы для вычислений.
Что это значит? Что ж, позвольте мне продемонстрировать ...
На данный момент Ruby не имеет встроенного класса для LockedThing или метода для Alohomora ... так что давайте будем программистами и создадим их!
Создать новый класс в Ruby так же просто, как использовать ключевое слово «class», например:
class LockedThing
конец
Вот и все!
Теперь, если я хочу создать экземпляр класса LockedThing, я могу:
third_floor_corridor = LockedThing.new
Здесь я использовал метод #new, чтобы создать новый экземпляр класса LockedThing и установить его равным переменной third_floor_corridor.
Чтобы убедиться, что это сработало, вы можете использовать метод #class для third_floor_corridor, чтобы проверить, к какому классу он принадлежит:
third_floor_corridor.class = ›LockedThing
Мы сделали это!
Но помните, мы хотим создать заклинание (или метод) для экземпляров нашего класса LockedThing, которое разблокирует их для нас, поэтому давайте немного расширим наш класс:
class LockedThing
def alohomora
ставит «Теперь я разблокирован!»
end
end
Внутри класса, который мы только что создали, мы можем использовать ключевое слово def (define) для определения нового метода, alohomora, который при вызове экземпляра класса LockedThing выдаст строку: «Теперь я разблокирован! ”
Давай попробуем:
Third_floor_corridor.alohomora
Теперь я разблокирован!
Yaaas !!! Это заставляет меня чувствовать, что ...

Давайте создадим еще один экземпляр LockedThing и посмотрим, работает ли он по-прежнему:
dumbledore_candy_cabinet = LockedThing.new
dumbledore_candy_cabinet.alohomora
Теперь я разблокирован!
(Все мы знаем, что только Фред и Джордж были бы достаточно озорными, чтобы использовать это).

В заключение, ООП или объектно-ориентированное программирование - чрезвычайно полезный и мощный способ добиться цели - теперь я собираюсь создать заклинание, чтобы моя кошка перестала кашлять комками шерсти.