Язык Ruby
История
Создатель Ruby - Юкихиро Мацумото (Matz) - интересовался языками программирования, ещё будучи студентом, но идея о разработке нового языка появилась позже. Ruby начал разрабатываться 23 февраля 1993 года и вышел в свет в 1995 году.
Название навеяно языком Perl, многие особенности синтаксиса и семантики из которого заимствованы в Ruby: англ. pearl - "жемчужина", ruby - "рубин".
Одним из источников вдохновения для Мацумото для разработки Ruby был научно-фантастический роман "Вавилон-17", основанный на гипотезе Сепира - Уорфа.
Целью разработки было создание "настоящего объектноориентированного", лёгкого в разработке, интерпретируемого языка программирования.
Сейчас Ruby входит в большинство дистрибутивов ОС Linux, поставляется вместе с Mac OS X, доступен пользователям других операционных систем. Одним из основных приложений, связанных с Ruby, продолжает оставаться Ruby on Rails, который продолжает активно развиваться, но использование Ruby значительно шире - на нём разрабатывается большое количество приложений различного назначения, кроме того, он используется в качестве скриптового языка для автоматизации и настройки приложений и написания административных утилит, в частности, в ОС Linux.
Области применения
Ruby - современный, постоянно развивающийся язык программирования, областей применения ему - масса. Наверняка вы слышали про Chef, Vagrant, Homebrew, но чаще всего все мы слышим о Rails.
Это невероятно выразительный и гибкий язык, который позволяет одну и ту же задачу решить многими способами.
Ruby - интерпретируемый, полностью объектно- ориентированный язык программирования с четкой динамической типизацией. Он сочетает в себе Perl-подобный синтаксис с объектно-ориентированным подходом. Также некоторые черты заимствованы из языков программирования Python, Lisp, Dylan и CLU. Кроссплатформенная реализация интерпретатора языка Ruby распространяется на условиях открытого программного обеспечения. Код, написанный на Ruby, может быть понятен даже человеку, который не разбирается в программировании. На RoR были созданы такие проекты, как Redmine, Twitter, Shopify, Basecamp, GitHub, Kickstarter, Airbnb и другие.
Преимущества Ruby
Многочисленное и доброжелательное комьюнити.
Довольно высокий порог входа, что означает, что Ruby-разработчик с большой вероятностью имеет опыт работы как минимум с еще одним языком программирования.
Вы используете только те библиотеки и модули, которые необходимы. Существует большое количество полезных библиотек, которые уже готовы к использованию (Ruby Gems).
В интернете есть много информации по Ruby, в структурированном и отсеянном виде.
В контексте обсуждения Ruby нельзя не упомянуть популярнейший фреймворк Ruby on Rails.
Основы синтаксиса
Абсолютно всё (кроме управляющих конструкций) в Руби является объектом, строки, числа, массивы, классы - всё это экземпляры классов Ruby. Например строка экземпляр класса String, а массив экземпляр класса Array.
Интерпретатор Ruby читает вашу писанину как последовательности лексем. Лексемы состоят из ключевых слов, знаком пунктуации, комментариев, литералов и идентификаторов. Идентификатором в руби называют обычное имя, которое присваивается переменным, методам, классам, атрибутам классов и тд. Идентификатор не может начинаться с цифры, и состоит из букв, цифр и символа подчеркивания.
Комментарии
В процессе написания программы, по разным причинам, часто приходится оставлять комментарии к коду. Комментарии могут быть необходимы как для человека так и для среды разработки и даже для самого руби. Комментарии могут быть однострочные и многострочные. Однострочные комментарии начинаются со знака # и продолжаются до конца строки. Когда интерпретатор встречает символ #, он смотрит, не является ли решетка частью строки или регулярного выражения, если не являеться - то считает все символы после решетки комментарием ( кроме символа перехода на новую строку - \n).
Литералы
Литерал - это запись в исходном коде Ruby представляющая собой фиксированное значение (константа). Это могут быть числа , строки и регулярные выражения
Константы, переменные и типы
Переменные имеют несколько разновидностей: локальные переменные, переменные класса, переменные экземпляра класса, глобальные переменные, псевдопеременные и константы.
Константами называют идентификаторы, которые имеют фиксированное значение, другими словами это та же переменная, значение которой не изменяется. При попытке изменить значение константы, интерпретатор выдаст предупреждение (но не ошибку, что на мой взгляд "странно"). По соглашению, константы следует писать с заглавной буквы, или же полностью верхним регистром (второй вариант преподчтительнее). Т.к. имена классов и модулей мы пишем с большой буквы - значит эти имена ничто иное как константы.
Что такое вообще переменная? Переменная - это область памяти, адрес которой можно использовать для осуществления доступа к данным. Данные, находящиеся в переменной (то есть по данному адресу памяти), называются значением этой переменной. То есть выражение a = 123 говорит о том, что объявляется переменная a (если она небыла объявлена ранее) и ей присваивается значение 123 . Это значение записывается в оперативную память компьютера, и чтобы извлечь эту информацию в будущем, нам нужно вызвать переменную a которая и является адресом ячейки памяти, где хранится нужное нам значение.
Локальные переменные. Видимость локальных переменных не выходит за пределы области где они объявлены. Обозначаются они с маленькой буквы, первым символом не должна быть цифра, может состоять из букв, цифр и знака подчеркивания (_).
Переменные экземпляра класса. Используются внутри класса, и областью видимости этих переменных является объект (экземпляр класса). Синтаксис написания: первый символ - собака (@), вторым символом не должна быть цифра, может состоять из букв, цифр и знака подчеркивания (_).
Переменные класса. Синтаксис написания: первые два символа - собаки (@@), третьим символом не должна быть цифра, может состоять из букв, цифр и знака подчеркивания (_). Между переменными класса и переменными экземпляра класса разница очень существенная, и заключается она только в области видимости. Область видимости переменной класса - сам класса и ВСЕ, повторюсь ВСЕ экземпляры класса.
Глобальные переменные
Имена глобальных переменны начинаются со знака $. Область видимости глобальных переменных - вся программа. Используя метод global_variables вы можете посмотреть системные глобальные переменные.
Псевдопеременные
Псевдопеременные выглядят также как и локальные переменные. Что это такое понятно из самого названия - это переменные которые не переменные, как "курица что не курица" в Пятом правиле волшебника Терри Гудкайнда. Создавать псевдопеременные самому нельзя. Список псевдопеременных Ruby: self , nil , true , false , __FILE__ и __LINE__.
Строки
Строка яляется объектом класса String, а раз так, то она имеет в своем арсенале все доступные экземпляру класса методы по работе со строками.
Строки это ни что иное как набор любых символов заключенный в одинарные или двойные кавычки. Так это у большинства ЯП (языков программирования), но руби такой руби, что и тут сумел выделить себя среди других ЯП. Помимо стандартного синтаксиса литерала строк, у руби есть специальные идентификаторы, среди которых есть и идентификатор строк %q. Он позволяет указывать любую пару символов, внутри которой будет находится строка.
Массивы и хеши
Массивы это своего рода упорядоченный набор данных, который может хранить разные типы данных (разные экземпляры классов чтоб быть точнее) внутри себя, и т.к. массив это экземпляр класса Array, то мы имеем в распоряжении все публичные методы класса Array для работы с ним. Всё это мы рассмотрим в отдельной главе, которая будет посвящена только массивам и хешам, а сейчас мы просто вскользь глянем что это такое и зачем оно нужно.
У каждого значения массива есть свой ключ или как многие называют индекс, по которому происходит доступ к значению индекса, или как правильнее будет сказать - соответствующему элементу массива., т.е. элемент массива связан со своим индексом, а индекс соответственно с элементом. Индексы имеют последовательность от нуля до предела ОЗУ компьютера
Хеши. Под хешами подразумевается ассоциативный массив. Крайне удобная вещь, и очень часто используется на практике. Хеши являются экземплярами класса Hash, и методы для работы с хешами в большинстве своем те же самые что и с массивом.
Разница между массивом и хешем (ассоциативным массивом) заключается в том, что хеши требуют явного определения индекса значения. Индекс может быть строкой, числом или символом.