Язык программирования RUBY. Что такое "Руби" (Ruby)? Язык программирования "Руби"

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

Идеалы создателя Ruby

Ruby – это тщательно сбалансированный язык. Его создатель Юкихиро Мацумото (так же известный как “Matz”), объединил части его любимых языков (Perl, Smalltalk, Eiffel, Ada и Lisp) чтобы сформировать новый язык, в котором парадигма функционального программирования сбалансирована принципами императивного программирования.

Он часто повторял, что он “пытается сделать Ruby естественным, но не простым” языком, который отражает жизнь.

Основываясь на этом, он добавляет:

Ruby прост на вид, но очень сложен внутри, подобно человеческому телу .

Рост популярности Ruby

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

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

5 . times { print "Мы любим Ruby! Ruby – это замечательно!" }

Во многих языках числа и другие примитивные типы данных не являются объектами. Ruby под влиянием языка Smalltalk позволяет задать методы и переменные объекта всем типам данных. Это упрощает использование Ruby, так как правила применимые к объектам – применимы ко всему Ruby.

Гибкость Ruby

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

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

class Numeric def plus (x ) self . + (x ) end end y = 5 . plus 6 # y теперь равно 11

Операторы в Ruby – синтаксический сахар для методов. Вы также можете переопределить их.

Блоки, по-настоящему выразительная конструкция

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

Создание блоков было вдохновлено функциональными языками программирования. Matz говорил, “замыканиями в руби я хотел отдать дань уважения культуре языка Lisp .”

search_engines = %w . map do | engine | "http://www." + engine . downcase + ".com" end

В коде выше блок описан внутри конструкции do ... end . Метод map применяет блок кода к представленному списку слов. Многие другие методы в Ruby оставляют путь, открытый для программиста, чтобы тот написал собственный блок кода, детально говорящий методу, что тот должен сделать.

Ruby и примеси

В отличие от многих объектно-ориентированных языков, Ruby намеренно предоставляет лишь одиночное наследование. Но Ruby также предоставляет концепцию модулей (называемых Категориями в Objective-C). Модули – это коллекции методов.

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

class MyArray include Enumerable end

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

Визуальное представление Ruby

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

  • var может быть локальной переменной.
  • @var переменная объекта.
  • $var глобальная переменная.

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

Помимо основ

Ruby полон другими особенностями и конструкциями, и вот некоторые из них:

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

    В Ruby представлен настоящий mark-and-sweep (пометь и отчисти) сборщик мусора для всех Ruby объектов. Не нужно вручную отслеживать количество ссылок в сторонних библиотеках. Как говорит Matz, “Это полезней для вашего здоровья.”

    Писать расширения на C в Ruby проще чем в Perl или Python при помощи очень элегантного API для вызова Ruby из C. Он включает в себя вызовы для встраивания Ruby в программное обеспечение, чтобы использовать его как скриптовый язык. Также доступен интерфейс SWIG.

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

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

  • Перевод

Я познакомился с 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 Code
strtolower("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 :
.each {|c| puts c*2} #=> возвратит каждый элемент, умноженный на 2
Если код не умещается на одной строчке, рекомендуется использовать конструкцию do… end , вместо использования скобок. Фаны Ruby не любят скобок.

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

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

Заключение

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

Уважаемые Читатели - не забывайте, что хабраюзер, просто перевел (паршиво, да) текст. Идеологических претензий ему высказывать нет нужды.

Ruby - первый язык программирования, пришедший к нам из Страны Восходящего Солнца. Некоторое время он был широко известен только в Японии, так как вся документация по нему не была переведена на английский Однако, как только ее начали переводить и публиковать, то Ruby заинтересовались по всему миру, а в 1998 году начал свою работу форум “ruby-talk”.

Создатель языка, Юкихиро Мацумото (или “Matz”) был недоволен существующими на тот момент скриптовыми языками. По его словам, “Perl 4 был недостаточно мощным, а Python недостаточно объектно-ориентированным”. Ему нужен был идеальный язык для своих задач. Поэтому, он взял самое лучшее из других языков, создав новый, в который добавил все, что считал необходимым и правильным, а лишнее убрал. Выбирая названия для своего творения, Мацумото хотел, чтобы оно было чем-то похоже на Perl, многие идеи из которого перешли в Ruby. Выбор у него был между Coral и Ruby, и некоторые источники утверждают, что окончательное название было выбрано благодаря гороскопу.

Ruby существует уже почти 20 лет и активно развивается, при поддержке сообщества программистов и его поклонников, а также самого Матца.

Философия Ruby

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

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

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

Также стоит отметить гибкость языка. Например, вы можете переопределить операцию сложения и использовать обозначения, которые более удобны для вас. Например, определить, что сложение чисел будет работать при вводе слова plus (1 plus 2), а не символа (1+2). То, есть не вы подстраиваетесь под язык, а, наоборот, он подстраивается под вас. Это дает огромную свободу в плане самовыражения, раз можно переопределять операторы, методы и.т.д. Однако, помните, что с большой свободой приходит также и большая ответственность (проще говоря, не запутайтесь в том, что, где и как Вы переименовали).

Где применяется Ruby

На Ruby была написана система багтрекинга Redmine, редактор для векторной графики Inkscape. Также третья версия Metasploit (проект по исследованию информационной безопасности) была полностью переписана на Ruby. Ruby используют во многих крупных организациях, таких как NASA, Motorola и.т.д.

Самую большую популярность Ruby приобрел благодаря Ruby on Rails, выпущенному в 2004 году. Rails применялся при создании таких гигантов, как Твиттер, Гитхаб, Кикстартер, Diaspora и.т.д. На нем очень приятно и удобно писать сайты. К примеру, для баз данных можно использовать интерфейс запросов Active Record, который позволяет извлекать данных без использования SQL запросов (что очень нравится многим разработчикам).

Сейчас за Ruby, вернее за Ruby on Ralis, закрепилась слава языка для стартапов. На Rails достаточно просто в сжатые сроки реализовать проекты, которые отличаются оригинальностью и эффективностью и выходят за рамки шаблонных лендингов и интернет-магазинов. Конечно, с ростом нагрузок на сайт и изменением требований некоторые проекты переписываются на другие языки, которые учитывают определенную специфику и больше подходят для некоторых случаев (например, Java или Scala). Однако, Ruby и Rails продолжает развиваться, поэтому в скором времени никакого перехода может и не потребоваться.

Сложность обучения Ruby

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

Ко всем прочему, стоит отметить, что редко встречается вакансии для программирования на чистом Ruby. 90 процентов из них будут, скорее всего, для Ruby on Rails. Программисты на RoR, на сегодняшний день, одни из самых востребованных в IT отрасли. К высокой зарплате стоит прибавить высокий статус принадлежности к элите и зависть со стороны других программистов, например php-шников, пишущих сайты-визитки за 100 рублей.

Плюсы/минусы Ruby

Ruby любят за:

  • ООП в стиле Smalltalk;
  • поддержку комьюнити (сообщества программистов);
  • простой и удобный синтаксис;
  • большую зарплату;
  • поддержку новейших перспективных подходов в программировании;
  • большое количество готовых решений.

К недостаткам Ruby можно отнести:

  • плохую поддержку для Windows. Так как Ruby разрабатывался, в основном, для Linux, то не в Unix-подобной системе будет сложнее работать с IDE, устанавливать дополнительные библиотеки и.т.д
  • отсутствие вакансий, если это не Ruby on Rails;
  • мало документации на русском;
  • потребление памяти.

Сопутствующие технологии

Ruby on Rails - фреймворк для работы в вебе. Был создан командой программистов во главе с Дэвидом Х. Ханссоном в 2004 году, позже был значительно усовершенствован усилиями сообщества разработчиков.

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

MacRuby - реализация языка, которая предназначена для работы с системой Mac OS X. На ней вам будет проще написать приложение Mac.
mruby - усовершенствованная реализация, над которой сейчас трудится сам Юкихиро Мацумото.

  • Перевод

Я познакомился с 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 Code
strtolower("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 :
.each {|c| puts c*2} #=> возвратит каждый элемент, умноженный на 2
Если код не умещается на одной строчке, рекомендуется использовать конструкцию do… end , вместо использования скобок. Фаны Ruby не любят скобок.

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

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

Заключение

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

Уважаемые Читатели - не забывайте, что хабраюзер, просто перевел (паршиво, да) текст. Идеологических претензий ему высказывать нет нужды.

Ruby - один из самых молодых языков программирования. Своим именем он обязан драгоценному камню рубину (по аналогии с другим широко распространенным языком программирования Perl - жемчуг). Вот как описывает Ruby его создатель, японский программист Юкихиро Мацумото (Yukihiro Matsumoto): "Это мощный и динамический объектно-ориентированный язык с открытыми исходниками, который я начал разрабатывать в 1993 году. Ruby работает на многих платформах, включая Linux и многие реализации Unix, MS-DOS, Windows 9x/2000/NT, BeOS и MacOS. Главная цель Ruby - эффективность разработки программ, и пользователи найдут, что программирование на нем эффективно и даже забавно".

В Японии Ruby сильно потеснил такие известные языки как Python и Perl (а книга "Ruby the Object-Oriented Scripting Language" стала бестселлером) и начал распространяться по всему миру. За последний год появились три англоязычных книги, посвященные Ruby (к сожалению, пока не имеющие русского перевода). У этого языка очень неплохие шансы стать действительно популярным - ведь он вобрал в себя достоинства других языков, учтя их недостатки.

Ruby входит в стандартную поставку ОС Linux (начиная с версии 7.2), а пользователям MS Windows для первого знакомства стоит порекомендовать его несколько устаревшую версию, которая включает, помимо интерпретатора языка и библиотек, руководство пользователя, FAQ (ответы на часто задаваемые вопросы) и множество примеров. Ruby является свободно распространяемым продуктом, поэтому вы можете не беспокоиться ни о его стоимости, ни об ограничениях в его использовании.

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

Сначала проверим, установлен ли интерпретатор Ruby в системе или нет. В окне shell введите команду ruby -v (этот ключ требует вывода версии языка). Если следующее сообщение появится, то Ruby установлен (версия, дата и платформа могут отличаться):

ruby 1.6.4 (2001-06-04)

puts "Hello, World!"

Для выполнения этой программы в командной строке введите

В результате выполнения программы в командном окне будет напечатана требуемая фраза.

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

#!/usr/bin/env ruby

Она обязательно должна начинаться с первой позиции. Затем нужно изменить права доступа файла с программой, сделав его исполняемым: chmod +x hello.rb Теперь для запуска программы достаточно ввести команду

Для того чтобы сделать программу более понятной человеку, который ее читает, вставляются комментарии. Однострочные комментарии начинаются с символа # и продолжаются до конца строки. Многострочные комментарии заключают в специальные "скобки" - все, что располагается между строками =begin и =end, считается комментарием. Например,

#!/usr/bin/env ruby =begin Это комментарий =end puts "Hello, World!" # Это тоже комментарий

Программа на языке Ruby, часто называемая скриптом, есть последовательность инструкций (утверждений, предложений). Каждая инструкция по умолчанию заканчивается концом строки. Если же по каким-либо причинам требуется разместить несколько инструкций на одной строке, то их нужно разделять символом; (точка с запятой). С другой стороны, иногда инструкция не помещается на одной строке. В этом случае символ \ сигнализирует о том, что ее продолжение располагается в следующей строке.

Пример

#!/usr/bin/env ruby # Инструкция заканчивается концом строки puts "Hello, World!" # Несколько инструкций в одной строке puts "Это тест, "; puts "демонстрирующий работу Ruby." # Незаконченная инструкция, # продолжение которой на следующей строке puts "Программирование на Ruby - " + "приятное занятие." # Утверждение, разделенное на несколько строк puts \ "И мы обязательно этому научимся!"

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