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` - тогда значение будет собрано сборщиком мусора,
  но переменная все равно останется в текущей области видимости.
