Как жить с синтаксическим сахаром like Ruby

AmdY

Пью пиво
Команда форума
fixxxer
я где-то на этом форуме тоже утверждал, что они явно курили. кстати, jwage от них ушёл. во второй они решили сделать orm быстрой, но мне она показалась дико неудобной. symfony тоже намудрили, хотя теперь её можно разобрать на компоненты и юзать в своих велосипедах.
 

fixxxer

К.О.
Партнер клуба
Ну фиг знает. По моему им всем какой-то злоумышленник показал что через reflection можно выдрать phpdoc.
 

Ноябрь

Новичок
Ноябрь
в php тоже есть инструменты позволяющие заниматься метопрограммированием, тот же eval и __call, но это плохой стиль.
Потому что это тотально убого.
http://weare.buildingsky.net/2009/08/25/rubys-metaprogramming-toolbox
В некоторых случаях действительно помешает красиво решить проблемы, но чаще является workaround-ом для неудачных архитектурных решений.
Если в пхп метапрограммирование это плохой тон, это не означает, что в других ЯП не стоит использовать метапрограммирование.
Ноябрь
согласен, есть инкопсуляция. но monkey pathing убивает её
Очень смешно. "В Руби удобно работать с метапрограммированием, и очень боюсь, что ненароком начну этим заниматься. По ночам мне снится, что я пишу монкей патчи и не могу остановиться". Что за бред. Меня забавляет как ты боишься мощи руби)) Вы пхпшники варитесь в собственном соку. У нас есть Rack, у нас есть несколько крупных фрейморков, у нас есть несколько веб-серверов для бэкэнда, все друг с другом совместимо, то же в питоне. Мы ставим библиотеки одной командой. Мы компилируем библитеки даже под виндой если надо http://rubyinstaller.org/
Вы сидите на своем пхп и думаете, что это инструмент, который ИДЕАЛЬНО подходит для веб-разработки.
похоже я php знаю лучше, чем ты ruby
три с половиной фичи?) что знать в этом пхп: магические функции, интерфейсы, евал тоже есть.. да.

пс
у нас есть haml, sass, redcar, rake, thor, mongrel, thin, unicorn, passenger... и мы говорим: "нам мало дайте еще".

ппс
AmdY
В ответ я предположу, что ты плохо перевариваешь ООП, нормальное ООП, как в руби, яве, as3, C#. Я думаю, что ни один из ООП языков тебе не нравится, или ты не пробовал на нем писать.

пппс
посмотрите синатру http://www.sinatrarb.com/
 

Ragazzo

TDD interested
Ноябрь
ололо....если начинать перечислять то список выйдет больше ;)
 

AmdY

Пью пиво
Команда форума
Ноябрь
насколько я помню, ты php так и не освоил, так что твои заявления насчёт "три с половиной фичи" выглядят смешно. та и твоё бохвальство указывает на то, что всё же ты ничего из php не вынес и о многом даже не догадываешься.
понимаешь, я читаю много книг по архитектуре приложений, ООП, по паттернам, по рефакторингу, смотрю реализации веб фреймворков в других языках, php там даже не пахнет. Я не молюсь на ООП, решение может быть любое, главное, чтобы оно не усложняло архитектуру и легко поддерживалось.

p.s. мне интересно, неужели ты вообще книг кроме как по ЯП и скринкастов ничего не видел?
p.p.s. а чего из приведённых тобой так много реализаций серверов? php-шные реализации тоже есть, но это так - поржать, есть другие велосипеды nginx, apache, PHP-FPM, которые работают действительно быстро.
что там должно быть интересное, микрофреймворк?
 

fixxxer

К.О.
Партнер клуба
в других ЯП не стоит использовать метапрограммирование
Дай свое определение метапрограммирования. Я, повторюсь, под этим поднимаю C++ Templates и Java Generics - то есть, грубо говоря, обобщенные алгоритмы, не завязанные на конкретный тип данных.
 

Ноябрь

Новичок
Дай свое определение метапрограммирования. Я, повторюсь, под этим поднимаю C++ Templates и Java Generics - то есть, грубо говоря, обобщенные алгоритмы, не завязанные на конкретный тип данных.
Ссылка приведенная в моем предыдущем сообщении как раз показывает возможности того, что называют метапрограммированием в руби. А еще выше я привел пример реального использования. Если коротко, то это способ расширения функционала какого либо класса. Для этого есть довольно много программных инструментов, которые и перечислены в той статье. Кроме того это отличные инструменты для анализа класса/модуля.
 

AmdY

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

Gas

может по одной?
Ноябрь
какого рода анализа, рефлексии? http://php.net/reflection

лично моё мнение, возможности приведённые по ссылке, это отличный способ выстрелить себе в ногу, чтоб быстро что-то залать и забыть - да, отличное решение.
в целом, ruby на меня произвёл странное впечатление, код получается заметно короче чем на php, но ООП часть мне показалась куцей. Вот читаешь книги с примерами на c# и java, в php всё аналогично (благо содрано с java) - интерфейсы, абстрактные классы, иерархии наследования. А в ruby всё не так, страшно лишний класс создать, если он не мапится на таблицу.
Это не плохо, просто по-другому, но меня не впечатлило. Хотя напарника, наоборот, перешёл полностью на RoR.

Опыт работы с ror'ом был не очень глубокий и было 2 года назад, по-этому мои рассуждения могут быть в корне неверные :)
 

Ноябрь

Новичок
fixxxer
я так понимаю, эта ссылка http://weare.buildingsky.net/2009/08/25/rubys-metaprogramming-toolbox - пример инструментария для метапрограммирования.
очень похоже на runkit - http://php.net/runkit

а это разве и есть метапрограммирование?
Я бы сказал немного похоже.
В руби можно сделать так
MyClass.class_eval do
#действия внутри класса обычно инклуд
end
По сути это передается ламбда, но в метод можно передать одну ламбду вот так красиво.
Я могу расширить метод следующим образом https://gist.github.com/739307 , если мне это действительно нужно.
Собственно в этом и суть, в руби это выглядит красиво и удобно: удобно использовать.
В пхп есть некое подобие, которое выглядит ужасно: дурной тон.
 

fixxxer

К.О.
Партнер клуба
Это все хорошо, вопрос не превращается ли это в write only code. Я не про фреймворки, где за соблюдением конвенций следят, а про код приложений. Тут на один вариант применения по делу ведь приходит в голову сто злоупотреблений. Короче, без code review каждого коммита не обойтись, получается.
 

Gas

может по одной?
Ага, тоже интересует этот вопрос. Конечно это не проблема языка, а рук, которые его используют, но всё же - что не запрещено, то может и будет использовано абы как
 

Ноябрь

Новичок
Ноябрь
инструменты просто решают задачи, но задачи можно решать с разными инструментами.
приведи определение и задачи для которых метапрограммирование необходимо или является наилучшим решением
я привел выше, там это смотрится отлично. Очень часто приходиться использовать существующий код (библиотеку). Далеко не всегда удобно наследовать класс, иногда очень удобно использовать метопрограммирование. Ты не привык использовать метапрограммирование, т.к. в php это неудобно, в пхп нет аналогов миксинов, а потому делегирование производится через костыли (но производится!), а потому не стандартизовано, и наверняка считается плохим тоном, т.к. требует дополнительного функционала и усложняет все в целом.
Ноябрь
А в ruby всё не так, страшно лишний класс создать, если он не мапится на таблицу.
как бы там mvc.. что за лишний класс?) Попробуй синатру (ссылка выше).
 

Ноябрь

Новичок
Это все хорошо, вопрос не превращается ли это в write only code. Я не про фреймворки, где за соблюдением конвенций следят, а про код приложений. Тут на один вариант применения по делу ведь приходит в голову сто злоупотреблений. Короче, без code review каждого коммита не обойтись, получается.
Ну зачем это использовать, когда не нужно изменять готовый функционал? Это странный вопрос. Вы же не будете создавать класс, а затем переопределять в нем что-то в рамках одного проекта, это же бред.
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Че парни? Троля кормите? :D
 

Gas

может по одной?
как бы там mvc.. что за лишний класс?)
эээ, mvc не подразумевает наличие только классов, которые являются сущностями таблиц.
например, есть разные классы для работы с платёжными системами, которые никак с базой не работают и наследуются от общего абстрактного класса,
какие-то null-value объекты, типа незалогиненный пользователь.

Ну пример с super мало что поясняет, то-есть да, в php нет прямого аналога, но сделать подобное можно, будет чуть длинее. Но с учётом того, что это редко нужно - можно считать синтаксическим сахаром.
пхп нет аналогов миксинов
аналогов нет, в java тоже нет. У меня мозг больше настроен на _современную_ классику ооп - javaб c#
в ruby нет (или я не знаю) - интерфейсов, абстрактных классов, тайп хинтинга.
 

Gas

может по одной?
В общем, у меня нет цели доказать что php лучше чем ruby. Нормальные языки, своими плюсами и минусами.

Вы же не будете создавать класс, а затем переопределять в нем что-то в рамках одного проекта, это же бред.
создатель кода нет, но сейчас 21 век - всё на аутсорс. Этот проект может потом править несколько разных команд и там уже возможно всё )
 

Ноябрь

Новичок
например, есть разные классы для работы с платёжными системами, которые никак с базой не работают и наследуются от общего абстрактного класса
Честно говоря не знаю в чем проблема, в /lib складываешь все. Возможно нужно было использовать модуль, а не класс (хотя я не знаю как реализовывалась задача). Вобщем мне непонятно с чем связан страх создать лишний класс)
 
Сверху