В Ruby из Python

Python - еще один прекрасный язык общего назначения. Переходя в Ruby из Python, вам понадобится запомнить чуть больше синтаксических особенностей.

Сходства

Как и в Python…

  • тут есть интерактивная оболочка (вызываемая irb).
  • документацию можно увидеть из консоли (с помощью команды ri вместо pydoc).
  • нет символа, означающего конец строки (кроме самого перевода строки).
  • строки могут быть расположены на нескольких строках кода (как забранные в тройные кавычки).
  • квадратные скобки обозначают список, фигурные - словарь (в Ruby принято называть “хеш” - “hash”).
  • массивы ведут себя точно так же (сложение дает один большой массив, сочетание, например, a3 = [ a1, a2 ] дает массив массивов).
  • тут тоже строгая динамическая типизация.
  • все - объект, а переменные - ссылки на объекты.
  • ключевые слова немного отличаются, работа с исключениями почти такая же
  • имеется встроенная утилита для документации (rdoc)

Отличия

В отличии от Python в Ruby…

  • строки мутабельны
  • имеются константы (переменные, значение которых не должно меняться)
  • есть несколько требований к регистру букв (имена классов начинаются с заглавной буквы, переменные - со строчной)
  • есть только один тип для списка (Array), он мутабелен.
  • двойные кавычки используются для интерполирования строк, чтобы включать в строку Ruby выражение вместо "сложения " + "строк"), одинарный кавычки похожи на строки r"raw string".
  • нет “новых” и “старых” классов, просто класс (как в Python 3, где это исправлено, но который не полностью совместим с Python 2.*).
  • отсутствует прямой доступ к атрибутам - в Ruby это всегда будет вызовом метода.
  • необязательно писать скобки при вызове методов
  • есть разграничение видимости методов на public, private и protected вместо _этих_ __подчеркиваний__.
  • для множественного наследования используются примеси (“mixin”)
  • можно расширять и изменять базовые классы - оба языка позволяют это для обычных классов в любое время, но Python ограничивает это в случае с базовыми классами.
  • вместо True используется true, вместо False - false, вместо None - nil
  • в тестах на истинность ложью являются только false и nil, все остальное - истина (включая 0, 0.0, "", и []).
  • вместо elif пишется elsif.
  • вместо import используется require, но само использование такое же
  • комментарии располагаются над строчкой (а не под строчкой как doc-string), они же используются для автоматически генерируемой документации.
  • есть несколько сокращений, которые стоит запомнить, но именно это и превращает написание кода на Ruby в увлекательное занятие и способствует продуктивности.
  • нет способа разыменовать переменную, созданную однажды (как del в Python), но можно присвоить ей значение nil - тогда значение будет собрано сборщиком мусора, но переменная все равно останется в текущей области видимости.