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

AmdY

Пью пиво
Команда форума
Ноябрь
я, извиняюсь, но твой код вообще рабочий? super - это прородитель метода, аналог parent::a. Но так как В не наследует A, то почему срабатывает метод A::a - ?
и запятая (B.new.a #a,b) взялась не пойми откуда?

вот видишь, 2 ошибки в простом примере, а если приложение большое?
 

Gas

может по одной?
в /lib складываешь все. Возможно нужно было использовать модуль
Скорее всего так и нужно было делать, просто более опытный ruby программист не совсем понимал зачем нужены такие сложности с каким-то абстрактным классом, который задаёт единый интерфейс.
Вообще показалось что всякие патерны, фаулеры и т.д. это не ruby way, как то в рельсах всё чистенько, даже плюнуть негде (в смысле, не поднимается рука нагородить ооп абстракций, возможно даже тогда, когда нужно).
Опять-же, не минус, просто другой подход.
 

Ноябрь

Новичок
Ноябрь
я, извиняюсь, но твой код вообще рабочий? super - это прородитель метода, аналог parent::a. Но так как В не наследует A, то почему срабатывает метод A::a - ?
и запятая (B.new.a #a,b) взялась не пойми откуда?
Все верно, A<B, поправил, пардон (а запятая там вместо знака перевода строки).
 

AmdY

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

Gas

может по одной?
AmdY
ещё раз повторюсь, какое мнение у меня сложилось - ruby не java и писать в том-же ооп стиле, это не их подход.
как там делать правильно я не знаю, но и специалистом в ruby тоже не являюсь, так разговор поддерживаю :)
 

AmdY

Пью пиво
Команда форума
Ноябрь
Есть довольно крупные пректы написанные на руби
http://ruby-toolbox.com/
Смотрим и учимся)
это максимум недели две работы одному разработчику, очень простой проект
и аналог твоего "метапрограммирования" на php ;)
PHP:
class A {
	function a() {
		echo "a\n";
	}
}
class B extends A {
	function a() {
		parent::a();	
		echo "b\n";
    }
}
 

Gas

может по одной?
AmdY
не совсем parent::a();
скорее:
$f = __FUNCTION__;
parent::$f();

думаю Ноябрь и имел ввиду, что при вызове парента, нигде не указывается имя текущего метода.
 

AmdY

Пью пиво
Команда форума
Gas
он имел ввиду просто наследование и обращение к родительскому методу, обозвав его метапрограммированием.
 

Gas

может по одной?
это мы уже увлеклись додумыванием за автора )
 

fixxxer

К.О.
Партнер клуба
Уточните плиз. Я правильно понимаю, что нам тут уже 5 страниц доказывают преимущество Ruby на примере наличия алиаса super() == parent::имя_метода(), гордо именуя сие "метапрограммированием"?
 

Ноябрь

Новичок
Ноябрь
это максимум недели две работы одному разработчику, очень простой проект
Шутки шутишь?) я имею ввиду все открытые руби проекты на этом сайте, хотя скорее всего ты понял..
Gas
он имел ввиду просто наследование и обращение к родительскому методу, обозвав его метапрограммированием.
Вообще это наследование..
А например так?)

PHP:
class A
    def a c,d,e,f
        puts c,d,e,f
    end
end

class B<A
    def a *params
        super *params
        puts 'b'
    end
end
B.new.a 1,2,3,4
 

Ноябрь

Новичок
Уточните плиз. Я правильно понимаю, что нам тут уже 5 страниц доказывают преимущество Ruby на примере наличия алиаса super() == parent::имя_метода(), гордо именуя сие "метапрограммированием"?
Вообще нет, я привел вам один пример метапрограммирования до этого. Доказывать.. в сказку попали что ли, сами пробуйте, разбирайтесь. Я считаю, что руби лучше. Лучше во всем. Если меня спросить, я так отвечу. Но я допускаю, что вы можете считать иначе, я даже вас оправдываю в своем сознании). Доказывать я буду если пересечемся на одном проекте, и будем выбирать ruby vs php, а здесь это холивар-развлекуха).
 

AmdY

Пью пиво
Команда форума
Ноябрь
твои примеры просто жесть, ты совсем-совсем не усомнился, что твоё "метопрограммирование" немножко не то?

p.s. ты на этом форуме зарегистрировался раньше, чем я узнал про php и при этом ты не освоил даже основ ООП и синтаксиса php. Я бы уволился, если бы нам довелось работать на одном проекте.
 

whirlwind

TDD infected, paranoid
Я не знаю, парни, о чем вы тут общаетесь, но скажите - а что дает пимпа пожаловаться? Я вот хочу на это (не знаю даже как его обозвать) пожаловаться
в php ... [skipped]... а потому делегирование производится через костыли (но производится!), а потому не стандартизовано, и наверняка считается плохим тоном, т.к. требует дополнительного функционала и усложняет все в целом.
мне кажется за такие бредни просто сразу надо горчичник ставить
 

HraKK

Мудак
Команда форума
а что дает пимпа пожаловаться
У меня сверху добавляется в очереди "Жалобы" и ссылка на пост.

Но тут обычный бистард слив. Ожидаем крысу-кун!
 

vlmonk

Новичок
Интересный топик, вставлю пару слов в защиту ruby.

Сегодня, то есть вчера, прослушал парочку докладов по руби, даже скорее больше по ROR.
Они не используют IDE, так как это не имеет особого смысла.
Используют, хотя возможно меньше чем в других языка. Напрмер в команде где я работаю большинство народу использует vim / emacs / TextMate

Реализовать полноценный автокомплит там нельзя.
Можно, но трудно, т.к. много динамики. Но вроде как в популярных IDE достаточно тольковый автокомплит есть.
Передача параметров в методы имеет несколько вариантов, только недавно появилась возможность указывать параметры по умолчанию.
Параметры по умолчанию в языке были всегда. Вариант передачи параметров в методы - один, но есть некоторое кол-во синтаксического сахара (неявная передача хеша и/или лямбды)
Интерфейсов и тайпхинтинг соответственное отсутствуют.
type hinting отсутсвует, в ruby просто другой подход - используется duck typing. Неважно, какого класса объект передается в метод, важно чтоб в этом обьекте были нужные методы.
Класс можно обвесить методами или переопределить в любом месте (здравствуй #define TRUE FALSE).
Да, можно. Но никто не заставляет делать это постоянно. Эту фича можно использовать, например, чтоб внести небольшой багфикс в сторонную библиотеку, не изменяя исходники этой библиотеки.
Вроде есть rdoc, но не понятно кто и как им пользуется, они против чёрных ящиков и знают свой код!!!!
rdoc активно используется в публичных библиотеках. Фактически это стандарт для документирования публичного кода.
Синтаксический сахар делает код непредсказуемым, интерфейс можно узнать только из доки/ читать код библиотек по их же уверением - "может это сразу и не очень понятно".
Немного не понял, что имелось в виду. Для того, чтобы пользоваться библиотекой, нужно сначала изучить доки. Разве в PHP по другому? С доками не всегда все хорошо, есть несколько основных проблем:

- ruby сообщество молодое, многие библиотеки до сих пор активно развиваются. Не всегда все свежие изменения описываются в доках. Иногда (хотя достаточно редко) приходится лезть в исходники.

- rdoc плохо работает с библиотеками, где внутри много используется ruby magic. Опять же, проблема известная и постепенно решается.

Прочитали доклад по тому как писать API, я бы сам уволился за такой подход, а там этим гордятся. Главное код получается коротким и красивым, а то что библиотекой не сможет пользоваться даже сам разработчик месяца через два - не важно. И это при принципе "явное важнее неявного".

Приятная игрушка для школьника и студента, ну ещё блог написать за 15 минут, не больше. Как осуществлять поддержку такого кода, если его становится вдруг много? Как писать на нём в команде.

Я уже раза три видел, как переписываются проекты с ROR на PHP, кстати DiMA упоминал о том же. Сам даже переписывал небольшую бухгалтерскую системку. Не хотел судить, пока достаточно близко не познакомлюсь с предметом и не поговорю с их разработчиками . Может я что-то пропустил? Или там действительно такой ад, что php-шный говнокод покажется раем?
Я тоже не раз видел как переписываются проекы с php на ror, так что это имхо не показатель. На рельсах есть много достаточно больших и активных сайтов.
 

AmdY

Пью пиво
Команда форума
vlmonk
да, сморел RubyMine там довольно здорово сделана поддержка автокомплита для rails. А вот оракловский нетбинс недавно исключил поддержку, сейчас будет только на уровне плагина.

про дефолтные параметры я солгал, они были, просто сейчас появилась возможность ставить их не в конце и начинается угадайка, в php такое и хочется и колется.

слышал краем ухо про возможность запрета модификации объекта в зависимости от контента вызова. Типа изменять и патчить можно, но только в определённых классах(объектах). это фишка руби будет или для рельс?

p.s. Я там в первый пост дописываю, что полезное нашёл, пока основной пункт - соглашения.
 

Духовность™

Продвинутый новичок
Расскажите про руби. PHP вот, устанавливается на сервере и исполняет сценарии. Руи аналогично работает?
 
Сверху