Всего несколько месяцев назад я перешел с PHP на Ruby. Это был непростой переход, ни в решении, ни в смене. Я использовал PHP и, по иронии судьбы, я не знал, что мне это не нравится. Затем на местной встрече меня познакомили с Руби. Участники показали мне некоторые особенности, которые поразили меня. Этот пост является списком из 5 вещей, которые больше всего очаровывают меня в Ruby и заставляют использовать его каждый день.
Руби мой лучший друг
Первой вещью, с которой я столкнулся, был веб-сайт, и слоган просто ударил меня по лицу:
Это сдуло меня.
Я использовал языки программирования, которые обещают давать указания, инструктировать и давать ответы, но это язык моего друга ??? Язык, который говорит мне, когда я собираюсь принять плохое решение, но в любом случае позволяет мне это сделать. Язык и сообщество, которые ценят мою странную версию и согласны с моими причудами. Язык, который говорит мне, что все чувства в порядке.
Видя, что это был момент поднятия волос. Я был подключен.
Дело не в том, что Ruby ценит продуктивность программиста, а в том, что он ценит счастье программиста.
Рубин — лучший из всех миров
Руби не защищает «один верный путь». Он берет лучшее из разных культур и разных экосистем и связывает их вместе таким образом, чтобы вы поэтично относились к программированию.
Стив Йегге комментирует это:
По большей части Ruby воспринял обработку строк в Perl и интеграцию с Unix как есть, что означает, что синтаксис идентичен, и поэтому, прежде чем что-либо еще произойдет, у вас уже есть лучшее из Perl. И это отличное начало, особенно если вы не берете остальную часть Perl.
Но затем Матц взял лучшее из обработки списков из Lisp и лучшее из OO из Smalltalk и других языков, и лучшее из итераторов из CLU, и почти все лучшее от всех.
Есть хорошие вещи в языках и есть плохие вещи, и одна из лучших вещей в Ruby — то, что он пытался извлечь из них все лучшее
Все в Ruby это объект
В последнем разделе упоминалось, что Ruby взял лучшее из объектно-ориентированного программирования от Smalltalk. В Ruby, как и в Smalltalk, все является объектом.
Позвольте мне продемонстрировать это:
irb(main):001:0> nil.class => NilClass irb(main):002:0> 1.class => Fixnum irb(main):003:0> 1.2.class => Float irb(main):004:0> "something".class => String
В Ruby nil
является экземпляром NilClass
, 1
является экземпляром Fixnum
, 1.2
является экземпляром Float
и так далее.
В таких языках программирования, как C, у вас был фиксированный набор типов данных и фиксированный набор функций, которые они могли делать. Но в таком языке, как Ruby, где все является объектом, вы можете создавать новые типы данных или даже изменять существующие. Это дает вам большую силу, но, как говорит вам дядя Бен из Spiderman:
С большой властью приходит большая ответственность
что подводит меня к следующему разделу.
Рубин дает вам свободу
Помните, как все это Объект? Добавьте к этому возможность открытия любого класса, изменения метода и использования этого метода во время выполнения. Теперь вы являетесь пользователем Бога.
Это называется «исправление обезьян» и должно использоваться с модерацией.
Как говорит Джефф Этвуд из Coding Horror :
Если идея обезьяньего патча вас немного пугает, то, вероятно, это должно быть. Можете ли вы представить код отладки, в котором класс String немного отличался от String, который вы научились использовать?
Позвольте мне продемонстрировать это
irb(main):001:0> "Hello".class => String irb(main):002:0> "Hello".reverse => "olleH"
Теперь мы знаем, что «Hello» является экземпляром класса String
, и что reverse
метод класса String
работает, как и ожидалось. Но, если вы действительно злой, вы можете открыть String
Class и переопределить reverse
метод.
irb(main):003:0> class String irb(main):004:1> def reverse irb(main):005:2> " UNICORNS ARE PRETTY " irb(main):006:2> end irb(main):007:1> end => :reverse
Теперь, если кто-то откуда-то в патче после обезьяны попытается вызвать reverse
метод, он получит вместо этого патчированный метод обезьяны:
irb(main):008:0> "Hello".reverse => " UNICORNS ARE PRETTY "
Patching от Monkey опасен, когда используется без ответственности. Тем не менее, это выражение свободы, которую дает нам Руби.
Это здесь только для того, чтобы продемонстрировать силу, которую Руби дает вам вместе с ответственностью, которую вы несете. Руби не защищает тебя от себя. Правительство существует для защиты людей друг от друга, а не от себя. Он возлагает на вас ответственность за ваши ошибки и позволяет вам их совершать.
Как сказал Ларри Уолл в превосходном посте «Perl, первый постмодернистский компьютерный язык»:
Тот факт, что можно писать беспорядочные программы на Perl, также позволяет писать программы более чистые в Perl, чем они могли бы быть написаны на языке, который пытается обеспечить чистоту. Потенциал для большего добра идет в ногу с потенциалом для большего зла.
Итак, Monkey Patching — это хорошо, но и плохо. С его помощью можно создать действительно замечательные решения, но также можно создать ужасный беспорядок.
Бремя лежит на вас.
Ruby имеет удивительное сообщество
Каждый программист Ruby, который разделяет это чувство причудливого и странного, знает, что значит делать то, что мы делаем. Есть некоторые вещи, которые мы делаем, и некоторые вещи, от которых мы воздерживаемся, и это то, что делает нас теми, кто мы есть. Эти строки из разговора Эрни Миллера « Это не очень хорошо с вашей стороны» очень хорошо объясняют это:
Я не верю, что именно переводчик решает, что такое Ruby или нет. Я думаю, что это люди, и это круто, потому что Matz разработал Ruby для увеличения счастья программиста. Переводчики не счастливы, люди счастливы.
Люди в этом сообществе и их дружелюбие, счастье и радость делают это сообщество таким, какое оно есть. Сообщество влияет на язык, и наоборот. Это оказалось действительно хорошо для Руби, и мне нравится быть частью сообщества.
Вывод
Руби это прекрасный язык. Свобода, которую он вам дает, — это самая большая ответственность за программирование, которую вам когда-либо придется брать на себя, но мне нравится ответственность. Как говорит DHH:
Руби — это язык для взрослых
Просто подумай об этом. Ruby дает вам мощь наряду с возможностью совершать ошибки, и это то, что так здорово в этом. Это не вечный родитель, который мешает вам делать то, что вы хотите сделать. Это друг, который поможет вам в вашем путешествии. Это поможет вам превратиться во что угодно, будь то исторический герой или дьявольский злодей. Это зависит от вас.
Герой — это тот, кто понимает ответственность, связанную с его свободой. — Боб Дилан
Вот почему я люблю Руби, и поэтому я призываю вас попробовать это тоже.