19 февраля 2012 г.

От PHP к Ruby (Сходства и различия)

перевод с официального сайта http://www.ruby-lang.org

PHP широко используется для разработки web-приложений, однако если вы собираетесь попробовать Ruby on Rails или хотите писать на языке предназначенном для общего использования, то Ruby это то что вам нужно.

Сходства
  • Ruby как и PHP имеется механизм динамической типизации данных. Вы можете определять перменные непосредственно во время выполнения сценария.
  • Имеются классы, и вы можете контролировать доступ к ним, идентично PHP 5 присутсвуют public, private и protected уровни доступа.
  • Некоторые переменные также начинаются с $, как в PHP (но не все)
  • В Ruby присутсвует eval функция.
  • Вы также может использовать строчную интерполяцию. ”$foo is a $bar” вы можете написать как ”#{foo} is a #{bar}” — как и в PHP, это не распространяется на одиночные кавычки.
  • Идентичный heredoc механизм и синтаксис.
  • В Ruby есть исключения (exceptions -> raise или fail), как в PHP 5
  • Также имеется огромная библиотека стандартных механизмов.
  • Массивы (array) и хэш-массивы (hashes) устроены подобным образом, если вы замените конструкцию array() на { и }, то PHP array('a' => 'b') превратится Ruby {'a' => 'b'}.
  • true и false устроены аналогично PHP, но null обозначается nil

Различия
  • В Ruby строгая типизация данных. Вы должны использовать методы .to_s, .to_i и т. д. для конвертации строк, чисел и т.д. вместо того чтобы оставлять эту работу языку.
  • Строки, числа, массивы, хэш-массивы и все остальные сущности в Ruby являются объектами.
  • Скобки не являются обязательными при вызове метода, кроме тех случчаев когда нееобходимо передать параметры в тело метода
  • Вместо соблюдения оговоренного пространства имён например таких как подчеркивания (Underscores) или camelCase, стандартные библиотеки и расширения оформлены в классы и модули.
  • Reflection изначально имеется в объектах, вам не нужно подключать Reflection классы как в PHP 5
  • Переменные Ruby передаются по ссылкам. Присваивая переменной объект вы ссылаетесь на него, а не получаете копию.
  • В Ruby нет абстрактных классов (abstract classes) или интерфейсов (interfaces)
  • Хэш-массивы (hashes) и массивы (arrays) не являются взаимозаменяемыми
  • Только false и nil являются false, а вот 0, array() и пустая строка "" в теле условия определяются как true.
  • Практически все действия являются вызовом того или иного метода, даже raise (throw в PHP).

Комментариев нет:

Отправить комментарий