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

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. Разумеется, при этом с переменной не ассоциируется никакой тип и даже не происходит истинной инициализации, но анализатор знает, что данное имя принадлежит переменной, а не методу.

• ARGV[0] — первый аргумент в командной строке; они нумеруются начиная с нуля. Это не имя файла или сценария, предшествующего параметрам, как argv[0] в языке С.

• Большинство операторов в Ruby на самом деле является методами; их запись в виде «знаков препинания» — не более чем удобство. Первое исключение из этого правила — набор операторов составного присваивания (+=, -= и т.д.). Второе исключение - операторы =, .., ..., !, not, &&, and, ||, or, !=, !~.

• Как и в большинстве современных языков программирования (хотя и не во всех), булевские операции закорачиваются, то есть вычисление булевского выражения заканчивается, как только его значение истинности становится известным. В последовательности операций or вычисление заканчивается, когда получено первое значение true, а в последовательности операций and — когда получено первое значение false.

• Префикс @@ применяется для переменных класса (то есть ассоциированных с классом в целом, а не с отдельным экземпляром).

• loop — не ключевое слово. Это метод модуля Kernel, а не управляющая конструкция.

• Кому-то синтаксис unless-else может показаться интуитивно неочевидным. Поскольку unless — противоположность if, то ветвь else выполняется, когда условие истинно.

• Простой тип Fixnum передается как непосредственное значение и, стало быть, не может быть изменен внутри метода. То же относится к значениям true, false и nil.

• Не путайте операторы && и || с операторами & и |. Те и другие используются в языке С; первые два предназначены для логических операций, последние два — для поразрядных.

• Операторы and и or имеют более низкий приоритет, чем && и ||. Взгляните на следующий фрагмент:

а = true

b = false

с = true

d = true

a1 = a && b or с && d   # Операции && выполняются первыми.

a2 = a && (b or с) && d # Операция or выполняется первой.

puts a1                 # Печатается false

puts a2                 # Печатается true

• He забывайте, что «оператор» присваивания имеет более высокий приоритет, чем операторы and и or! (это относится и к составным операторам присваивания: +=, -= и пр.). Например, код x = y or z выглядит как обычное предложение присваивания, но на самом деле это обособленное выражение (эквивалент (x=у) or z). Вероятно, программист имел в виду следующее: x = (y or z).

y = false

z = true

x = y or z   # Оператор = выполняется РАНЬШЕ or!

puts x       # Печатается false

(x = y) or z # Строка 5: то же, что и выше.

puts x       # Печатается false

x = (y or z) # Оператор or вычисляется сначала.

puts x       # Печатается true

• Не путайте атрибуты объектов с локальными переменными. Если вы привыкли к C++ или Java, можете забыть об этом! Переменная @my_var в контексте класса — это переменная экземпляра (или атрибут), но my_var в том же контексте — локальная переменная.

• Во многих языках, и в Ruby в том числе, есть цикл for. Рано или поздно возникает вопрос, можно ли модифицировать индексную переменную. В некоторых языках эту управляющую переменную запрещено изменять вовсе (выводится предупреждение либо сообщение об ошибке на этапе компиляции или выполнения); в других это допустимо, хотя и приводит к изменению поведения цикла. В Ruby принят третий подход. Переменная, управляющая циклом for, считается обычной переменной, которую можно изменять в любой момент, но это изменение не оказывает влияния на поведение цикла! Цикл for присваивает этой переменной последовательные значения, что бы с ней ни происходило внутри тела цикла. Например, следующий цикл будет выполнен ровно 10 раз и напечатает значения от 1 до 10:

for var in 1..10

 puts "var = #{var}"

 if var > 5

  var = var + 2

 end

end

• Имена переменных не всегда легко «на глаз» отличить от имен методов. Как решает этот вопрос анализатор? Правило такое: если анализатор видит, что идентификатору присваивается значение до его использования, то он считается переменной; в противном случае это имя метода. (Отметим, что операция присваивания может и не выполняться: достаточно того, что интерпретатор ее видел.)

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Приложение 1. Проблемы и перспективы СПО в России

Из книги Перспективы свободного программного обеспечения в сфере государственного управления и бюджетном секторе автора Отставнов Максим

Приложение 1. Проблемы и перспективы СПО в России В этом разделе перечисляются проблемы развития СПО в России, выявленные в ходе подготовки, проведения и анализа результатов Рабочей встречи «Свободное программное обеспечение: бизнес-модели и корпоративные инициативы»,


Компьютеризованные истории болезни: перспективы

Из книги Все под контролем: Кто и как следит за тобой автора Гарфинкель Симеон

Компьютеризованные истории болезни: перспективы Здравоохранение внедряет компьютеры уже более 20 лет, но это медленный и болезненный процесс. Сегодня мы прошли лишь половину пути. Медицина достигла больших успехов в компьютеризации кодов оплаты счетов, результатов


20 Будущее: опасности и перспективы

Из книги Искусство программирования для Unix автора Реймонд Эрик Стивен

20 Будущее: опасности и перспективы Наилучший путь предсказать будущее — создать его. Фраза на собрании в XEROX PARC в 1971 году —Алан Кей (Alan Key) История не окончена. Unix продолжает расти и развиваться. Сообщество и традиции вокруг операционной системы Unix продолжают развиваться.


1.8. Перспективы и перемена точек наблюдений

Из книги Фреймы для представления знаний автора Мински Марвин

1.8. Перспективы и перемена точек наблюдений «Умственные способности, необходимые для координации перспективных изображений, оказываются полностью сформированными у ребенка обычно к 8-9 годам и проявляются в следующих довольно независимых друг от друга формах.


20 Будущее: опасности и перспективы

Из книги Искусство программирования для Unix автора Реймонд Эрик Стивен

20 Будущее: опасности и перспективы Наилучший путь предсказать будущее — создать его. Фраза на собрании в XEROX PARC в 1971 году —Алан Кей (Alan Key) История не окончена. Unix продолжает расти и развиваться. Сообщество и традиции вокруг операционной системы Unix продолжают развиваться.


Перспективы и проблемы

Из книги Системное программирование в среде Windows автора Харт Джонсон М

Перспективы и проблемы Согласно принятой в этой и последующих главах точке зрения использование потоков не только позволяет упростить проектирование и реализацию некоторых программ, но и (при условии соблюдения нескольких элементарных правил и следования


Часть III Взгляды, возможности, перспективы

Из книги Визуальное моделирование электронных схем в PSPICE автора Хайнеманн Роберт

Часть III Взгляды, возможности, перспективы Перед учеником мясника открывались все новые и новые чудеса, о которых он никогда и не подозревал Гюнтер Рюкер Европеизированная демонстрационная версия программы PSPICEПри изучении двух предыдущих частей этой книги вы могли и


Голубятня: Рубежи и перспективы PPS Сергей Голубицкий

Из книги Цифровой журнал «Компьютерра» № 124 [04.06.2012 — 10.06.2012] автора Журнал «Компьютерра»

Голубятня: Рубежи и перспективы PPS Сергей Голубицкий Опубликовано 04 июня 2012 года Голубятня у нас сегодня будет чисто деловая. Без культур-повидла, разумеется, не обойдется, но мазать предлагаю на сугубо софтверную горбушку.Информацию к


Голубятня: Рубежи и перспективы PPS

Из книги Компьютерра PDA N176 (02.06.2012-08.06.2012) автора Журнал «Компьютерра»

Голубятня: Рубежи и перспективы PPS Автор: Сергей ГолубицкийОпубликовано 04 июня 2012 годаГолубятня у нас сегодня будет чисто деловая. Без культур-повидла, разумеется, не обойдется, но мазать предлагаю на сугубо софтверную горбушку.Информацию к размышлениям я получил из


2.2.7. Перспективы

Из книги Восстановление данных на 100% автора Ташков Петр Андреевич

2.2.7. Перспективы Рассмотрим ближайшие перспективы развития индустрии контекстной рекламы в России.Рекламодатели получат в свое распоряжение больше надстроек и утилит, помогающих в ведении рекламных кампаний. Важнейшими из них станут программы, призванные определить


Новые решения и перспективы

Из книги Цифровой журнал «Компьютерра» № 195 автора Журнал «Компьютерра»

Новые решения и перспективы Чем крупнее предприятие, тем ценнее становится его информационное наполнение, хотя бы из-за роста потенциальных убытков от потерь данных. Соответственно, такое предприятие может позволить себе более серьезные и ресурсоемкие технологии


Меморандум Дилмы — анализ и перспективы Сергей Голубицкий

Из книги Цифровая фотография. Трюки и эффекты автора Гурский Юрий Анатольевич

Меморандум Дилмы — анализ и перспективы Сергей Голубицкий Опубликовано 17 октября 2013 Эдварду Сноудену нужно поставить при жизни памятник. На полном серьёзе. Вклад этого человека в дело просветления мозгов современников трудно переоценить: это


17.10. Коррекция перспективы

Из книги автора

17.10. Коррекция перспективы Любой фотоснимок является результатом творчества фотографа. Чтобы передать чувства и мысли, часто используется неожиданный ракурс. Если снимать небоскребы у их подножия, направляя камеру вверх, то строения на фотографии получатся настоящими