Урок 3: «Кодим на Ruby»

Этот урок можно назвать заключительным  в ознакомлении с базисом Ruby. На следующий уроках мы уже будем с вами  писать свои скрипты. Тем не менее, советую все же прочитать и этот урок. Итак, мы уже с вами знаем, что Ruby объектно-ориентированный язык, по своей свободе более схожий с Perl, нежели с Python, от которого создатель языка и отталкивался.  В прошлом уроке я привел правила именования переменных, без которых вы просто не сможете читать чужие исходники и сами напишете абракадабру. Давайте теперь белее углубленно коснемся этот язык. Так как он интерпретируемый, то, естественно, обладает мягкой типизацией. Об этом я говорил и раньше, поэтому затрагивать данный вопрос не буду. Тем не менее, несмотря на то, что переменные в Ruby не имеют тип, объекты, на которые они ссылаются этот тип имеют.  Если вам не совсем понятно, что такое тип данных и для чего он нужен, прочтите мой урок 2 по C++. Мы уже разобрались с тем, что в Ruby все же имеются типы данных. Самые простейшие из них – это число, символ и строка. Применение этих типов схоже с применением в других языках, если вы уже имеете опыт программирования. Еслиу вас такого опыта нет, то чтобы сто раз не писать одно и тоже, отправлю вас к прочтение вышеупомянутого урока 2 по C++. Давайте будет считать, что вы прекрасно понимаете, что такое числовая переменная и строковая. С числовыми переменными вообще все очень просто. Давайте рассмотрим простой пример умножения двух чисел: [ruby] a=34 b=12 puts a*b #  выдаст на экран 408 [/ruby] Как видите, все очень просто. Я вывел значение произведения в функции puts. Так же я мог объявить третью переменную c и присвоить ей значение произведения. Более подробно работу с числовыми типами, равно как и со строками, мы будем рассматривать в других уроках. Просто пока вы еще теоретически не готовы к сложным приемам. С числами все очень просто. Но вот со строками новички иногда путаются. В принципе, ничего сложно в использовании строк нет, однако здесь есть маленький нюанс, доставшийся Ruby от Perl – есть интерпретируемые строки и экранированные. Что такое интерпретируемая строка? Это строка, в которую вы можете включить переменную и Ruby выдаст значение такой переменной в этой строке. Заключается подобная строка в двойные кавычки. Давайте рассмотрим это на примере: [ruby] value=234 string=” Вы ввели значение #{value}” puts string [/ruby] Запустите этот код и посмотрите, что он выдаст. Обратите внимание, что переменная value должна быть заключена в фигурные скобки и предварена символом #, иначе интерполяция переменной не произойдет, как в том же Perl. Если вы не поставите # перед переменной, то все будет простым текстом. Ruby в этом плане несколько интеллектуальнее  своих предшественников.  Тем не менее, часто нужно ввести строку такой, как она есть. То есть, в нашем примере мы вывели значение value на  консоль. А вдруг вам нужно вывести строку так, как она записана: [ruby] puts ‘Для  интерпретации переменной  в строке используется синтаксис #{value}’ [/ruby] Запустите этот скрипт у себя и посмотрите разницу. Если вы читали внимательно код, то наверняка обратили внимание на то, что строка заключена в одинарные кавычки (апострофы). Это делается для того, чтобы строка понималась Ruby буквально. Такие строки и являются экранированными. Это особенно актуально при использовании регулярных выражений, о которых мы также поговорим в отдельном уроке. Пока вы должны понимать  эту разницу. Что касается символов, то они в заключаются в одинарные кавычки. Я уже наверняка надоел вам тем, что постоянно привожу аналогии с Perl. Тем не менее, Ruby очень похож на него и мне легко было перейти с Perl на него, чем на тот же Python. Как и в Perl, здесь есть такие объекты как массивы и хэши, которые также называют ассоциативные массивы. Более подробно о массивах вы можете прочитать в «уроке 5: Массивы» из рубрики по C++. Пусть вас не смущает тот факт, что я ссылаюсь на свои уроки по C++ — многие моменты даже в самых различных языках схожи. В том уроке вам просто важно понять, что такое массив. Здесь же я скажу, что массив – это не более, чем набор однотипных данных. Вместо того, чтобы захламлять исходник  множеством переменных, логичнее их объединить в массив. Тем не менее, массивы являются темой отдельного урока, так как многие приемы работы с ними характерные именно для Ruby. Однако в качестве такого вводного пояснения скажу, что массивы в Ruby заключаются в квадратные скобки и начинают свой отчет с 0. Давайте приведу пример с днем недели: [ruby] Day=[“Пн”,” Вт”,” Ср”,” Чт”,” Пт”, “Сб”,” Вс”] print  Day[1] [/ruby] Здесь я использовал еще одну функцию для вывода на консоль –print.  Зацикливаться на ней я пока не буду, скажу лишь, что главное отличие print  от puts заключается в том, что последняя переводит каретку на новую строку. Более подробно мы об этом поговорим, изучая подпрограммы. Как видите, я объявил массив строк, где каждое значение отделено друг от друга запятой. Я мог бы объявить массив чисел или объектов –неважно. Главное, чтобы вы не пугались такой конструкции, если вдруг в других уроках я начну использовать массивы. В любом случае, массивы в Ruby тема достаточно обширная и поэтому ради нее стоит посвятить целый урок. Хэши или ассоцативные массивы ставят новичков в тупик. Тем не менее, это достаточно удобный инструмент, который я часто вижу в других языках. Однако в силу сложности понимания данного понятия, оставлю хэши на очередной урок. Тем не менее, для тех, кто хочет самостоятельно изучить этот язык, скажу, что хэш – это набор ключ-значение. По сути, это массив, каждому элементу которого соответствует некий  индентификатор или значение. Пока на этом по типам данным в Ruby мы закончим. Теперь давайте рассмотрим основные операторы и их приоритет.

Основные операторы в Ruby

Любой язык программирования не обходится без операторов. Иногда они похожи между собой (логично, что плюс, минус и тому подобное должны быть в любом языке), но чаще имеют свою специфику. Я приведу таблицу, в которой опишу основные операторы и их приоритет в порядке возрастания:
and or  Логическое и, или (имеет самый низкий приоритет)
not Логическое отрицание
?: Тернарный оператор
= (также +=, -= и т.д) Присваивание
..  … Операторы диапазона
|| Логическое или
&& Логическое И
==, ===,<=>,!=,=~,!~ Равенство, неравенство
>, >=, <, <=  Операторы сравнения болье или равно, меньше или равно
| , ^ Битовое ИЛИ, Битовое исключающее ИЛИ
& Битовое И
<<, >> Сдвиги
+, — Сложение, вычитание
*,/,% Умножение, деление, остаток от деления
** Возведение в степень
[] Взятие индекса
:: Квантификатор, разрешающий область видимости
Многие операторы имеют двоякий смысл. Например, можно побитово сдвинуть число оператором <<, но этот же оператор используется для добавления в конец массива, строки и т.п. Кроме того, вы могли заметить, что у некоторых операторов есть мнемонические аналоги, которые имеют более низкий приоритет. Несмотря на то, что в Ruby они есть, их все же не рекомендую использовать в силу того, что скрипт существенно замедляется. Теперь вы знаете много о типах данных и имеете представление об основных операторах. Пока отдохните десять минут, чтобы реализовать все эти знания в большом практикуме по Ruby. <<Предыдущий урок                                             Следующий урок >>

Яндекс.Метрика