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