Хэл Фултон - Программирование на языке Ruby
- Название:Программирование на языке Ruby
- Автор:
- Жанр:
- Издательство:ДМК Пресс
- Год:2007
- Город:Москва
- ISBN:5-94074-357-9
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Хэл Фултон - Программирование на языке Ruby краткое содержание
Ruby — относительно новый объектно-ориентированный язык, разработанный Юкихиро Мацумото в 1995 году и позаимствовавший некоторые особенности у языков LISP, Smalltalk, Perl, CLU и других. Язык активно развивается и применяется в самых разных областях: от системного администрирования до разработки сложных динамических сайтов.
Книга является полноценным руководством по Ruby — ее можно использовать и как учебник, и как справочник, и как сборник ответов на вопросы типа «как сделать то или иное в Ruby». В ней приведено свыше 400 примеров, разбитых по различным аспектам программирования, и к которым автор дает обстоятельные комментарии.
Издание предназначено для программистов самого широкого круга и самой разной квалификации, желающих научиться качественно и профессионально работать на Ruby.
Программирование на языке Ruby - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
Это предложение можно было бы записать и по-другому:
exit if not str or not str[0]
Эти проверки работают потому, что переменная может иметь значение nil
, а nil
в Ruby в логическом контексте вычисляется как «ложно». На самом деле как «ложно» вычисляются nil
и false
, а все остальное — как «истинно». Это означает, кстати, что пустая строка ""
и число 0 — не «ложно».
В следующем предложении над строкой выполняется операция chomp!
(для удаления хвостового символа новой строки). Восклицательный знак в конце предупреждает, что операция изменяет значение самой строки, а не возвращает новую. Восклицательный знак применяется во многих подобных ситуациях как напоминание программисту о том, что у метода есть побочное действие или что он более «опасен», чем аналогичный метод без восклицательного знака. Так, метод chomp
возвращает такой же результат, но не модифицирует значение строки, для которой вызван.
В следующем предложении мы видим пример множественного присваивания. Метод split
разбивает строку на куски по пробелам и возвращает массив. Двум переменным в левой части оператора присваиваются значения первых двух элементов массива в правой части.
В следующем предложении if
с помощью простого регулярного выражения выясняется, введено ли допустимое число. Если строка не соответствует образцу, который состоит из необязательного знака «минус» и одной или более цифр, то число считается недопустимым и программа завершается. Отметим, что предложение if оканчивается ключевым словом end
. Хотя в данном случае это не нужно. Мы могли бы включить перед end
ветвь else
. Ключевое слово then
необязательно; в этой книге мы стараемся не употреблять его.
Метод to_f
преобразует строку в число с плавающей точкой. Это число записывается в ту же переменную temp
, в которой раньше хранилась строка.
Предложение case
выбирает одну из трех ветвей: пользователь указал С
, F
или какое-то другое значение в качестве шкалы. В первых двух случаях выполняется вычисление, в третьем мы печатаем сообщение об ошибке и выходим.
Кстати, предложение case
в Ruby позволяет гораздо больше, чем показано в примере. Нет никаких ограничений на типы данных, а все выражения могут быть произвольно сложными, в том числе диапазонами или регулярными выражениями.
В самом вычислении нет ничего интересного. Но обратите внимание, что переменные с и f
впервые встречаются внутри ветвей case
. В Ruby нет никаких объявлений — переменная начинает существовать только в результате присваивания. А это означает, что после выхода из case
лишь одна из переменных elif
будет иметь действительное значение.
Мы воспользовались этим фактом, чтобы понять, какая ветвь исполнялась, и в зависимости от этого вывести то или другое сообщение. Сравнение f
с nil
позволяет узнать, есть ли у переменной осмысленное значение. Этот прием применен только для демонстрации возможности: ясно, что при желании можно было бы поместить печать прямо внутрь предложения case
.
Внимательный читатель заметит, что мы пользовались только «локальными» переменными. Это может показаться странным, так как, на первый взгляд, их областью видимости является вся программа. На самом деле они локальны относительно верхнего уровня программы. Глобальными они кажутся лишь потому, что в этой простой программе нет контекстов более низкого уровня. Но если бы мы объявили какие-нибудь классы или методы, то в них переменные верхнего уровня были бы не видны.
1.2.6. Циклы и ветвление
Потратим немного времени на изучение управляющих конструкций. Мы уже видели простое предложение if
и модификатор if
. Существуют также парные структуры, в которых используется ключевое слово unless
(в них также может присутствовать необязательная ветвь else
), а равно применяемые в выражениях формы if
и unless
. Все они сведены в таблицу 1.1.
Таблица 1.1. Условные предложения
Формы с if |
Формы с unless |
---|---|
if x < 5 then statement1 end |
unless x >= 5 then statement1 end |
if x < 5 then statement1 else statement2 end |
unless x < 5 then statement2 else statement1 end |
statement1 if y == 3 |
statement1 unless y != 3 |
x = if a>0 then b else c end |
x = unless a<=0 then с else b end |
Здесь формы с ключевыми словами if
и unless
, расположенные в одной строке, выполняют в точности одинаковые функции. Обратите внимание, что слово then
можно опускать во всех случаях, кроме последнего (предназначенного для использования в выражениях). Также заметьте, что в модификаторах (третья строка) ветви else
быть не может.
Предложение case
в Ruby позволяет больше, чем в других языках. В его ветвях можно проверять различные условия, а не только сравнивать на равенство. Так, например, разрешено сопоставление с регулярным выражением. Проверки в предложении case
эквивалентны оператору ветвящегося равенства ( ===
), поведение которого зависит от объекта. Рассмотрим пример:
case "Это строка символов."
when "одно значение"
puts "Ветвь 1"
when "другое значение"
puts "Ветвь 2"
when /симв/
puts "Ветвь 3"
else
puts "Ветвь 4"
end
Этот код напечатает Ветвь 3
. Почему? Сначала проверяемое выражение сравнивается на равенство с двумя строками: "одно значение"
и "другое значение"
. Эта проверка завершается неудачно, поэтому мы переходим к третьей ветви. Там находится образец, с которым сопоставляется выражение. Поскольку оно соответствует образцу, то выполняется предложение print
. В ветви else
обрабатывается случай, когда ни одна из предшествующих проверок не прошла.
Если проверяемое выражение — целое число, то его можно сравнивать с целочисленным диапазоном (например, 3..8
); тогда проверяется, что число попадает в диапазон. В любом случае выполняется код в первой подошедшей ветви.
В Ruby имеется богатый набор циклических конструкций. К примеру, while
и until
— циклы с предварительной проверкой условия, и оба работают привычным образом: в первом случае задается условие продолжения цикла, а во втором — условие завершения. Есть также их формы с модификатором, как для предложений if
и unless
. Кроме того, в модуле Kernel
есть метод loop
(по умолчанию бесконечный цикл), а в некоторых классах реализованы итераторы.
В примерах из таблицы 1.2 предполагается, что где-то определен такой массив list
:
list = %w[alpha bravo charlie delta echo];
В цикле этот массив обходится и печатается каждый его элемент.
Читать дальшеИнтервал:
Закладка: