Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Ruby: Общие вопросы > Мнения профи перешедших на Ruby c PHP


Автор: Wowa 10.3.2007, 20:27
Интересуют мнения профессионалов  перешедших с PHP на Ruby on Rails. Стоит ли?

Автор: Serkys 11.3.2007, 11:19
http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/to-ruby-from-php/

Автор: ext 12.3.2007, 22:28
А на русском нету?

Автор: Serkys 13.3.2007, 03:06
Перевод на коленке

Сходства
    Присутствует и в РНР, и в Ruby:
  • Ruby поддерживает динамические типы данных, как и РНР. Вам не надо беспокоиться об объявлении переменных
  • Имеются классы, и вы можете контроллировать доступ к ним (public, protected and private)
  • Некоторые переменные начинаются с $, как и в РНР (но не все)
  • Поддерживается eval
  • Вы можете использовать интерполяцию строк. Вместо того, чтобы писать ”$foo is a $bar”, вы можете написать ”#{foo} is a #{bar}” - как в РНР, без использования одинарных кавычек
  • Поддерживается heredoc-синтаксис
  • Ruby поддерживает исключения, как и PHP5
  • Довольно большая стандартная библиотека
  • Массивы и хэши работают одинаково, требуется только заменить array() на {}: array('a' => 'b') превращается в {'a' => 'b'}
  • true и false поддерживаются, как и в РНР, но null именуется nil
Различия
    Отсутствует в РНР, но есть в Ruby:
  • Более строгая типизация. Понадобится вызывать методы to_i, to_s и др. для конвертации строк, чисел и т.д. вместо того, чтобы доверять эти операции языку
  • Строки, числа, массивы, хэши есть объекты. Вместо написания abs(-1) следует писать -1.abs
  • Круглые скобки являются необязательными при вызове методов, за исключением случаев разъяснения какие параметры к какой функции относятся.
  • Вместо соглашения об именовании - стандартные библиотеки и расширения организации модулей и классов
  • Отражения (reflections) присущи объектам, тебе не понадобиться использовать класс Reflection, как в РНР5
  • Переменные являются ссылками
  • Нет абстрактных классов и интерфейсов
  • Хэши и массивы взаимозаменяемы
  • Только false и nil являются ложными: 0, array() и "" условно истинные значения
  • Практически любая функциональность — вызов метода какого либо объекта. Даже возбуждение исключения raise (аналог в PHP — throw).
А вообще на русском по Ruby инфы немного. Хороший повод заняться английским smile

Добавлено @ 03:13 
Собственно по сабжу могу сказать немного. Попробовав Ruby-on-Rails, был удивлён быстротой создания и удобством работы до такой степени, что в прямом смысле забегал по комнате smile . Мне кажется, что через пару лет Ruby-on-Rails будет стоять у почти всех уважающих себя хостеров, и со временем отодвинет даже РНР. Ruby-on-Rails будет развиваться не хуже, чем фреймворки в РНР, появятся аналоги, но должной популярности не наберут.
Лишним изучение Ruby не будет в любом случае.
До сих пор в шоке от удобства обработки массивов. Раньше я даже предположить не мог, что в одной строке может быть столько кода!

Автор: max_lapshin 13.3.2007, 14:40
Хеши и массивы совершенно не взаимозамеяемы. Это совершенно разные структуры данных. Собственно, конструкции, как в PHP нет больше нигде. Да и никому особо больше не нужна.

> Почти всегда при вызове метода вызывается raise (throw в РНР5)

Эт че за [censored 6] фигня?

Что касается Ruby on Rails, то могу сказать, что в этой нише фактически есть два фреймворка: Ruby on Rails и Django. Остальные с отставанием пытаются их копировать.

Автор: Serkys 13.3.2007, 20:22
Цитата(max_lapshin @  13.3.2007,  14:40 Найти цитируемый пост)
Эт че за [censored 6] фигня?

Будь вежлив!
Обрати внимание на фразу:
Цитата(Serkys @  13.3.2007,  03:06 Найти цитируемый пост)
Перевод на коленке

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

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

Автор: GZep 14.3.2007, 19:28
Мне понравилось, что это язык чистого ООП, но я не очень понял, зачем было делать переменные типа string объектами при копировании которых создаются только ссылки на них...я такого нигде еще не видел. smile 

Автор: max_lapshin 14.3.2007, 19:32
Ну как, зачем? Затем же, зачем это сделано в STL C++, некоторые реализации которойтак же умеют делать copy-on-write. Для оптимизации.

Автор: Serkys 14.3.2007, 19:36
Цитата(GZep @  14.3.2007,  19:28 Найти цитируемый пост)
Мне понравилось, что это язык чистого ООП

После нескольких дней рубки сел вчера за РНР. Как всё неудобно! smile
Пытался применить использование большого количества операторов в одной строке, не получилось smile

Автор: max_lapshin 15.3.2007, 00:18
Да уж, fluent intefaces — это не про PHP. Как, впрочем, и вообще принцип читаемого и минимального кода

Автор: Serkys 15.3.2007, 00:35
Ну я бы не стал заходить так далеко и называть РНР-код неудобочитаемым. Код там читать, на мой взгляд, весьма удобно.
Дело в том, что ruby и php находятся в разных, так сказать, языковых группах. Ruby ориентирован на удобство написания, красоту и изящность кода. Перед РНР такой задачи не стоит.

Автор: max_lapshin 15.3.2007, 01:42
А я бы стал. Начать можно со стандартного набора функций PHP, которые попросту бессистемны. Они бессистемно названы, хаотично разложены параметры и т.д. и т.п.

Добавлено @ 01:46 
Цитата(Serkys @ 13.3.2007,  03:06)
[*]Почти всегда при вызове метода вызывается raise (throw в РНР5)

Оригинал:  Almost everything is a method call, even raise (throw in PHP).

Правильный перевод:

практически любая функциональность — вызов метода какого либо объекта. Даже возбуждение исключения raise (аналог в PHP — throw).


Разницу чувствуешь? =)

Автор: Serkys 15.3.2007, 11:32
Цитата(max_lapshin @  15.3.2007,  01:42 Найти цитируемый пост)
А я бы стал. Начать можно со стандартного набора функций PHP, которые попросту бессистемны. Они бессистемно названы, хаотично разложены параметры и т.д. и т.п.

Да, изначально функции именовались так. Однако позже разработчики РНР стали относиться к именованию стандартных функций внимательнее: стоковые функции начинаются с str, аналогично с массивами и т.д. Старые остаются только для совместимости.
Цитата(max_lapshin @  15.3.2007,  01:42 Найти цитируемый пост)
Оригинал:  Almost everything is a method call, even raise (throw in PHP).Правильный перевод:практически любая функциональность — вызов метода какого либо объекта. Даже возбуждение исключения raise (аналог в PHP — throw).Разницу чувствуешь? =)

Не против, если я подправлю свою мессагу используя твой перевод?

Автор: max_lapshin 15.3.2007, 11:40
Конечно не против.


Автор: alexvav 23.8.2007, 12:20
я так понял, новичку рнр можно не начинать учить, а сразу на руби переходить?

Автор: Wowa 23.8.2007, 12:33
Цитата(alexvav @  23.8.2007,  11:20 Найти цитируемый пост)
я так понял, новичку рнр можно не начинать учить, а сразу на руби переходить? 

можно

Автор: kronos_vano 6.9.2007, 01:29
RoR это круто, поверьте ;). Теперь на пхп писать просто не могу.... совсем не fan. Вы бы видели как туда JS крута интегрирован с аяксом. вопще красота).
Код

Userfiles.new(params[:userfiles])
Userfiles.save!
!
и все! Ни строчки sql кода а мы уже добавили в базу запись. Валидация описана внтури модели, тамже внутри модели я назначил обработчик на пароль и он автоматически сгенерит salt, посчитает хэш. 
Чтобы получить sql-инъекцию надо очень постараться ;) (ох уж как я мучался с етими mysql_real_escape_блаблабла)
Сейчас переписываю сайт с пхп на руби с посещаемостью 16000-20000 хостов в день вот и посмотрим справиться ли он с такой нагрузкой, а то все кричат что рельсы полный тормоз)
Вы еще пишите на php? Тогда мы идем к вам!
оффтопег:
питон мне ваще не понравились, по мне так лучше 
Код

a=2 if expr

чем
Код

if expr:
\t a = 2

поетому рельсы - наше фсйо smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)