Язык программирования 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 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 и Smalltalk объектно-ориентированные особенности, а также имеет общие черты с Python , Lisp и утилитой командной строки - это плюс при обучении основам программирования.
Язык программирования Руби в настоящее время имеет только одну реализацию Ruby интерпретатора, хотя предпринимаются усилия по реализации интерфейса Ruby (так называемый "Кардинал") для виртуальной машины Parrot .
Язык программирования Ruby имеет много полезных функций. Ruby поддерживает также оператор перегрузки и обработки исключений. В настоящее время, языку программирования Руби не хватает Unicode поддержки. Ruby имеет итераторы (которые напоминают CLU и Sather). Ruby поддерживает абстрактные представления функций (также как и в Smalltalk и многих функциональных языках программирования для начинающих). Руби имеет встроенную, синтаксическую поддержку регулярных выражений Perl на уровне языка (а не только в библиотеках, как в Python и многих других языках). Руби поддерживает автоматический сбор мусора и динамическую библиотеку загрузки / подключения модулей (в зависимости от архитектуры) на Microsoft Windows . Ruby был портирован на многие платформы, включая Unix , Microsoft Windows, DOS , Mac OS X , OS/2, Amiga , и многое другое.
Ruby является чисто объектно-ориентированным: каждый бит данных объектов, включая типы, которые определены как "примитивные" в остальных языках. Каждая функция является методом. Это похоже на Smalltalk, но в корне отличается от Java и Python. Каждое имя значения (имя переменной) в программе Ruby определяет ссылку на объект, а не сам объект. Ruby поддерживает наследства с динамической диспетчеризацией, Mixins , и Синглтон методами. Ruby не поддерживает множественное наследование, но классы могут импортировать модули. Хотя в Ruby можно пользоваться процедурным синтаксисом, но все в Руби является объектами в смысле Smalltalk, а не Perl или Python программирование для чайников.
Язык был создан Юкихиро Мацумото (ака "Мац") Yukihiro Matsumoto (a.k.a. "Matz") 24 февраля, 1993 . Текущая стабильная версия 1.8.0. Обратите внимание, что имя не акроним - это на самом деле игра слов как у Perl . По словам автора, Ruby предназначен принципу наименьшего удивления (POLS), это означает, что язык должен быть свободным от ловушек и несоответствия, которые мешают других языках.
Из Ruby FAQ: Если вам нравится Perl, тогда вы используя Ruby, будете чувствовать себя превосходно из-за его синтаксиса. Если вам нравится Smalltalk, вам понравится Ruby и понравится его семантика. Если вам нравится Python, то вы сможете, а может и нет почувствовать огромную разницу в философии дизайна между Python и Ruby / Perl.
Руби распространяется бесплатно и с открытым исходным кодом по лицензии GPL или Artistic License , как и Perl.

Примеры
Вот некоторые примеры кода Ruby:

>> -199.abs # номер -199 является объектом; для него вызывается метод ABS. => 199 >> "Ruby is cool".length # вызывается метод объекта String – длина строки => 13 >> "Rick".index("c") => 2 >> "John".swapcase => "jOHN" >> #Arrays ?> .sort => >> .sort.reverse => # следующий блок кода выполнится 10 раз 10.times { # Replace " " with ", " and store in string1 string1 = "Hello world".gsub(" ", ",") # append "!" to variable "string1" string1 += "!" # print variable "string1", followed by a newline puts string1 }

Как стать профессионалом по разработке сайтов и начать зарабатывать? Недорогие видео курсы с ознакомительным введением.

Ruby (англ. ruby - рубин, произносится ["ru:bɪ] - ру́би) - интерпретируемый язык программирования высокого уровня. Обладает независимой от операционной системы реализацией многопоточности, строгой динамической типизацией, «сборщиком мусора» и многими другими возможностями, поддерживающими много разных парадигм программирования, прежде всего классово-объектную. Ruby был задуман в 1993 году (24 февраля) японцем Юкихиро Мацумото, стремившимся создать язык, совмещающий все качества других языков, способствующие облегчению труда программиста. По особенностям синтаксиса он близок к языкам Perl и Eiffel, по объектно-ориентированному подходу - к Smalltalk. Также некоторые черты языка взяты из Python, Lisp, Dylan и Клу. Кроссплатформенная реализация интерпретатора языка является полностью свободной.

Возможности языка

  • Имеет лаконичный и простой синтаксис, разработанный под частичным влиянием Ада, Eiffel и Python.
  • Позволяет обрабатывать исключения.
  • Позволяет переопределять операторы, которые на самом деле являются методами.
  • Полностью объектно-ориентированный язык программирования. Все данные в Ruby являются объектами. Единственное исключение - управляющие конструкции, которые не являются объектами. Например, число «1» - это экземпляр класса Fixnum. Также поддерживается добавление методов в класс и даже в конкретный экземпляр во время выполнения программы.
  • Не поддерживает множественное наследование, но вместо него может использоваться концепция «примесей», основанная в данном языке на механизме модулей.
  • Содержит автоматический сборщик мусора. Он работает для всех объектов Ruby, в том числе для внешних библиотек.
  • Создавать расширения для Ruby на очень просто частично из-за сборщика мусора, частично из-за несложного и удобного API.
  • Поддерживает замыкания с полной привязкой к переменным.
  • Поддерживает блоки кода (код заключается в { … } или do … end). Блоки могут использоваться в методах или преобразовываться в замыкания.
  • Целые переменные в Ruby автоматически конвертируются между типами Fixnum (32-разрядные) и Bignum (больше 32 разрядов) в зависимости от их значения, что позволяет производить целочисленные математические расчёты со сколь угодно большой точностью.
  • Не требует предварительного объявления переменных, но для интерпретатора желательно, чтобы переменным присваивалось пустое значение nil (тогда интерпретатор знает, что идентификатор обозначает переменную, а не имя метода).
  • В Ruby непосредственно в языке реализованы многие шаблоны проектирования, так, например, «одиночка» (singleton) может быть (хотя и не обязан) реализован добавлением необходимых методов к одному конкретному объекту (см. ниже).
  • Может динамически загружать расширения, если это позволяет операционная система.
  • Имеет независимую от ОС поддержку невытесняющей многопоточности.
  • Перенесён на множество платформ. Он разрабатывался на Linux, но работает на многих версиях Unix, DOS, Microsoft Windows (в частности, Win32), Mac OS, BeOS, OS/2 и т. д.

Философия языка

Юкихиро Мацумото, создателю языка Ruby принадлежат следующие высказывания: "Человек создан для творчества, и я всегда знал, что люблю творить. Увы, я обделён талантом художника или музыканта. Зато умею писать программы."

"Я хочу, чтобы компьютер был моим слугой, а не господином, поэтому я должен уметь быстро и эффективно объяснить ему, что делать."

Мацумото, фанат объектно-ориентированного программирования, мечтал о языке более мощном, чем Perl, и более объектно-ориентированном, чем Python. Основное назначение Ruby - создание простых и в то же время понятных программ, где важна не скорость работы программы, а малое время разработки, понятность и простота синтаксиса. Язык следует принципу «наименьшей неожиданности»: программа должна вести себя так, как ожидает программист. Однако в контексте Ruby это означает наименьшее удивление не при знакомстве с языком, а при его основательном изучении. Сам Мацумото утверждает, что целью разработки была минимизация неожиданностей при программировании для него, но после распространения языка он с удивлением узнал, что мышление программистов похоже, и для многих из них принцип «наименьшей неожиданности» совпал с его принципом.

Установка

Три способа установки Ruby

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

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

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

Сторонние инструменты

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

RVM

Ruby Version Manager (RVM) – популярный инструмент для установки Ruby. Он позволяет устанавливать и управлять несколькими копиями Ruby в вашей системе, также как и несколькими альтернативными имплементациями Ruby.

Mac OS X Tiger поставляется с Ruby версии 1.8.2 и Leopard поставляется с 1.8.6. Но для тех, кто еще не обновился до Leopard, существует множество способов установить последнюю версию Ruby.

Многие люди на Mac OS X используют Homebrew как пакетный менеджер. И это действительно просто – установить Ruby:

$ brew install ruby

А также, так как OS X является UNIX-подобной ОС, скачивание и установка из исходного кода настолько же эффективна, как и другие решения. Чтобы помочь вам с установкой новой версии Ruby на OS X, наилучшей идеей будет воспользоваться RVM. Наберите rvm notes, чтобы получить специфичную информацию для вашей операционной системы.

Подробные инструкции по установке Ruby (и Rails) написал Dan Benjamin: для Tiger, для Leopard, и для Snow Leopard. Данные инструкции помогут вам запустить окружение очень быстро. Для Lion поможет данная инструкция.

Ruby на Solaris и OpenIndiana

Ruby 1.8.7 доступен для Solaris 8-10 на Sunfreeware и Blastwave. Ruby 1.9.2p0 доступен также на Sunfreeware, но это все уже устарело. Использование RVM поможет вам получить последнюю версию Ruby.

Чтобы установить Ruby на OpenIndiana, пожалуйста, используйте клиент Image Packaging System, или IPS. Данная система установит последние бинарные файлы Ruby и RubyGems прямо из сетевого репозитория OpenSolaris для Ruby 1.9. Это просто:

$ pkg install runtime/ruby-18

Как и прежде, RVM, это хороший способ получить последнюю версию Ruby.

Синтаксис и Семантика

Всё объект

2 . class => Fixnum 2 . to_s => "2" 2 . to_s . class => String

У всего есть значение

2 + 2 => 4 (2 + 2 ) . zero? => false if true then "yes" end => "yes" if false then "yes" end => nil

Вывод vs. Значение

puts "foo" foo => nil

Вывод – foo\n , но при этом значение – nil .

Печать

  • print печатает передаваемые аргументы
  • puts печатает передаваемые аргументы с переводом на новую строку в конце
  • p inspects and prints its arg plus a newline

Продвинутая печать

  • pp "красивая" печать параметров с переводом на новую строку
  • require "pp"
  • d еще более "красивая" печать, чем pp
  • предоставляется gem"ом wrong
  • require "wrong"; include Wrong::D
  • если x = 10 , d { x } печатает x is 10

Блоки как мини-функции

  • Блоки также могут принимать параметры и возвращать значения
  • к примеру, итератор map переносит каждый элемент массива в новый массив

    [ "hello" , "world" ]. map { | string | string . upcase } => [ "HELLO" , "WORLD" ]

    { |string| string.upcase } определяет блок

Опциональная пунктуация

    Точки с запятой, скобки, и return являются опциональными

    Следующие выражения эквивалентны:

    def inc (x ) return x + 1 ; end def inc x x + 1 end def inc (x ); x + 1 ; end def inc (x ) x + 1 ; end

Переносы строк

x = 1 + 2 x #=> 3 x = 1 + 2 x #=> 1

Решение: всегда оставлять операторы на верхней строке

x = 1 + 2 x #=> 3

Используйте круглые скобки только если они нужны

"Hello" . gsub "H" , "h" => "hello" "Hello" . gsub "H" , "h" . reverse => "hello" "Hello" . gsub ("H" , "h" ) . reverse => "olleh"

Комментирование символом решётки

# комментарий 2 + 2 # комментарий

Переменные и неявное объявление

first_name = "Ded" last_name = "Moroz" full_name = first_name + last_name #=> "DedMoroz"

Встроенные типы

  • Numbers
  • 42 (Fixnum)
  • 3.14159 (Float)
  • Booleans
  • false
  • Strings
  • "apple"
  • "banana"
  • Symbols
  • :apple
  • Regular Exsource lang="ruby"ssions
  • /fo*/i
  • Arrays
  • ["apple", "banana"]
  • Ranges
  • (1..10)
  • Hashes
  • {:apple => "red", :banana => "yellow"}
  • {apple: "red", banana: "yellow"}

Интерполяция строк

"boyz #{ 1 + 1 } men" => "boyz 2 men"

  • Любой Ruby-код может быть написан внутри фигурных скобок
  • Он выполняется и результат записывается в строке

равно, двойное равно, и тройное равно

  • x = 1 означает “передать значение 1 переменной x ”
  • x == 2 означает “ true если x равно 2 , иначе false ”
  • x === 3 означает то же, что и == но иногда большее

Функции

def add a , b a + b end add 2 , 2 #=> 4

  • Заметьте, ‘return’ не необходим
  • def add(a, b) также разрешено

Классы и методы

class Calculator def add (a , b ) a + b end end calc = Calculator . new calc . add (2 , 2 ) #=> 4

  • функция внутри класса называется методом

Классы

  • Класс определяет группу методов
  • Каждый объект имеет класс, если класс не задан явно, то объект принадлежит классу Object

Сообщения и методы

  • на объект ссылаются через переменную или литерал
  • оператор "точка" (.) отсылает сообщение объекту
  • объект принимает сообщение и вызывает метод
  • если точка не написано, то сообщение принимает объект по умолчанию (self)

Цепочки методов

  • Цепочки методов – удобная и мощная особенность Ruby
  • Она зависит от трех возможностей языка:
    • У каждого выражения есть значеие
    • Каждое значение является объектом
    • Итераторы – циклы внутри методов
  • Таким образом, методы можно вызывать для всего, в том числе для результата итератора

Пример

Дана строка:)

Методы с восклицательным и вопросительным знаками

  • имена методов могут заканчиваться на! или?
  • ? значит, что объект вернет boolean-значение
  • ! означает предостережение, метод, скорее всего, изменяет объект, для которого он вызывается

Идентификаторы

  • локальная_перменная - начинается со строчной буквы или символа нижнего подчеркивания, содержит строчные буквы, цифры, подчеркивания, стиль snake_case
  • @instance_переменная - начинается с @
  • @@переменная_класса - начинается с @@
  • $глобальная_переменная - начинается с $
  • Константа или КОНСТАНТА - должна начинаться с заглавной буквы
  • ClassName - при помощи стиля CamelCase
  • имя_метода? - как локальная пермененная, но может оканчиваться на? или! или =
  • ключевые слова - окола 40 зарезервированных слов типа (def) или (__FILE__)
  • литералы - "hi" для сторк, для массивов, {:a=>1, :b=>2} для хэшей и т. д.

Видимость переменных

var # локальная переменная (или вызов метода) @var # instance переменная @@var # переменная класса $var # глобальная переменная VAR # константа

load и require

  • load вставляет содержимое запрашиваемого файла в текущий
  • require делает методы запрашиваемого файла доступными в текущем
    • игнорирует уже загруженные файлы
    • опускает окончаение.rb
    • также может быть использован для расширений, написанных на языке C (.so , .dll , и т. п.)

Другие имплементации Ruby

Ruby как язык имеет несколько разных имплементаций. Данная статья посвящена оригинальной имплементации MRI (“Matz’s Ruby Interpreter” – Ruby интерпретатор Матца) или CRuby, но также существует несколько других. Они бывают очень полезны в различных ситуациях, предоставляют большую интеграцию с другими языками или окружениями, или имеют возможности, которых нет в MRI.

Список имплементаций

  • JRuby это Ruby реализованный на JVM (Java Virtual Machine), использует оптимизированный JIT компилятор, сборщик мусора, нативные потоки, инструментальную экосистему и огромное количество библиотек JVM.

Удивляетесь, почему 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 как язык программирования существует уже очень давно. Работа над первой редакцией этого невероятно популярного сегодня языка началась в далеком 1993 году, а первая официальная версия датируется 1995 годом. Создатель языка, Юкихиро Мацумото, был энтузиастом программирования еще со времен студенчества, однако идея создания собственного инструмента появилась у него гораздо позже. Так что же такого примечательного в этом языке программирования, что сегодня он занимает одну из лидирующих позиций на мировой арене разработки программного обеспечения?

Язык программирования Ruby - это высокого уровня, с и независимой от исполняющей среды реализацией многопоточности. В нем есть свой сборщик мусора, а по особенностям синтаксиса он наиболее приближен к таким языкам как Perl. С развитием экосистемы эта платформа много позаимствовала также у Smalltalk, Python, Lisp и других языков программирования. Очень важным для существования и непрерывного развития является также то, что язык "Руби" и его реализация являются полностью свободной. Это означает, что любой желающий может предложить свои изменения, и если они будут приняты сообществом, то войдут в следующую версию языка.

Философия Ruby

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

Поэтому эту платформу очень часто выбирает как входную для обучения программированию. Главным принципом, на котором базируется этот язык, является так называемый принцип “наименьшей неожиданности” - это означает, что программа должна вести себя так, как того от нее ожидает автор (программист). Другой важной частью идеологии языка, которую привнес создатель, является большая его вариативность. Одного и того же результата можно добиться различными путями и функциями. Благодаря этому каждый программист может решать задачу так, как считает наиболее корректно и удобно. Это во многом повлияло на популярность языка среди профессионалов в сфере информационных технологий.

Основные характеристики языка

Что такое "Руби" как язык программирования? Это прежде всего объектно-ориентированный язык. В нем нет примитивных типов - все структуры и единицы данных являются объектами (в отличие от того же языка Java, его есть примитивные структуры данных). Каждая функция в "Руби" является методом. Многие свойства и возможности привнесены создателями из других языков программирования, поэтому можно смело сказать, что Ruby (язык) вобрал в себя лучшее от множества других языков и технологий.

Так, к примеру, в экосистеме "Руби" есть свой собственный сборщик мусора, идея которого была перенята из Smalltalk и Java, и который может работать со всеми объектами в системе. Этот механизм позволяет незаметно для пользователя приложения и разработчика выполнять очистку памяти от объектов, которые уже не будут востребованы. Сборщик мусора позволяет разработчику в большинстве случаем не отвлекаться на управление памятью приложения, а сосредоточиться на функциональности и удобстве пользования.

Парадигмы языка

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

Причины популярности

Во многом этот язык стал популярен благодаря простоте разработке различных дополнений к нему. Поэтому количество фреймворков и библиотек постоянно растет, и задачи, которые они решают самостоятельно, позволяют разработчикам в кратчайшие сроки довести продукт до состояния готовности. Очень часто "Руби"-программирование ассоциируется с разработкой веб-приложений и поддержкой функционирования различных сайтов и интернет-платформ. Эту нишу язык занял благодаря своей простоте и скорости разработки. Ведь альтернативные платформы (например, Java), требуют гораздо большего багажа знаний и опыта для решения тех же задач.

Популярные фреймворки

Если говорить о популярных фреймворках, которые существуют на рынке сегодня, то среди них стоит выделить Rails. Много людей, отвечая на вопрос о том, что такое "Руби", интуитивно подразумевают RubyOnRails. Этот набор программных компонентов стал промышленным стандартом среди разработчиков. Он постоянно поддерживается, развивается и дополняется сообществом программистов, оставаясь при этом бесплатным. Этот фреймворк описывает компоненты веб-приложения в рамках шаблона MVC (Model-View-Controller), а также предоставляет готовую интеграцию с и интерфейс для доступа к базе данных. Эти 3 компонента, по сути, позволяют в считанные часы написать и запустить в интернет простой блог или частную веб-страничку.

На языке программирования Ruby можно создавать даже нативные мобильные приложения, благодаря библиотеке RubyMotion. Она позволяет исполнять код Ruby на платформах iOS, OS X и Android. Она создана частной группой разработчиков, поэтому за ее использование необходимо платить, но она лишний раз подтверждает богатые возможности языка.

Важность написания тестов

Другой важной составляющей экосистемы языка Ruby, и его веб-ориентированной части, являются фреймоврки и библиотеки для написания тестов. RubyOnRails проповедует философию BDD (behavior-driven development), что означается, что сначала программист создает последовательность тестов, описывающих ожидаемое поведение программы, а потом уже создает код, который должен успешно пройти эти тесты. Негласным стандартом в этой сфере является RSpec - это фреймворк позволяет писать тест-кейсы на понятном даже неопытным в разработке пользователям.

Ruby Gems

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

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



Понравилась статья? Поделиться с друзьями: