Как научиться программировать на Ruby — ТОП-30 советов!

Привет. Я Елена. Я не профессиональный ай-тишник, но своя аудитория новичков, ищущих возможность научиться программирования, у меня уже как-то сама собой сложилась.

Вчера получила сообщение из Волгограда от Сергея Ненашева с просьбой помочь разобраться с языком Ruby.
Отвечаю: Сергей, именно этим языком не владею, не изучала.

Хотя общие с той же JavaScript или РНР принципы прослеживаются. А вы пишете, что РНР успешно освоили. Притом в связке с frontend. Так вам тогда не составит труда изучить и Ruby – достаточно только будет разобраться в принципах работы с фреймворком, позволяющим создавать динамичные сайты разной тематики.

Давайте разбираться вместе.

Содержание

Вступление или 10 причин для перехода на Ruby

Я познакомился с Ruby сравнительно недавно, благодаря чудесному фреймворку Ruby on Rails. Я не считаю себя экспертом в Ruby, но я прочитал PickAxe, написал несколько утилит на Ruby для личного пользования, а также разрабатываю на Rails в свободное время.

Ruby на данный момент, мой основной язык. Начинал же я с TurboPascal в школе, изучал C и C++ в университете, дисертацию писал на Java, а еще я изучал PHP с нуля, так как хотел научиться делать веб-сайты быстро и легко. Думаю, что написание кода для меня это некая форма развлечения, а уж потом все остальное. В начале у меня были размышления, какой язык изучать, Python или Ruby. Я выбрал второй, так как не хотел, чтоб неправильные отступы были причиной неполадок в моем коде.

Есть целая куча введений, руководств, статьей и эссе, написанных гуру, о том, как получить максимум пользы от Ruby. Данная статья ничем таким не является.

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

Короче, вы — предупреждены.

Зачем изучать Ruby?

1.Вы получаете все удобства (удовольствия) без уловок.

Ruby позаимствовал все лучшее из других языков программирования, от smalltalk до Java, от Perl до Python. Вот базовые возможности, которые вы в принципе могли видеть и в других языках:

  • Исключения. Верите или нет, исключения являются одной из важнейших вещей при разработке программ любого рода. Программисты на PHP4, не знают ничего о них и будут говорить вам, что можно просто печатать(ошибки) на экран или использовать их собственный «супер-пупер» класс для обслуживания ошибок. К счастью для всех нас, Ruby поставляется с try/catch (или еще лучше begin/rescue) блоками и набором предопределенных, расширяемых Исключений, для правильной обработки ошибок.
  • Пространства имен: модули Ruby делают использование пространства имен легким, это должно понравиться энтузиастам C++ и Java.
  • Встроенные регулярные веражения: Для всех знатоков Perl, вы можете заключить нечто в // и оно становится регулярным выражение, готовым для сравнения (для этого используем оператор =~).
  • Перегрузка операторов: Ruby позволяет определять операторы, такие как +, -, >, и т.д. для любого вашего класса.
  • Пакеты: называемые «gems»(камешки), они действительно оправдывают свое название, кроме того — они работают. Пакеты поддерживают зависимости, а еще могут быть как кросс-платформенные, так и платформо-зависимыми.
  • Интерактивная консоль: может использоваться для тестирования кода интерактивно, подобно консоли Python

2.Вы полюбите мелочи.

Ruby изящен. Почему? Потому-что он не старается делать код лаконичным настолько, что б это мешало читабельности и пониманию. Есть несколько советов, которые могут вам помочь:

  • Вы можите использовать оба оператора, if и unless в условных выражениях. Кончно же вы можите использовать if с противоположным значением выражения, но использования unless обычно приводит к меньшему числу ошибок. Кроме того, вы можите использовать оба оператора, как условные модификаторы, ставя их после выражения, а не до:order.new unless order.exists
  • Можно использовать знаки вопроса и восклицания в конце имени метода. Данное соглашение не навязывается, но знак «?» используется, когда метод возвращает true или false, в то время, как знак «!» используется для методов, делающих нечто необратимое, на подобии удаления записи из базы данных, отщепления последнего символа из строки и т.п.
  • Можно использовать псевдонимы (alias) для уже созданных методов. Таким образом можно получить методы exist и exists, без накладных расходов и без повторений.
  • Вы можете использовать директивы attr_reader, attr_writer или attr_accessor для автоматического создания getter/setteer для членов класса.
  • И еще некоторое соглашение об именах: константы, классы и модули пишут с заглавной буквы, методы и члены класса должны начинатся с маленькой буквы, глобальные переменные именуют начиная с «$», имена переменных объекта начинаются с «@», а имена переменных класса с «@@», ну и т.д.
  • При вызове методов, можно не писать скобки. Можно писать write File.open(«/home/h3rald/test.txt») или просто File.open «/home/h3rald/test.txt», что особенно удобно с методами, без аргументов.

3.Больше не нужно использовать точку с запятой.

Хотите написать следаующую инструкцию? Просто переходите на новую строку. Нажмите «Enter» и готово. В Ruby как и в Python, новая линия разделяет инструкции, так что вам не придется все время ставить точку с запятой. К сожалению это означает, что подобно фанатам C++, мы не сможем написать программу в одну строчку. Но это не так уж и плохо, правда?

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

4.Все является объектом, как это и должно быть.

Когда я изучал Java, мне говорили, что все является объектом.

— «Че, 14 и 374346.678 — объекты?»
— «Нет, глупыш, это числа!»

В Ruby числа, символы, булевы значения и все остальное является объектом. Серьезно. Это означает, что можно писать вещи подобно этим:

«YOU SHOULDN’T ALWAYS USE CAPITALS».lowcase # вернет «you shouldn’t always use capitals», вместо нечто такого: # PHP Codestrtolower(«YOU SHOULDN’T ALWAYS USE CAPITALS»)

Этим вы экономите время, экономите скобки и так более логично.

5.Все имеет значение.

Или «больше не надо использовать return для возврата значений». Если побыстрячку, то так: все инструкции в Ruby возвращают значение, даже присваивание переменных, так что вам действительно не нужно использовать ключевое слово «return» в конце методов. Значение последнего присваивания всегда будет возвращено.

6.Можете изменять окружение любым доступным способом.

Впервые увидев это, я был впечатлен. Представьте типичную ситуацию: вы стали использовать системный класс или класс, написаный кем-то другим и поняли, что вам надо некий дополнительный метод в нем. Есть несколько путей для решения этой проблемы в типичных языках программирования:

  • Вы изменяете исходный код класса, если вы имеете к нему доступ. Но обычно это — плохая идея, не делайте так.
  • Вы наследуете свой класс от того и добавляете к нему новый метод. Обычно это — хорошая идея. Но из-за одного метода это может оказаться несколько монрообразным. Кроме того, придется немного подправить другой свой код соответственно.
  • Можно просто создать метод вне класса. Это сработает, но будет не очень изящно, а еще — идет в разрез с ООП.

В Ruby вы можете добавить метод в оригинальный класс, без правки исходных кодов. Это можно сделать даже для системного класса. Мы хотим добавить метод, для пересчета значений из метров в футы? Просто расширим класс Numeric, как показано:

class Numeric
def feet
self*3.2808399
end
end

С этого момента, все наши числа, будут иметь новый метод, который может использоваться, как любой другой:

5.feet # возвратит 16.4041995

Классы в Ruby никогда не закрываются и могут быть расширены в любой момент, из любого места. Естественно использовать такую возможность надо с осторожностью!

7.Вы не сможите получать единорогов из птиц и конец, но вы получите ослов, если захотите.

Я четко помню, как моя учительница по C++, использовала животных, для иллюстрации основных концепций объектно-ориентированного программирования — классов и наследования. Было нечто загадачно, когда объясняла нам множественное наследование, образовывая «пегаса» из «птиц» и «лошадей».

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

8. XML — реально ненужен.

XML — красивый, общеупотребительный, язык разметки, который может быть обработан всеми языками программирования и используется повсеместно. К сожалению, он слишком громоздкий для написания, трудный для обработки(парсинга) и, давайте будем честны — трудный для чтения в большинстве случаев. А вот взгляните на следующий фрагмент:

regexp: !ruby/regexp /a-zA-Z/
number: 4.
string: a string

Безусловно это легче и проще XML, правда? Добро похаловать в YAML, любимый (но не единственный) язык разметки Ruby, с помошью которого любой объект может быть представлен в простом, лаконичном, но полном виде.

Ruby способен работать с XML, но простота YAML подкупила многих разработчиков, которые теперь используют его вместо XML, например для файлов конфигурации (так поступили в Rails). Фрагмент, представленный выше, был получен исполнением следующего фрагмента кода:

{«string» => «a string», «number» => 4.7, «regexp» => /a-zA-Z/}.to_yaml

Метод to_yaml, определен для класса Object, который является родителем для всех остальных объектов, а потому доступен для всех объектов Ruby. Это позволяет преобразовывать объекты в YAML и обратно, абсолютно прозрачно для разработчика. Круто, да?

9.Лямбда — нечто больше, чем просто греческая буковка.

Ruby позаимствовал некую магию из Lisp и Perl в объекты и блоки Proc. Proc — это «блок кода, связанный с набором локальных переменных. Однажды связанные, они могут вызываться в различных контекстах и все еще обращаться к тем переменным.». Поглядим на следующе:

def gen_times(factor)
return Proc.new {|n| n*factor }
end

times3 = gen_times(3)
times5 = gen_times(5)

times3.call(12) #=> 36
times5.call(5) #=> 25
times3.call(times5.call(4)) #=> 60

Можно было использовать ключевое слово lambda вместо Proc.new, на результат это не влияет. Это могло показаться знакомым людям, знающим Perl и Python (или Lisp). Такое можно сдалать даже на PHP, но не много людей пользуются этой возможностью.

Кроме того в Ruby широко используются блоки типа «несозданные Proc», например, для итерации по содержимому объекта и исполнения некоторого кода, подобно методу each, доступного для класса Array:

[1, 2, 4, 6, 8].each {|c| puts c*2} #=> возвратит каждый элемент, умноженный на 2

Если код не умещается на одной строчке, рекомендуется использовать конструкцию do… end, вместо использования скобок. Фаны Ruby не любят скобок.

10. Вы можете использовать Rails.

Последнее, но не по важности… Вы всегда можете использовать Rails для разработки веб-приложений. Разработка будет не настолько простой, как с PHP, но Rails были написаны на Ruby, поскольку он имет возможности, отсутствующие в других языках.

Заключение

Время вышло. Возможно вы уже задумываетесь о взгляде на Ruby, возможно вы уже пробовали его, а возможно вы просто проигнорировали его. Как бы там нибыло, в следующий раз, когда глядя на свой код, он будет казаться страшным, а размер его устрашающим — не обвиняйте меня.

https://habr.com

Почему Ruby On Rails это хороший выбор в 2020-2021 году?

Каждый тренд, технология и даже язык программирования достигает своего пика популярности, а затем рано или поздно опускается вниз. Если мы поищем в Google «положение языка Ruby», мы, скорее всего, обнаружим множество статей о падении интереса к Ruby, снижении его популярности и даже о надвигающейся кончине. Но, несмотря на это, я уверен, что Ruby хорошо держится и по-прежнему остается достойной технологией, которую можно выбирать и в этом году. И вот почему.

1. Это один из топовых языков программирования на GitHub

Поскольку Ruby числится в топе языков программирования согласно статистике GitHub за 2018 год, очень маловероятно, что в обозримом будущем его ждет безвременная кончина. Более того, крупные корпорации, такие как Github или Airbnb, продолжают использовать Ruby (on Rails).

Совсем недавно гигант облачных вычислений, AWS, добавил Ruby к своему бессерверному решению – AWS Lambda, поставив его в один ряд с Java, C#, Python и Node.js, что доказывает стабильное положение этого языка.

Ruby, может, и замедлился, но он далек от смерти, особенно если вспомнить о количестве существующих проектов на этом языке, которые нужно поддерживать и расширять.

2. Активное и поддерживающее сообщество

Фреймворк Rails на Github имеет более 3500 участников. Частые обновления и новые блестящие решения, создаваемые разработчиками, гарантируют более быструю и простую разработку и доставку приложений с помощью этого фреймворка.

Члены сообщества регулярно обмениваются опытом и помогают друг другу в решении проблем. С учетом того что на Stackoverflow содержится более 300 тысяч вопросов касательно Ruby, очень маловероятно, что вы не сумеете найти там решение возникшей у вас проблемы. И речь идет не только о Ruby: Ruby on Rails с годами стал более доработанным, а его документация – более детальной и обширной (это хороший знак для начинающих).

Ruby это не только Rails. Более легковесные решения (например, Sinatra), фреймворки, предлагающие другой подход (например, Hanami), и даже фреймворки для источников событий приобретают популярность и совершенствуют то, что может предложить Ruby.

3. Ruby постоянно развивается

Создатели Ruby, выпуская обновления как минимум дважды в год, уберегают этот язык от смерти и следят за его постоянным развитием.

Ruby имеет некоторые проблемы с производительностью, которые вряд ли исчезнут в ближайшее время (это связано с некоторыми базовыми характеристиками Ruby как такового, особенно с его динамической природой). Несмотря на это, релиз Ruby 3, ожидаемый в 2020 году, должен принести некоторые улучшения, благодаря которым язык станет значительно быстрее.

4. Это действительно отличный выбор для стартапов, для внутренних инструментов и прототипирования, но для чего еще?

Благодаря своему интуитивному, простому и читабельному синтаксису (что в сумме дает более высокую продуктивность), Ruby прекрасно подходит для стартапов и любых компаний, которые хотели бы как можно быстрее поставлять (и расширять) продукты программного обеспечения.

Более быстрая разработка означает большую экономию (лучшие показатели time-to-market), а это важно для стартапов с ограниченным бюджетом. Благодаря этому больше денег можно вложить в разработку дополнительного функционала, в маркетинг и т. д.

Крупномасштабные проекты, в свою очередь, могут использовать RoR в качестве инструмента для прототипирования или как эффективный способ доставки решений в рамках доказательства концепции. Поскольку создавать и расширять приложения на Ruby относительно легко и дешево, это также прекрасный вариант для создания внутренних /бэкенд инструментов, для которых производительность не является наивысшим приоритетом.

Но Ruby используется даже для крупных и высокопроизводительных приложений. Впрочем, обычно это требует привлечения инженеров, специализирующихся на приложениях с высокой производительностью, поскольку скорость это не конек данного языка. Также для этого может потребоваться горизонтальное масштабирование.

5. У Ruby есть хорошие устоявшиеся рекомендации по стилю кода

Ruby это зрелый язык программирования и стабильная технология, а это несколько лучше, что просто быть «в тренде». На Ruby по-прежнему можно написать плохой код, кто-то даже может сказать, что это довольно легко сделать из-за гибкости языка. Именно эта гибкость позволяет достигать одинаковых результатов многими способами (и не всегда самыми лучшими).

С другой стороны, язык как таковой позволяет писать прекрасный и читаемый код. Этому способствует хорошо подобранный набор лучших подходов по части реализации и тестирования. Подобный код, когда он правильно написан, будет просто понимать и поддерживать, а также улучшать, сохраняя стабильность и поддерживаемость всего решения в целом.

6. Счастье разработчика

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

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

Но почему Ruby замедляется?

На этот вопрос нет простого ответа, но мы можем поразмышлять на эту тему. Скорее всего, Ruby в достаточной степени созрел и потерял некий импульс. Множество решений, библиотек и техник уже созданы, так что нужда в новых не так значительна, как раньше. Мы также можем наблюдать небольшой спад в появлении новых обучающих материалов – вероятно, по тем же причинам.

Появление новых языков и фреймворков, лучше подходящих для определенных приложений/решений, заставляет Ruby делиться своей «частью пирога» с новыми игроками.

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

Всегда лучше использовать для работы наиболее подходящий инструмент, а Ruby не является неким универсальным инструментом на все случаи жизни.

Заключение

Даже в 2019 году Ruby является отличным выбором для нужд разработки. Это, без сомнения, вполне применимый язык, по-прежнему привлекающий многих последователей и разработчиков.

Наконец, следует помнить, что плохих языков вообще нет, просто в некоторых случаях можно неправильно подобрать язык. Так что если вам кажется, что Ruby вам подойдет, не стоит колебаться, ведь он по-прежнему является одним из наиболее популярных языков.

https://techrocks.ru/

Язык программирования Ruby

Введение

Ruby — один из самых молодых языков программирования. Его создатель Юкихиро Мацумото (Yukihiro Matsumoto, также известный под псевдонимом Matz), профессиональный японский программист, рассказывает: <<Я начал разработку Ruby 24 февраля 1993 года. Первая hello world программа на Ruby заработала летом того же года, а aльфа-версия была готова к декабрю 1994.>> Название языка происходит от имени драгоценного камня рубина (по аналогии с другим широко распространенным языком программирования Perl: pearl — жемчуг).

Вот как характеризует Ruby его автор: <<Это мощный и динамический объектно-ориентированный язык с открытыми исходниками. Ruby работает на многих платформах, включая Linux и другие реализации Unix, MS-DOS, Windows 9x/2000/NT, BeOS и MacOS. Главная цель Ruby — эффективность разработки программ, и пользователи найдут, что программирование на нем эффективно и даже забавно>> [1].

В Японии Ruby стал популярным с момента появления первой общедоступной версии в 1995 году, однако наличие документации только на японском языке сдерживало его дальнейшее распространение. Лишь в 1997 году появилось описание Ruby на английском языке, а в 1998 году открылся форум ruby-talk. С этого момента Ruby начал свое шествие по всему миру. За последний год появились три англоязычные книги, посвященные ему (см. [2-5]), хотя на русский язык, к сожалению, ни одна из них еще не переведена. Сейчас Ruby входит в большинство дистрибутивов ОС Linux, доступен он и пользователям других операционных систем.

Заметим, что данная статья не является справочным руководством по языку. С кратким введением можно познакомиться в электронном учебнике [6], а более полная информация может быть найдена в [7] и [8], а также на уже упомянутых выше сайтах сети интернет. Основная цель статьи — дать людям, уже знакомым с различными языками программирования, общее представление об особенностях Ruby, показать его мощь и красоту, объяснить, что он одинаково хорош и как первый язык программирования, и как средство для работы профессионального программиста и системного администратора.

Программисты говорят о Ruby

В этом разделе мы изложим собранные из различных источников высказывания о языке Ruby, отложив на некоторое время рассмотрение примеров, иллюстрирующих их. Большая часть вопросов, которые будут затронуты, предполагает наличие определенных знаний у читателя в области теории языков и объектно-ориентированного программирования. Легче всего понять Ruby тем, кто знает Smalltalk, Lisp, C, C++ и Perl. <<Джентльменский>> набор из Perl, Java и C++ тоже является весьма хорошей стартовой позицией для изучения Ruby.

Тем же, кто не может похвастаться подобными знаниями, весьма приятно будет узнать, что

  • <<если для изучения языка Perl Вам нужно потратить, скажем, три недели, то Python Вы изучите за неделю, а Ruby — за один день!>>
  • <<Ruby отличается чрезвычайной предсказуемостью («Princple of Least Surprise») — ни на одном другом языке невозможно написать достаточно большую программу и увидеть, что она работает с первой попытки>>.

Во введении мы уже цитировали Юкихиро Мацумото — создателя Ruby. Вот что еще он сам говорит об этом языке. Итак, Ruby

  • имеет простой синтаксис;
  • поддерживает обработку исключений;
  • позволяет переопределять операторы;
  • является чисто объектно-ориентированным языком (complete, full, pure object oriented language), в котором, в отличие от Java или Perl, все — объекты;
  • позволяет работать с целыми числами произвольной величины;
  • не требует объявления переменных;
  • использует префиксы (@, $, @@) для задания области видимости (scope) переменных;
  • поддерживает многопоточное программирование.

Одной из первых работ, привлекших внимание к Ruby, была уже несколько устаревшая статья Хала Фултона (Hal Fulton) <<Тридцать семь причин, по которым мне нравится Ruby>>. Вот некоторые из них.

Ruby является динамическим языком. В отличие от статических языков, подобных C++ или Java, методы и переменные в Ruby могут быть добавлены или переопределены во время выполнения программы. Это позволяет, например, обойтись без директив условной компиляции #ifdef, необходимых для языка C. Здесь проявляется сходство Ruby с такими языками, как Lisp и Smalltalk.

Ruby — интерпретируемый язык. Так как это свойство отрицательно сказывается на производительности, то хочется дать некоторые комментарии. Во-первых (и это самое главное), быстрый цикл разработки является важнейшим достоинством, которое <<перевешивает>> некоторые недостатки. Во-вторых, хотя Ruby и не является катастрофически медленным, в тех случаях, когда скорость абсолютно необходима, можно написать часть кода на языке C. Наконец, в-третьих, никто не сказал, что когда-нибудь не будет написан компилятор с языка Ruby.

В Ruby имеется возможность работы с регулярными выражениями. Когда-то они использовались только в некоторых утилитах UNIX-систем (grep, sed, vi). Затем, благодаря языку Perl, значительное число людей признало их мощь при обработке текстов. Ruby дает возможность использовать эту силу с еще большей легкостью.

Помните известную фразу Исаака Ньютона <<Если я видел дальше, чем другие, то только потому, что стоял на плечах гигантов>>? Ruby, безусловно, <<стоит на плечах гигантов>>, среди которых Smalltalk, CLU, Lisp, C, C++, Perl, Kornshell и другие языки. В Ruby собрано все лучшее, что накоплено человечеством в области языков программирования. При этом соблюдены следующие три принципа: не изобретать колесо, не чинить не сломанное, использовать имеющиеся у программистов знания и опыт. В Ruby пригодятся и знания о файлах и потоках из ОС UNIX, и спецификации функции printf из стандартной библиотеки ввода/вывода языка C, и умение работать с регулярными выражениями в Perl.

Ruby — язык написания сценариев (scripting language). Не следует считать, что это характеризует язык, как <<игрушечный>> или недостаточно мощный. Подобный язык должен быть интерпретируемым и способным заменить командные файлы, взаимодействующие с операционной системой и управляющие поведением других программ.

Ruby — универсальный и гибкий язык. С его помощью можно одинаково изящно реализовать как то, что традиционно делается с помощью интерпретатора Kornshell, так и то, что пишется обычно на C.

По простоте и богатству возможностей работы со строками и массивами языку Ruby нет конкурентов. Массивы являются динамическими, с ними можно оперировать как с множествами, стеками и очередями. Есть и ассоциативные массивы, работа с которыми также чрезвычайно проста и удобна.

Для языка Ruby уже написано большое число библиотек. Потоки, сокеты, объекты, сохраняемые между запусками программ, CGI-программы, базы данных, GUI — все это можно использовать, программируя на Ruby.

Дэйв Томас (Dave Thomas) и Энди Хант (Andy Hunt), соавторы первой книги по Ruby, вышедшей на английском языке, в интервью журналу «Dr. Dobb’s Journal» (январь 2001) говорят: <<Возьмите чисто объектно-ориентированный язык Smalltalk и избавьтесь от его причудливого синтаксиса. Добавьте комфорт и мощь языка Perl, но без всяких специальных случаев и магических преобразований. Заверните получившееся в ясный синтаксис, основанный частично на языке Eiffel, и добавьте понемногу от Scheme, CLU, Sather и Common Lisp. У вас получится Ruby.>> Фактически это означает, что Ruby — естественный и практически неизбежный результат эволюции современных языков программирования. Авторы данной статьи согласны с такой точкой зрения.

Хочется подчеркнуть, что Ruby не является панацеей для решения всех проблем программистов. Не следует отказываться от использования языков Java и C++ там, где их применение оправдано. С другой стороны, не разумно недооценивать возможности практического применения Ruby в реальных проектах.

Послушаем теперь высказывания лучших представителей программистского сообщества, которые сравнивают Ruby с другими языками.

Начнем с языка Java:

  • Ruby — интерпретируемый язык;
  • в Ruby все является объектом (в Java есть типы int и Integer, что создает определенные неудобства);
  • переменные в Ruby не являются статически типизированными и не требуют объявления;
  • модули (modules) в Ruby позволяют с помощью <<миксинов>> (mixins) конструировать подобие интерфейсов (interfaces) языка Java, допуская при этом в них реализацию методов.

Теперь сравним с языком Perl:

  • Ruby значительно легче освоить, на нем легче программировать, а написанные программы проще сопровождать;
  • в Ruby префиксы (@, $, @@) описывают область видимости (scope), а не тип переменной;
  • Ruby позаимствовал из языка Perl регулярные выражения, переменную $_ и многое другое.

Завершим сопоставление Ruby с другими языками рассмотрением одного из ближайших <<конкурентов>> — языка Python. Это сравнение особенно интересно потому, что именно Python рассматривается сейчас многими, как хороший кандидат на роль первого языка программирования. Итак, сравним Ruby с языком Python:

  • управляющие конструкции и методы в языке Ruby завершаются ключевым словом end, в то время как Python использует так называемый <<двумерный>> синтаксис, когда признаком завершения является изменение количества лидирующих пробелов в очередной строке программы;
  • вместо self в Ruby для обозначения переменных экземпляра используется префикс @;
  • в Ruby, в отличие от языка Python, понятия типа и класса являются синонимами;
  • Python не поддерживает наследования и не позволяет добавлять методы к существующим типам;
  • используемый в Ruby алгоритм сборки мусора позволяет проще писать реализации методов на языке C;
  • расширения для Ruby, написанные на C/C++ позволяют определять новые классы;
  • зачастую Ruby быстрее, чем Python.

И вновь дадим слово создателю языка. Его высказывание о планах дальнейшей работы над Ruby, выраженное в виде одной из управляющих конструкций языка, позволит нам плавно перейти к рассмотрению примеров реальных программ.

loop do
read and reply mails
write code
write document/article/book
write code
end

Программисты пишут на Ruby

Начнем с примеров, показывающих, что знание библиотек ввода/вывода языков C и C++ пригодится и в Ruby.

printf «Число: %5.2f; Строка: %s», 1.23, «Привет!»

endl = «n»; $stdout << 17 << » красных шариков» << endl

line = gets; print line

Специальная глобальная переменная $_ всегда содержит результат последней операции чтения. Она же используется как аргумент по умолчанию во многих конструкциях. Следующая программа, например, печатает все строки из входного потока, которые содержат слово Ruby.

while gets # присваивание очередной строки переменной $_
if /Ruby/ # сопоставление ее с образцом Ruby
print # печать $_
end
end

Ruby-стиль, однако, рекомендует использовать итератор each:

ARGF.each { |line| print line if line =~ /Ruby/ }

ARGF в Ruby — это объект, который представляет собой конкатенацию содержимого всех файлов, имена которых заданы в командной строке, либо просто стандартный поток ввода (в случае отсутствия аргументов).

Вот как выглядит на Ruby программа вычисления факториала числа, указываемого в качестве аргумента командной строки:

def fact(n)
return 1 if n == 0
f = 1
while n>0
f *= n
n -= 1
end
return f
end
print fact(ARGV[0].to_i), «n»

Для вычисления с помощью этой программы, размещенной в файле fact.rb, значения 100! достаточно выполнить команду ruby fact.rb 100. Три программы, рекурсивно вычисляющие 30-е число Фибоначчи, приведенные ниже, позволяют сравнить производительность интерпретаторов Ruby, Python и Perl.

# Ruby
def fib(n)
if n<2
n
else
fib(n-2)+fib(n-1)
end
end
print fib(30), «n»
# Python
def fib(n):
if n<2:
return n
else:
return fib(n-2)+fib(n-1)
print fib(30)

# Perl
sub fib {
my($n)=@_;
if ($n<2) {
return $n;
}
else {
return fib($n-2)+fib($n-1);
}
}
print fib(30), «n»;

Еще одна классическая задача — определение с помощью решета Эратосфена списка всех простых чисел, не превосходящих заданного (100 по умолчанию).

max = Integer(ARGV.shift || 100)
sieve = [] for i in 2 .. max
sieve[i] = i
end
for i in 2 .. Math.sqrt(max)
next unless sieve[i] (i*i).step(max, i) do |j|
sieve[j] = nil
end
end
puts sieve.compact.join «, «

В качестве следующего примера рассмотрим решение на языке Ruby задачи, которая часто предлагается студентам первого курса, изучающим языки C/C++: для заданного текстового файла определить число вхождений в него каждого из встречающихся в нем слов. Использование ассоциативных массивов и ряда стандартных методов работы с файлами и строками позволяет написать чрезвычайно краткую и ясную программу.

freq = Hash.new(0)
while gets()
for word in $_.split(/W+/)
freq[word] += 1
end
end
for word in freq.keys.sort!
print word, » — «, freq[word], «n»
end

Приведем два простых примера использования стандартной библиотеки классов. В результате выполнения первой программы будет найдено, что 7/8+1/8=1, а 7/8*1/8=7/64; вторая из них вычислит (1 + i)64.

require «rational»
a = Rational(7,8)
b = Rational(1,8)
print a, «+», b, «=», a+b, «; «, a, «*», b, «=», a*b, «n»

require «complex»
a = Complex(1,1);
print a**64

Без подробных объяснений приведем две эквивалентные программы, иллюстрирующие переопределение оператора [] для класса SongList. Ассоциативный массив (associative array, hash или dictionary) допускает индексирование произвольными объектами, а не только целыми числами. В данном случае оператор [] позволяет находить нужную песню не только по номеру, но и по ее названию.

class SongList
def [](key)
if key.kind_of?(Integer)
return @songs[key] else
for i in 0…@songs.length
return @songs[i] if key == @songs[i].name
end
end
return nil
end
end

class SongList
def [](key)
return @songs[key] if key.kind_of?(Integer)
return @songs.find { |aSong| aSong.name == key }
end
end

Так как Ruby унаследовал лучшие особенности многих языков, то для выполнения достаточно стандартных действий обычно имеется несколько разных возможностей. Вот 13 (!) различных способов напечатать числа от 0 до 9:

i = 0 i = 0
while i < 10 begin
print i , ‘ ‘ print i , ‘ ‘
i += 1 i += 1
end end while i < 10

i = 0 i = 0
until i >= 10 begin
print i , ‘ ‘ print i, ‘ ‘
i += 1 i += 1
end end until i >= 10

for i in [0,1,2,3,4,5,6,7,8,9] for i in (0..9)
print i, ‘ ‘ print i, ‘ ‘
end end

for i in (0…10) 10.times do |i|
print i, ‘ ‘ print i, ‘ ‘
end end

0.upto(9) do |i| 9.downto(0) do |i|
print i, ‘ ‘ print i, ‘ ‘
end end

(0..9).each do |i| (0…10).each do |i|
print i, ‘ ‘ print i, ‘ ‘
end end

i = 0
loop do
if i < 10 then print i, ‘ ‘ else break
end
i += 1
end

В заключение вопрос для тех, кто не знает языка Ruby: что напечатает следующая программа?

print [«L», «R», «H», «T»].collect { |x| x.succ }

Если вы сумеете угадать ответ, то это будет лучшим подтверждением тому факту, что Ruby интуитивно ясный язык. Если же не угадаете, то у вас будет еще одна причина изучить его.

Ruby и новички

Этот язык, несомненно, является одним из лучших в качестве первого языка программирования. Быстрый цикл разработки (редактирование — запуск — редактирование), использование интерпретатора, изначальная объектно-ориентированность, нетипизированные переменные, которые не требуют объявления, — все это позволяет учащимся сконцентрировать свое внимание на общих принципах программирования.

Не менее важны мультиплатформенность Ruby и его принадлежность к миру свободно распространяемого ПО. Еще один весомый аргумент в его пользу — возможность практического использования языка в самых разных областях, что не позволит впоследствии профессионалу, который вырастет из новичка, пожалеть о напрасно потраченном времени.

Можно заметить, что значительному числу перечисленных выше требований удовлетворяют и Python, и Java, и C++ и даже (в меньшей степени) Delphi. Последний из них, правда, является коммерческим продуктом, что автоматически должно было бы повлечь исключение его из рассмотрения. Однако в России даже среди организаторов олимпиад по программированию для школьников находятся люди, утверждающие, что стоимость дистрибутива Delphi составляет около 70 рублей!

Язык C++ практически никто и никогда не рекомендовал в качестве первого языка — слишком он сложен. Java, наоборот, используется как первый язык, достаточно часто. Python сейчас рассматривается многими как неплохой кандидат на эту роль.

Попробуем сначала сравнить языки Ruby и Java, посмотрев на них глазами человека, только начинающего знакомиться с миром программирования. Для такого человека чрезвычайно важна ясность и краткость программ, отсутствие в них странных и непонятных <<магических>> слов. А именно из них и состоит в основном Java-вариант традиционной первой программы!

public class Hello {
public static void main(String[] args) {
System.out.println(«Здравствуй, мир!»);
}
}

Аналогичную программу на Ruby долго объяснять не придется:

puts «Здравствуй, мир!»

Ruby в этом смысле очень дружелюбный язык. Программа, написанная новичком, может быть очень короткой и не содержать ничего лишнего, а для создания такой программы необходим, в основном, только здравый смысл.

В отличие от языка Java в Ruby нет проблемы <<больших>> чисел. Приведенные выше программы вычисления факториала числа или чисел Фибоначчи, будучи написанными на Ruby, всегда дают верный результат. В случае же языка Java ограничения на диапазон представимых целых чисел приводят к нелепым (с точки зрения ученика школы или студента первого курса) равенствам типа

17!=-288522240.

Неприятная неожиданность для человека, только приступающего к изучению программирования!

Еще одним важным фактором является простота методов, используемых в Ruby для ввода данных с клавиатуры или из файла. В случае языка Java сложность этих операций приходится тщательно маскировать, ограждая новичка от ненужных ему проблем.

Компактность дистрибутива Ruby и простота его установки в любой операционной системе позволяют школьнику или студенту без проблем работать на домашнем компьютере. Опять сравнение не в пользу Java!

Язык Python по многим параметрам похож на Ruby. Из приведенных выше различий этих двух языков для рассматриваемой нами ситуации начального обучения программированию особенно значимым оказывается <<двумерный>> синтаксис, используемый в языке Python. Эта особенность не является изначально понятной и на первых порах мешает. Вообще, основным аргументом в пользу Ruby в качестве первого языка программирования является именно его интуитивная ясность и предсказуемость, а не многие другие его преимущества.

Ruby и профессионалы

Чем же хорош Ruby для профессионального программиста и системного администратора? Многое уже было сказано выше, но вот еще несколько интересных примеров и кратких комментариев.

По умолчанию строка, заключенная в обратные апострофы, заменяется результатом выполнения команды, в ней заданной. Можно, однако, и переопределить это поведение:

alias oldBackquote `
def `(cmd)
result = oldBackquote(cmd)
if $? != 0
raise «Command #{cmd} failed»
end
result
end
print `date`
print `data`

CGI-скрипты, формы, работа с <<ключиками>> (cookies) — это только начало. Программы на Ruby могут быть внедрены прямо в HTML, что эквивалентно использованию таких средств, как ASP, JSP или PHP. При этом сохраняется вся мощь Ruby, а для повышения производительности можно использовать специальный модуль для Apache.

<!DOCTYPE HTML PUBLIC «-//W3C//DTD HTML 4.01//EN»>
<html>
<head>
<title>eruby example</title>
</head>
<body>
<h1>Enumeration</h1>
<ul>
<%(1..10).each do|i|%>
<li>number <%=i%></li>
<%end%>
</ul>
<h1>Environment variables</h1>
<table>
<%ENV.keys.sort.each do |key|%>
<tr>
<th><%=key%></th><td><%=ENV[key]%></td>
</tr>
<%end%>
</table>
</body>
</html>

Ниже приведена программа, иллюстрирующая Tk расширение языка Ruby. Левая кнопка мыши позволяет рисовать прямые линии, а правая — создавать Postscript-файл с построенным изображением.

require ‘tk’
class Draw
def do_press(x, y)
@start_x = x
@start_y = y
@current_line = TkcLine.new(@canvas, x, y, x, y)
end
def do_motion(x, y)
if @current_line
@current_line.coords @start_x, @start_y, x, y
end
end
def do_release(x, y)
if @current_line
@current_line.coords @start_x, @start_y, x, y
@current_line.fill ‘black’
@current_line = nil
end
end
def initialize(parent)
@canvas = TkCanvas.new(parent)
@canvas.pack
@start_x = @start_y = 0
@canvas.bind(«1», proc{|e| do_press(e.x, e.y)})
@canvas.bind(«2», proc{ puts @canvas.postscript({}) })
@canvas.bind(«B1-Motion», proc{|x, y| do_motion(x, y)}, «%x %y»)
@canvas.bind(«ButtonRelease-1»,
proc{|x, y| do_release (x, y)}, «%x %y»)
end
end
root = TkRoot.new{ title ‘Canvas’ }
Draw.new(root)
Tk.mainloop

Отметим, наконец, что конфигурация и установка дистрибутива Ruby осуществляется с помощью скриптов, написанных на нем самом.

Заключение

Выпускники МГИУ специальности 2204 этого и предыдущего годов (многие из которых являются сейчас аспирантами) могут обнаружить, что язык Ruby во многом похож на известный им по занятиям на первом курсе язык C-Talk. Этот язык, который разрабатывался в нашем университете группой программистов под руководством Игоря Вячеславовича Абрамова (см. [9-11]), был основан в значительной мере на тех же самых идеях, которые взяты в качестве основополагающих автором Ruby.

Осенью 1997 года студенты-программисты в нашем университете начали изучать язык Java. МГИУ был тогда единственным вузом в Москве, в котором первым языком программирования стал этот ныне общепризнанный язык.

Сейчас к связке языков Java и C++, двух основных языков современных профессиональных программистов, мы добавляем Ruby, с которого и начнется знакомство в новом учебном году первокурсников с миром программирования. Очень хочется верить в то, что и на этот раз наш выбор не окажется ошибочным.

https://www.internet-technologies.ru/

12 книг для изучения языка программирования Ruby

В этот раз мы подготовили подборку книг для изучения языка программирования Ruby. Русскоязычных книг не очень много, поэтому часть книг на английском языке. Сразу к делу.

Путь Ruby

Эта книга появилась в самом начале рождения самого Ruby и по праву пользуется у программистов спросом. А относительно недавно авторы первого издания (Хэл Фултон и Андрэ Арко) обновили свой труд, с учётом новых возможностей самого языка.

Здесь описано более 400 фрагментов кода, которые дадут ответы на то, как устроен язык. Всё подробно объясняется, даются пояснения относительно ограничений по тем или иным причинам. Книга будет интересна и начинающим программистам, и их более опытным коллегам.

Самоучитель Ruby

Если вы только начинаете свое знакомство с миром программирования на Ruby, то обратите внимание на этот самоучитель. Он проведет вас по азам языка, от простого к сложному. Всё написано доступным для понимания языком, что упростит работу с книгой. Естественно, что после каждой главы идёт несколько заданий на закрепление материала.

После освоения с самим Ruby, вы приступите к изучению объектно-ориентированных возможностях языка. Вы узнаете о возможностях языка в веб-программировании и тестировании. Освоив этот язык, вы подготавливаете себе плацдарм для работы с различными фреймворками (Ruby on Rails, Sinatra, RSpec и прочие).

Head First. Изучаем Ruby

O’Really не мог пройти мимо Ruby и написал свою книгу для новичков. Эта книга не изменяет традициям линейки: вся информация подана интересно, живо, с большим количеством иллюстраций. Каждый фрагмент кода подробно объяснен, даны пояснения как и что лучше сделать. И даются предостережения о том, как делать совершенно не стоит. Информация подаётся от простого к сложному, с заданиями на самостоятельное решение в конце каждого блока.

Ruby. Объектно-ориентированное проектирование

Эта книга для тех, кто уже познакомился с языком и хочет расширить и углубить знания по нему. Здесь затрагиваются более специфические аспекты Ruby. Этот материал поможет понять что должно быть в классе, научить не допускать прямой связи между объектами, если необходимо определить границы функциональности.

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

Intro To Ruby Programming: Beginners Guide Series

Автор Джон Элдер шаг за шагом проведет вас через все тонкости программирования на Ruby. Этот труд для новичков, никаких предварительных знаний не нужно. Просто берете книгу и начинаете погружаться в мир программирования, следуя инструкциям Джона.

Вы узнаете о переменных, массивах, циклах, методах и многом другом. В конце вы станете профессиональным программистом Ruby! Используйте свои навыки на практике в упражнениях в конце каждой главы. В завершение вы создадите математическую карточную игру, используя все навыки, которые вы получили в процессе изучения всей книги.

The Little Book Of Ruby Programming: Learn To Program Ruby For Beginners

Автор уверяет, что эта книга — самый быстрый и простой способ научиться программировать на Ruby. Но и тем, кто знаком с языком, справочник будет полезен. Благодаря этому изданию вы научитесь работать с Ruby с нуля. Вы узнаете об объектной ориентации, классах, методах, модулях, файловых операциях, обработке исключений и многом другом. Всё подано максимально кратко и понятно. Объем всей книги — всего 140 страниц.

Ruby Wizardry: An Introduction to Programming for Kids

Язык программирования Ruby идеально подходит для начинающих: он прост в освоении, мощный и увлекательный в использовании. Но учить сухой текст, зазубривая операторы, массивы и прочие вещи — не очень интересно. А вот если бы это было в игровой форме… А вот тут и появляется по мановению волшебной палочки эта книга.

Ruby Wizardry — это игривая иллюстрированная история, которая научит вас программировать на Ruby, отправляя вас в фантастическое путешествие. Весело, задорно и никакой скуки. Так что вперёд, покоряем язык Ruby!

Beginning Ruby: From Novice to Professional

Эта книга также может быть использована в качестве учебника или дополнения к учебнику. Здесь даны азы языка, но больше упор идёт на более глубокое изучение. Здесь вы узнаете принципы, лежащие в основе объектно-ориентированного программирования, и в течение нескольких глав создадите полнофункциональное приложение на Ruby.

Вы также получите базовое представление о многих вспомогательных технологиях: базы данных, XML, веб-фреймворки и прочие. Некоторые из которых необходимы как часть полнофункционального приложения Ruby.

Test Driven Development in Ruby: A Practical Introduction to TDD Using Problem and Solution Domain Analysis

Изучите основы разработки через тестирование (TDD) с использованием Ruby. Сначала вы будете выполнять анализ предметной области, разработку тестовых примеров и написание тестов. Эти фундаментальные концепции дадут вам прочную основу TDD. Test Driven Development в Ruby написана профессиональным разработчиком для тех, кто достаточно глубоко изучил Ruby.

Сначала объясняются концепции, затем демонстрируется, как применить теорию на практике. В конце каждой главы дается упражнение для закрепления материала.

Learning Ruby: A Hands-on Guide for Beginners

Еще одна книга от O’Really для людей, интересующихся Ruby, особенно для тех, кто планирует работать с Ruby on Rails. Второе издание, полностью переработанное и обновленное для Ruby 2.3, предоставляет практический обзор основных структур языка Ruby.

На многих практических примерах вы узнаете, как все части сочетаются друг с другом, включая переменные, операторы, структуры управления и широкий спектр функций, характерных для Ruby, таких как обработка исключений и обработка XML.

Comprehensive Ruby Programming: From beginner to confident programmer

Начиная с основополагающих принципов, таких как синтаксис, автор переходит к углубленным темам: анализ данных, ООП, встроенные методы Ruby, основные навыки программирования и введение в фреймворки Ruby on Rails и Sinatra. Вы также создадите 10 практических программ на Ruby.

Practical Object-Oriented Design: An Agile Primer Using Ruby (2nd Edition)

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

https://www.kv.by

НАПИСАНИЕ ПРОСТОЙ ПРОГРАММЫ RUBY

«Hello, World!» — классический пример тестовой программы. Эта простая программа, которую может написать даже новичок, позволяет также убедиться, что среда правильно настроена и работает.

Это руководство поможет написать такую программу в Ruby. Чтобы несколько разнообразить её, мы покажем, как научить программу запрашивать имя пользователя и использовать его в приветствии. В результате у вас будет программа, которая работает так:

Please enter your name.
8host
Hello, 8host! I’m Ruby!

Требования

Для работы вам понадобится локальная среда разработки. Настроить такую среду можно с помощью одного из руководств:

  • Установка Ruby и настройка локальной среды разработки в Ubuntu 16.04
  • Установка Ruby и настройка локальной среды разработки в macOS

1: Базовая программа «Hello, World!»

Чтобы написать базовую программу «Hello, World!», откройте текстовый редактор и создайте новый файл:

nano hello.rb

Вставьте следующий код:

puts «Hello, World!»

Рассмотрим разные компоненты этого кода подробнее.

puts – это метод Ruby, который выводит на экран текст.

После этого метода идет последовательность символов «Hello, World!». Все символы, которые находятся в кавычках, составляют строку. Метод puts отобразит эту строку на экране.

Некоторые методы доступны в Ruby по умолчанию. Такие встроенные методы всегда доступны при написании программ Ruby. Также вы можете определять собственные методы. Сохраните и закройте файл (Control+X, Y).

2: Запуск программы

Теперь нужно попробовать запустить программу «Hello, World!». Для этого можно использовать команду ruby.

ruby hello.rb

Команда должна вернуть:

Hello, World!

Команда ruby запустила интерпретатор Ruby. Интерпретатор читает указанный файл и оценивает его содержимое. Он выполнил код puts «Hello, World!», вызвав функцию puts и передав ей строковое значение «Hello, World!».

В данном случае строка Hello, World! также называется аргументом. Аргумент – это значение, передаваемое методу. Кавычки, в которые помещена строка, не отображаются, потому что они необходимы, чтобы обозначить интерпретатору Ruby пределы строки. Итак, программа работает. Теперь попробуйте сделать ее интерактивной.

3: Пользовательский ввод

Эта простая программа при запуске будет выдавать один и тот же результат. Чтобы немного усложнить ее, настройте запрос пользовательских данных. Полученные данные программа сможет использовать в выводе.

Создайте новый файл для программы в текстовом редакторе:

nano greeting.rb

Вставьте эту строку, которая будет запрашивать имя пользователя:

puts «Please enter your name.»

Это уже знакомый вам метод puts, который выводит текст на экран.

Следующая строка будет собирать пользовательские данные:

puts «Please enter your name.»
name = gets

Метод gets собирает ввод с клавиатуры. Это приостанавливает программу, позволяя пользователю ввести любой текст. Программа продолжит работу, когда пользователь нажмет клавишу Enter на своей клавиатуре. Все нажатия клавиш, включая нажатие клавиши Enter, собираются программой и преобразуются в строку символов.

Эти символы можно использовать в выводе программы. Для этого присвойте полученную строку переменной name. Ruby сохраняет строки в памяти компьютера, пока программа не завершит работу.

Затем добавьте эту строку:

puts «Please enter your name.»
name = gets
puts «Hi, #{name}! I’m Ruby!»

Здесь снова используется метод puts. Также здесь используется функция Ruby, которая называется строковой интерполяцией. Она позволяет извлекать присвоенное переменной значение и помещать его внутри строки. Вместо слова name в строке будет значение, введенное пользователем. Сохраните и закройте файл (Ctrl+X, Y).

Запустите программу. Она запросит имя пользователя. Введите имя и нажмите Enter. Вывод должен выглядеть так:

Please enter your name.
8host
Hi, 8host
! I’m Ruby!

Как видите, вывод программы разделяется, и вместо одной строки «Hi, 8host! I’m Ruby!» мы получаем две строки.

Дело в том, что программа фиксирует все нажатия клавиш, включая клавишу Enter, которая запускает дальнейшие действия программы. Но в строке нажатие клавиши Enter создает специальный символ, который переводит весь последующий вывод в новую строку. Потому программа отображает текст именно так, разбив строку на две. Это можно исправить.

Откройте файл greeting.rb:

nano greeting.rb

Найдите эту строку:

name = gets

И добавьте в нее:

name = gets.chop

Метод chop будет применяться к строке, полученной методом gets. Метод chop удаляет последний символ из строки. В данном случае это символ новой строки, создаваемый нажатием клавиши Enter.

Сохраните и закройте файл.

Запустите программу:

ruby greeting.rb

И вы получите одну строку:

Please enter your name.
8host
Hi, 8host! I’m Ruby!

Теперь у вас есть программа Ruby, которая может запрашивать данные пользователя и использовать их в выводе.

Заключение

Попробуйте расширить свою простую программу. Например, вы можете запросить любимый цвет пользователя и научить программу называть ее любимый цвет. Можно даже попытаться использовать эту технику для создания простой программы Mad-Lib.

https://www.8host.com/

Ruby для начинающих: чем интересен этот язык и как его эффективно изучать

Меня зовут Иван Бондаренко, я Senior Software Engineer и Ruby Technical Lead в CHI Software. Опыт разработки — 6 лет, из них последние 5 — я работаю с Ruby. До этого я программировал 1 год на PHP. Имея за плечами опыт преподавания (я вел курсы по Ruby в Spalah), я решил максимально доступно рассказать об этом языке программирования, поделиться опытом с начинающими специалистами и, возможно, заинтересовать кого-то из них Ruby.

Это первая из статей, в которых я расскажу об особенностях Ruby и Ruby on Rails и поделюсь советами о том, с чего начать в изучении Ruby, где находить ответы на вопросы, как получить нужный опыт и чем вы сможете выгодно отличаться от других кандидатов. Буду рад, если мои советы помогут кому-то определиться со специализацией и выбрать Ruby для изучения и работы.

Основные особенности и отличия Ruby

Часто слышу вопрос: стоит ли учить Ruby? Как правило, вопрос основан на сомнениях: насколько легко найти работу с данной специализацией, будут ли интересные проекты и так далее и тому подобное. Ruby — современный, постоянно развивающийся язык программирования, областей применения ему — масса. Наверняка вы слышали про Chef, Vagrant, Homebrew, но чаще всего все мы слышим о Rails. Вот пост с комментарием самого автора фреймворка о том, почему стоит учить Rails.

Конечно, каждый сам для себя решает, какой инструмент ему использовать. И нет смысла бесконечно долго спорить о том, почему одна технология лучше другой. Я выбрал Ruby, потому что это невероятно выразительный и гибкий язык, который позволяет одну и ту же задачу решить многими способами.

Ruby — интерпретируемый, полностью объектно-ориентированный язык программирования с четкой динамической типизацией. Он сочетает в себе Perl-подобный синтаксис с объектно-ориентированным подходом. Также некоторые черты заимствованы из языков программирования Python, Lisp, Dylan и CLU.

Кроссплатформенная реализация интерпретатора языка Ruby распространяется на условиях открытого программного обеспечения. Код, написанный на Ruby, может быть понятен даже человеку, который не разбирается в программировании. На RoR были созданы такие проекты, как Redmine, Twitter, Shopify, Basecamp, GitHub, Kickstarter, Airbnb и другие.

С ростом Node.js популярность Ruby on Rails несколько уменьшилась, но технологические стартапы часто используют RoR благодаря простоте прототипирования. Ruby — 11-й самый популярный язык в индексе TIOBE.

Преимущества Ruby

  • Многочисленное и доброжелательное комьюнити.
  • Довольно высокий порог входа, что означает, что Ruby-разработчик с большой вероятностью имеет опыт работы как минимум с еще одним языком программирования.
  • Вы используете только те библиотеки и модули, которые необходимы.
  • Существует большое количество полезных библиотек, которые уже готовы к использованию (Ruby Gems).
  • В интернете есть много информации по Ruby, в структурированном и отсеянном виде.
  • В контексте обсуждения Ruby нельзя не упомянуть популярнейший фреймворк Ruby on Rails.

А теперь поговорим о некоторых преимуществах Ruby более подробно.

Скорость разработки

Одним из плюсов Ruby и фреймворка RoR считается скорость разработки. Личный опыт и опыт коллег показывает, что решение задач на Rails происходит в полтора раза быстрее по сравнению с другими фреймворками подобного плана. Ruby очень прост как инструмент, а также существует огромное количество готовых решений для различного рода задач.

Штатные средства кеширования данных

При разработке масштабного проекта одним из самых важных моментов является кеширование. Ruby on Rails в основной комплектации имеет штатные средства кеширования данных. То есть у вас сразу будут в наличии инструменты для кеширования данных на проекте, и вы можете легко кешировать отдельные блоки кода или даже целые страницы.

Вначале тесты, потом код

Часто в процессе разработки крупных проектов возникает вопрос о тестировании, и не редкость, когда нет дополнительных средств на отдельную команду тестировщиков. В Rails есть решение и этой проблемы. Если сравнивать RoR с другими фреймворками в контексте тестирования приложения, то вы найдете массу готовых решений для любого вида тестов, будь то интеграционные или юнит.

Все эти библиотеки работают «из коробки». В идеале в проекте на Ruby on Rails код не пишется до тех пор, пока под него не написаны тесты. RoR идеология предполагает изначальное использование методов BDD (Behavior Driven Development) или TDD (Test Driven Development).

Общепринятые стандарты процесса разработки у Ruby-разработчиков

Говоря о преимуществах Ruby, я не могу снова не упомянуть сообщество рубистов. Оно постоянно растет, развивается и всегда готово прийти на помощь. Всегда есть кто-то, кто подскажет, как лучше решить проблему, поделится опытом в каком-либо вопросе.

Также очень важный момент — в Ruby-сообществе уже много лет есть стандарты процесса разработки, некие правила/соглашения сообщества, по которым ведется разработка, что очень сильно упрощает работу. За счет этих стандартов каждый проект очень структурируется, соответственно, новый разработчик в команде быстро войдет в курс дела и уже с первых дней работы сможет быть полезен.

И даже больше: если проект начинала одна команда, а заканчивает другая — это тоже совсем не проблема. Поскольку разработка ведется по уже упомянутым правилам и соглашениям сообщества, новая команда быстро и без трудностей вникнет в проект и успешно его закончит без особых потерь времени.

Также в Ruby on rails есть большое количество самых разных готовых решений в открытом доступе. Большинство решений уже были реализованы кем-то до вас, а также протестированы сообществом, что уменьшает необходимость разработки с нуля. Это могут быть системы аутентификации, авторизации, комментирования, системы платежей, почтовые рассылки и так далее.

Готовые решения для многоязычности проекта

Rails в базовой комплектации имеет очень мощные средства для локализации проекта. Есть возможность как предусмотреть поддержку нескольких языков изначально, так и осуществить её позже. В проекте присутствуют специальные файлы для переводов терминов, инструменты для отображения шаблонов на разных языках и многое другое.

Высокий уровень защиты данных

Сейчас нередко в сети публикуются статьи о взломах различных ресурсов. Разработчики фреймворка Ruby on Rails очень серьезно отнеслись к проблеме защиты данных. В RoR изначально присутствует шифрование паролей, данных кредитных карт и других личных данных пользователя, также исключены SQL инъекции и XSS атаки. Все входные параметры экранируются по умолчанию.

Изучение Ruby

А теперь поговорим, как именно можно освоить Ruby.

Теория

Начать следует, конечно же, с литературы. Я рекомендую эти источники:

  • Ruby за 20 минут — хороший ресурс для совсем начинающих. Позволяет меньше, чем за полчаса ознакомиться с основными конструкциями языка и начать писать свои небольшие программы.
  • Codecademy — платформа с онлайн-курсами по множеству направлений, включая чистый Ruby и Rails. Здесь довольно интересно построен обучающий процесс, дается теоретический материал и сразу же практическое задание, чтобы его закрепить. Финальные задания платные, но и без них можно получить нужные навыки.
  • Материалы по Ruby и Rails — сборник ссылок на различные сайты и книги, посвященные изучению Ruby и Rails.
  • Отдельно могу посоветовать книгу Flanagan D., Matsumoto Y. «The Ruby Programming Language». Она считается одной из лучших, её автор — сам создатель языка Ruby.
  • Google 🙂

Далее я рекомендую изучить хотя бы базовые понятия SQL, потому что СУБД хоть и отличаются между собой, но зачастую используют один и тот же язык.

Вот парочка ресурсов, с которых можно начать:

  • w3schools.com/sql — здесь можно почитать, попробовать и проверить свои знания по SQL.
  • quizful.net/test — тут можно найти вопросы, которые часто задают на собеседованиях.

Английский

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

Во-первых, английский — это основной язык международного комьюнити, соответственно, большая часть полезной литературы тоже будет на английском, многие новости, доклады и важные статьи тоже будут появляться сначала на английском. Если вы хотите узнать ответ на какой-либо вопрос — очень большая вероятность, что в первую очередь его получится найти именно на английском.

Во-вторых, чем лучше ваши знания английского, тем больше шансов найти работу. Большинство клиентов зарубежные, соответственно, знание английского важно для продуктивного общения, четкого понимания ТЗ и хорошего контакта с клиентом.

Практика

После изучения нескольких ресурсов стоит перейти к более важной части, а именно к практике. Примеров заданий с интернет-магазином или простым блогом в сети масса (вот один из них), особенно если говорить о Rails.

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

Курсы

После прочтения теории и написания нескольких «пет-проектов» можно, конечно, пробовать идти по собеседованиям, но часто бывает, что этих знаний недостаточно. Это связано с большим наплывом кандидатов, и, учитывая конкуренцию, каждый старается выделиться и как можно лучше подготовиться.

Еще один важный пункт в обучении, который может стать перевесом в вашу сторону при поиске работы, — это курсы по программированию. Если, конечно, у вас нет ментора, который готов тратить определенное количество времени на то, чтобы придумывать задания и делать по ним ревью.

Сразу скажу, что я ни в коем случае не рекомендую идти на курсы, не имея уже какого-то багажа знаний. Я рассматриваю курсы как отличный способ закрепить знания, полученные в процессе самообучения. И сейчас не пытаюсь рекламировать какую-то конкретную школу, а объясню, какую именно пользу можно из этого извлечь:

С высокой долей вероятности там вы узнаете то, чего не знали раньше. На курсах довольно большой объем материала, который подается в структурированной форме, что позволяет лучше усваивать материал.

На период курса у вас будет ментор, который будет делать ревью решения ваших задач и указывать на слабые места и ошибки.

Обратная связь. На уроке вы можете задать интересующий вопрос преподавателю или однокурсникам или просто поделиться опытом. Конечно, то же самое можно сделать и на конференции или митапе, но в отличие от посещения конференций, на курсах у вас будет возможность делать это чаще (обычно курсы проводятся 2-3 раза в неделю).

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

Еще одно преимущество — сертификат. Понятное дело, что в итоге вас будут оценивать по знаниям, а не по наличию бумажек в резюме. Но тем не менее это будет плюсом, особенно, если будет кандидат с похожим уровнем знаний, но без их документального подтверждения.

Плюс один проект на GitHub в вашу копилку. Если вы начинающий разработчик, то вероятнее всего проект, написанный на курсах, будет интереснее с точки зрения технологий, чем те, которые были написаны ранее.

И самое главное — трудоустройство. Говоря о курсах, я не имею ввиду только те, за которые нужно платить деньги. Часто компании сами проводят набор на обучение, чтобы потом лучших взять к себе на работу. Это могут быть внутренние курсы или стажировка/интернатура. Такой вариант — наилучший, так как вам не нужно ни за что платить, вы получаете опыт и все выше перечисленные плюсы и вдобавок — реальную перспективу трудоустройства. Попасть на них сложнее, но перспективы значимее.

Итого

Ruby — это язык, который позволяет работать без большого количества неудобств и церемоний, которые приходят со строго типизированными языками. С Ruby легко начать работать, особенно если у вас уже есть опыт разработки на других языках программирования, и вы сможете быстро создавать прототипы с Ruby on Rails. В Японии, откуда он появился, Ruby использовался для создания игр. Ruby лаконичен и читается как английский, что делает код понятным для новичков.

Что касается изучения Ruby, хочу еще раз повторить: нужно начать с малого. Прочитайте несколько книг, сделайте самостоятельно несколько заданий, а затем, если чувствуете необходимость получить больше знаний и опыта или дополнительную мотивацию — можно идти на курсы, уже имея определенный багаж знаний, полученных самостоятельно.

В идеале это курсы от какой-либо компании, которая по окончании сделает вам оффер, если хорошо себя проявите. Альтернативный вариант — платные курсы, которые помогут закрепить полученные знания, добавить в резюме еще один проект и набраться опыта, что наиболее важно на старте. Но не стоит ожидать, что по окончании платных курсов вы с легкостью пройдете собеседование, показав сертификат. Оценивать в любом случае будут знания.

В то же время, имея достаточно мотивации, терпения, способностей и опыта с другими языками программирования, вы вполне можете освоить Ruby самостоятельно, т. к. в интернете очень много полезной и хорошо структурированной информации. Также благодаря открытому и многочисленному Ruby-комьюнити можно с легкостью найти онлайн ответы на многие возможные вопросы, которые с большой долей вероятности кто-то уже задавал до вас.

https://dou.ua/

Один комментарий

  1. Нужно было подобрать себе курсы и книги для самообучения на языке ruby. Для меня язык показался очень интересным и не особо сложным, но, как и во всех языках нужно выучить немного особых правил. Самое главное статья оказалась полезна для того, бы понять стоит ли вообще изучать язык и программировать на нем. Так же из статьи узнал, что ruby хорошо занялись защитой данной, что как для меня, довольно важно.

Добавить комментарий для Андрей Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *