Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
и установить мир во всем мире.=end1.2.3. Константы, переменные и типы
В Ruby переменные не имеют типа, однако объекты, на которые переменные ссылаются, тип имеют. Простейшие типы — это символ, число и строка.
Числовые константы интуитивно наиболее понятны, равно как и строки. В общем случае строка, заключенная в двойные кавычки, допускает интерполяцию выражений, а заключенная в одиночные кавычки интерпретируется почти буквально — в ней распознается только экранированная обратная косая черта.
Ниже показана «интерполяция» переменных и выражений в строку, заключенную в двойные кавычки:
а = 3b = 79puts "#{а} умноженное на #{b} = #{а*b}" # 3 умноженное на 79 = 237Более подробная информация о литералах (числах, строках, регулярных выражениях и т.п.) приведена в следующих главах.
Стоит упомянуть особую разновидность строк, которая полезна прежде всего в небольших сценариях, применяемых для объединения более крупных программ. Строка, выводимая программой, посылается операционной системе в качестве подлежащей исполнению команды, а затем результат выполненной команды подставляется обратно в строку. В простейшей форме для этого применяются строки, заключенные в обратные кавычки. В более сложном варианте используется синтаксическая конструкция
%x`whoami``ls -l`%x[grep -i meta *.html | wc -l]Регулярные выражения в Ruby похожи на символьные строки, но используются по-другому. Обычно в качестве ограничителя выступает символ косой черты.
Синтаксис регулярных выражений в Ruby и Perl имеет много общего. Подробнее о регулярных выражениях см. главу 3.
Массивы в Ruby — очень мощная конструкция; они могут содержать данные любого типа. Более того, в одном массиве можно хранить данные разных типов. В главе 8 мы увидим, что все массивы — это экземпляры класса
Array[1, 2, 3][1, 2, "застегни мне молнию на сапоге"][1, 2, [3,4], 5]["alpha", "beta", "gamma", "delta"]Во втором примере показан массив, содержащий целые числа и строки. В третьем примере мы видим вложенный массив, а в четвертом - массив строк. Как и в большинстве других языков, нумерация элементов массива начинается с нуля. Так, в последнем из показанных выше примеров элемент
"gamma"Поскольку массивы строк встречаются очень часто (а набирать их неудобно), для них предусмотрен специальный синтаксис:
%w[alpha beta gamma delta]%w(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec)%w/am is are was were be being been/Здесь не нужны ни кавычки, ни запятые; элементы разделяются пробелами. Если встречаются элементы, содержащие внутренние пробелы, такой синтаксис, конечно, неприменим.
Для доступа к конкретному элементу массива по индексу применяются квадратные скобки. Результирующее выражение можно получить или выполнить для него присваивание:
val = myarray[0]print stats[j]x[i] = x[i+1]Еще одна «могучая» конструкция в Ruby — это хэш. Его также называют ассоциативным массивом или словарем. Хэш — это множество пар данных; обыкновенно он применяется в качестве справочной таблицы или как обобщенный массив, в котором индекс не обязан быть целым числом. Все хэши являются экземплярами класса
HashХэш-константа, как правило, заключается в фигурные скобки, а ключи отделяются от значений символом
=>{1=>1, 2=>4, 3=>9, 4=>16, 5 = >25, 6=>36}{"cat"=>"cats", "ox"=>"oxen", "bacterium"=>"bacteria"}{"водород"=>1, "гелий"=>2, "углерод"=>12}{"нечетные"=>[1,3,5,7], "четные"=>[2,4,6,8]}{"foo"=>123, [4,5,6]=>"my array", "867-5309"=>"Jenny"}К содержимому хэша-переменной доступ осуществляется так же, как для массивов, — с помощью квадратных скобок:
print phone_numbers["Jenny"]plurals["octopus"] = "octopi"Однако следует подчеркнуть, что у массивов и хэшей много методов, именно они и делают эти контейнеры полезными. Ниже, в разделе «ООП в Ruby», мы раскроем эту тему более подробно.
1.2.4. Операторы и приоритеты
Познакомившись с основными типами данных, перейдем к операторам в языке Ruby. В приведенном ниже списке они представлены в порядке убывания приоритета:
:: [] ** + - ! ~ * / % + - << >> & || ^ > >= < <= == === <=> != =~ !~&& || .. ... = (also +=, -=, …) ?: not
