Хэл Фултон - Программирование на языке Ruby
- Название:Программирование на языке Ruby
- Автор:
- Жанр:
- Издательство:ДМК Пресс
- Год:2007
- Город:Москва
- ISBN:5-94074-357-9
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Хэл Фултон - Программирование на языке Ruby краткое содержание
Ruby — относительно новый объектно-ориентированный язык, разработанный Юкихиро Мацумото в 1995 году и позаимствовавший некоторые особенности у языков LISP, Smalltalk, Perl, CLU и других. Язык активно развивается и применяется в самых разных областях: от системного администрирования до разработки сложных динамических сайтов.
Книга является полноценным руководством по Ruby — ее можно использовать и как учебник, и как справочник, и как сборник ответов на вопросы типа «как сделать то или иное в Ruby». В ней приведено свыше 400 примеров, разбитых по различным аспектам программирования, и к которым автор дает обстоятельные комментарии.
Издание предназначено для программистов самого широкого круга и самой разной квалификации, желающих научиться качественно и профессионально работать на Ruby.
Программирование на языке Ruby - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
[1, 2, 3]
[1, 2, "застегни мне молнию на сапоге"]
[1, 2, [3,4], 5]
["alpha", "beta", "gamma", "delta"]
Во втором примере показан массив, содержащий целые числа и строки. В третьем примере мы видим вложенный массив, а в четвертом - массив строк. Как и в большинстве других языков, нумерация элементов массива начинается с нуля. Так, в последнем из показанных выше примеров элемент "gamma"
имеет индекс 2. Все массивы динамические, задавать размер при создании не нужно.
Поскольку массивы строк встречаются очень часто (а набирать их неудобно), для них предусмотрен специальный синтаксис:
%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
Логическое отрицание
and or
Логическое И, ИЛИ
Некоторые из перечисленных символов служат сразу нескольким целям. Например, оператор <<
обозначает поразрядный сдвиг влево, но также применяется для добавления в конец (массива, строки и т.д.) и как маркер встроенного документа. Аналогично знак +
означает сложение чисел и конкатенацию строк. Ниже мы увидим, что многие операторы — это просто сокращенная запись вызова методов.
Итак, мы определили большую часть типов данных и многие из возможных над ними операций. Прежде чем двигаться дальше, приведем пример программы.
1.2.5. Пример программы
В любом руководстве первой всегда приводят программу, печатающую строку Hello, world!
, но мы рассмотрим что-нибудь более содержательное. Вот небольшая интерактивная консольная программа, позволяющая переводить температуру из шкалы Фаренгейта в шкалу Цельсия и наоборот.
print "Введите температуру и шкалу (С or F): "
str = gets
exit if str.nil? or str.empty?
str.chomp!
temp, scale = str.split(" ")
abort "#{temp} недопустимое число." if temp !~ /-?\d+/
temp = temp.to_f case scale
when "С", "с"
f = 1.8*temp + 32
when "F", "f"
с = (5.0/9.0)*(temp-32)
else
abort "Необходимо задать С или F."
end
if f.nil?
print "#{c} градусов C\n"
else
print "#{f} градусов F\n"
end
Ниже приведены примеры прогона этой программы. Показано, как она переводит градусы Фаренгейта в градусы Цельсия и наоборот, а также как обрабатывает неправильно заданную шкалу или число:
Введите температуру и шкалу (С or F): 98.6 F
37.0 градусов С
Введите температуру и шкалу (С or F): 100 С
212.0 градусов F
Введите температуру и шкалу (С or F):
92 G Необходимо задать С или F.
Введите температуру и шкалу (С or F): junk F
junk недопустимое число.
Теперь рассмотрим, как эта программа работает. Все начинается с предложения print
, которое есть не что иное, как вызов метода print
из модуля Kernel
. Данный метод выполняет печать на стандартный вывод. Это самый простой способ оставить курсор в конце строки.
Далее мы вызываем метод gets
(прочитать строку из стандартного ввода) и присваиваем полученное значение переменной str
. Для удаления хвостового символа новой строки вызывается метод chomp!
.
Обратите внимание, что print
и gets
, которые выглядят как «свободные» функции, на самом деле являются методами класса Object
(который, вероятно, наследует Kernel
). Точно так же chomp!
— метод, вызываемый от имени объекта str
. При вызовах методов в Ruby обычно можно опускать скобки: print "foo"
и print("foo")
— одно и то же.
В переменной str
хранится символьная строка, но могли бы храниться данные любого другого типа. В Ruby данные имеют тип, а переменные - нет. Переменная начинает существовать, как только интерпретатор распознает присваивание ей; никаких предварительных объявлений не существует.
Метод exit
завершает программу. В той же строке мы видим управляющую конструкцию, которая называется «модификатор if
». Он аналогичен предложению if
, существующему в большинстве языков, только располагается после действия. Для модификатора if
нельзя задать ветвь else
, и он не требует закрытия. Что касается условия, мы проверяем две вещи: имеет ли переменная str
значение (то есть не равна nil
) и не является ли она пустой строкой. Если встретится конец файла, то будет истинно первое условие; если же пользователь нажмет клавишу Enter, не введя никаких данных, — второе.
Интервал:
Закладка: