Чтение онлайн

на главную - закладки

Жанры

Программирование на языке Ruby
Шрифт:

• Ключевые слова в Ruby нельзя назвать по-настоящему зарезервированными. Если метод вызывается от имени некоторого объекта (и в других случаях, когда не возникает неоднозначности), имя метода может совпадать с ключевым словом. Но поступайте так с осторожностью, не забывая, что программу будут читать люди.

• Ключевое слово

then
(в предложениях
if
и
case
) необязательно. Если вам кажется, что с ним программа понятнее, включайте его в код. То же относится к слову
do
в циклах
while
и
until
.

• Вопросительный и восклицательный знаки не являются частью идентификатора, который модифицируют, — их следует рассматривать как суффиксы. Таким образом, хотя идентификаторы

chop
и
chop!
считаются различными, использовать восклицательный знак в любом другом месте имени не разрешается. Аналогично в Ruby есть конструкция
defined?
, но
defined
— ключевое слово.

• Внутри строки символ решетки

#
 — признак начала выражения. Значит, в некоторых случаях его следует экранировать обратной косой чертой, но лишь тогда, когда сразу за ним идет символ
{
,
$
или
@
.

• Поскольку вопросительный знак можно добавлять в конец идентификатора, то следует аккуратно расставлять пробелы в тернарном операторе. Пусть, например, имеется переменная

my_flag
, которая может принимать значения
true
или
false
. Тогда первое из следующих предложений правильно, а второе содержит синтаксическую ошибку:

x = my_flag ? 23 : 45 # Правильно.

x = my_flag? 23 : 45 # Синтаксическая ошибка.

• Концевой маркер для встроенной документации не следует считать лексемой. Он помечает строку целиком, поэтому все находящиеся в той же строке символы не являются частью текста программы, а принадлежат встроенному документу.

• В Ruby нет произвольных блоков, то есть нельзя начать блок в любом месте, как в С. Блоки разрешены только там, где они нужны, — например, могут присоединяться к итератору. Исключение составляет блок

begin-end
, который можно употреблять практически везде.

• Не забывайте, что ключевые слова

BEGIN
и
END
не имеют ничего общего с
begin
и
end
.

• При статической конкатенации строк приоритет конкатенации ниже, чем у вызова метода. Например:

str = "Первая " 'second'.center(20) # Примеры 1 and 2

str = "Вторая " + 'second'.center(20) # дают одно и то же.

str = "Первая вторая".center(20) # Примеры 3 and 4

str = ("Первая " + 'вторая').center(20) # дают одно и то же.

• В Ruby есть несколько псевдопеременных, которые выглядят как локальные переменные, но применяются для особых целей. Это

self
,
nil
,
true
,
false
,
__FILE__
и
__LINE__
.

1.5.2. Перспективы программирования

Наверное, каждый, кто знает Ruby (сегодня), в прошлом изучал или пользовался другими языками. Это, с одной стороны, облегчает изучение Ruby, так как многие средства похожи на аналогичные средства в других языках. С другой стороны, у программиста может возникнуть ложное чувство уверенности при взгляде на знакомые конструкции Ruby. Он может прийти к неверным выводам, основанным на прошлом опыте; можно назвать это явление «багажом эксперта».

Немало специалистов переходит на Ruby со Smalltalk, Perl, C/C++ и других языков. Ожидания этих людей сильно различаются, но так или иначе присутствуют. Поэтому рассмотрим некоторые вещи, на которых многие спотыкаются.

• Символ в Ruby представляется целым числом. Это не самостоятельный тип, как в Pascal, и не эквивалент строки длиной 1. В ближайшем будущем положение изменится и символьная константа станет строкой, но на момент написания данной книги этого еще не произошло. Рассмотрим следующий фрагмент:

x = "Hello"

y = ?А

puts "x[0] = #{x[0]}" # Печатается x[0] = 72

puts "y = #{y}" # Печатается y = 65

if y == "А" # Печатается no

 puts "yes"

else

 puts "no"

end

• He существует булевского типа.

TrueClass
и
FalseClass
— это два разных класса, а единственными их экземплярами являются объекты
true
и
false
.

• Многие операторы в Ruby напоминают операторы в языке С. Два заметных исключения — операторы инкремента и декремента (

++
и
– -
). Их в Ruby нет ни в «пост», ни в «пред» форме.

• Известно, что в разных языках оператор деления по модулю работает по-разному для отрицательных чисел. Не вдаваясь в споры о том, что правильно, проиллюстрируем поведение в Ruby:

puts (5 % 3) # Печатается 2

puts (-5 % 3) # Печатается 1

puts (5 % -3) # Печатается -1

puts (-5 % -3) # Печатается -2

• Некоторые привыкли думать, что «ложь» можно представлять нулем, пустой строкой, нулевым символом и т.п. Но в Ruby все это равно «истине». На самом деле истиной будет все кроме объектов

false
и
nil
.

• В Ruby переменные не принадлежат никакому классу: класс есть только у значений.

• Переменные в Ruby не объявляются, однако считается хорошим тоном присваивать переменной начальное значение

nil
. Разумеется, при этом с переменной не ассоциируется никакой тип и даже не происходит истинной инициализации, но анализатор знает, что данное имя принадлежит переменной, а не методу.

Поделиться:
Популярные книги

Первый среди равных. Книга X

Бор Жорж
10. Первый среди Равных
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Первый среди равных. Книга X

Идеальный мир для Лекаря 24

Сапфир Олег
24. Лекарь
Фантастика:
городское фэнтези
попаданцы
5.00
рейтинг книги
Идеальный мир для Лекаря 24

Последний Паладин. Том 4

Саваровский Роман
4. Путь Паладина
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний Паладин. Том 4

Тринадцатый IV

NikL
4. Видящий смерть
Фантастика:
боевая фантастика
попаданцы
5.00
рейтинг книги
Тринадцатый IV

Воронцов. Перезагрузка

Тарасов Ник
1. Воронцов. Перезагрузка
Фантастика:
попаданцы
альтернативная история
фантастика: прочее
5.00
рейтинг книги
Воронцов. Перезагрузка

Я все еще не царь. Книга XXVI

Дрейк Сириус
26. Дорогой барон!
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Я все еще не царь. Книга XXVI

Мусорщик - 2. Проводник Теней

Лазарь
2. Хозяин Теней
Фантастика:
фэнтези
городское фэнтези
попаданцы
5.00
рейтинг книги
Мусорщик - 2. Проводник Теней

Орден Архитекторов 8

Винокуров Юрий
Фантастика:
попаданцы
фэнтези
5.00
рейтинг книги
Орден Архитекторов 8

Инженер Петра Великого

Гросов Виктор
1. Инженер Петра Великого
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Инженер Петра Великого

Кодекс Императора II

Сапфир Олег
2. Кодекс Императора
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Кодекс Императора II

Камень. Книга восьмая

Минин Станислав
8. Камень
Фантастика:
фэнтези
боевая фантастика
7.00
рейтинг книги
Камень. Книга восьмая

Легат

Прокофьев Роман Юрьевич
6. Стеллар
Фантастика:
боевая фантастика
рпг
6.73
рейтинг книги
Легат

Чужак из ниоткуда 2

Евтушенко Алексей Анатольевич
2. Чужак из ниоткуда
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Чужак из ниоткуда 2

Переиграть войну! Пенталогия

Рыбаков Артем Олегович
Переиграть войну!
Фантастика:
героическая фантастика
альтернативная история
8.25
рейтинг книги
Переиграть войну! Пенталогия