LINUX.ORG.RU

Благословенные замыкания: кто, где, когда использовал?

 bless, ,


1

1

Я в принципе не люблю ООП, а в Perl5 и тем более (реализация просто ужасная). Но вопрос реализации объектов через благословение closure меня заинтересовал.

Я уже не первый объектный класс так пишу, и в общем могу сказать, что полноценный «закрытый» доступ к свойствам объекта, гарантирующий, что пользователь не полезет в твой объект напрямую, даже если он этого очень захочет - это вполне здравая идея, которая уже давно реализована везде и всюду, но почему-то только не в Perl5. Замечу, что в том же Moose мне удавалось «расковырять» объект и получить доступ к его свойствам, минуя все хитросплетения has-определений, всяких private'ов и «ro».

А вот с closure'ами такие вещи не прокатывают: достаточно локализовать набор переменных в конструкторе, благословляющем ссылку на процедуру - и все эти переменные будут доступны уже только внутри blessed closure.

Самая идея не нова: она упоминается в толстых книгах O'Reily (Например, «12.7.5. Using Closures for Private Objects» в самой известной из них), откуда я её и почерпнул. Тем не менее, я поискал в гугле на эту тему, изучил некоторые реализации ООП-шных нахлобучек, выложенных на CPAN'е - и не нашёл тех перловиков, которые тоже предпочитают благословлять замыкания.

Вопрос: почему так? Чем плоха идея-то?

★★★★★

Последнее исправление: DRVTiny (всего исправлений: 3)

Чувак , ты крут !!!

anonymous
()

«закрытый» доступ к свойствам объекта, гарантирующий, что пользователь не полезет в твой объект напрямую, даже если он этого очень захочет - это вполне здравая идея

Нет.

Волновать тебя не должно, куда пользователь захочет залезть. Твой анальный огород ему не помешает, в крайнем случае похачит исходник и сделает что надо. В perl не лезут в чужие дома, не потому что двери закрыты, а потому что не принято.

disarmer ★★★
()

реализация просто ужасная

Если не смог в Perl, его идиоматику... Если не смог в управление сложностью в проектах ...

полезет в твой объект напрямую, даже если он этого очень захочет
это вполне здравая идея

Опять эти любители анальной огороженности.

Советую потратить эту энергию на хорошую документацию/тесты/дизайн API твоей системы. Если сделал кривой API или не смог объяснить идиоматику своего решения, не мешай пользователям.

Чем плоха идея-то?

Читай Лари Уола. Он хорошо объясняет.

outtaspace ★★★
()
Ответ на: комментарий от anonymous

Из Крыма уехал в марте 2015, поэтому трудно говорить наверняка. Вроде как вполне норм (общаюсь с ними), хотя ЗП у программистов не радуют (стабильно, но мало).

outtaspace ★★★
()
Ответ на: комментарий от outtaspace

Если не смог в Perl, его идиоматику... Если не смог в управление сложностью в проектах ...

Вопрос к разобравшемуся: как сделать чтобы перловый гц смог в циклические ссылки и перестал периодически останавливать процесс на несколько секунд?

hateyoufeel ★★★★★
()
Ответ на: комментарий от hateyoufeel

перловый гц

В Perl нет GC, только считалка ссылок.

смог в циклические ссылки

На все воля программиста, если он не смог избежать таких ссылок, то быть беде.

Как вариант, клонировать данные (deep copy) или использовать нечто вроде https://metacpan.org/pod/Scalar::Util#weaken

перестал периодически останавливать процесс на несколько секунд

Восхищаюсь вашей суровостью.

outtaspace ★★★
()
Ответ на: комментарий от outtaspace

В Perl нет GC, только считалка ссылок.

В perldoc написано что есть.

На все воля программиста, если он не смог избежать таких ссылок, то быть беде.

А если циклические ссылки нужны by design? Граф с циклами, например.

Как вариант, клонировать данные (deep copy) или использовать нечто вроде https://metacpan.org/pod/Scalar::Util#weaken

В нормальных языках это без костылей делается. Может, стоит уже закопать Perl в 2016 году?

hateyoufeel ★★★★★
()
Ответ на: комментарий от disarmer

Есть ещё инкапсуляция, которая предполагает отсутствие иного доступа к свойствам объекта, нежели через вызовы его методов-ацессоров.

Плюс, в замыкании я легко и естественно реализовал массовое присваивание значений свойствам объекта и массовое «извлечение» этих свойств в список. С традиционным благословением на хеш-ссылку пришлось бы делать какой-то дурацкий «супер-метод» для этого.

DRVTiny ★★★★★
() автор топика

это вполне здравая идея

дурная идея, тебе на дотнете надо писать

annulen ★★★★★
()
Ответ на: комментарий от DRVTiny

Я не против замыканий, я против инкапсуляции вопреки здравому смыслу. Тем более, если тебе не нравится ООП, зачем соблюдать инкапсуляцию свыше того, что есть из коробки?

Замыкания сам часто использую, из соображений удобства (чаще всего пишу без ООП)

disarmer ★★★
()
Последнее исправление: disarmer (всего исправлений: 1)
Ответ на: комментарий от hateyoufeel

В perldoc написано что есть.

Давай ссылку на perldoc.

А если циклические ссылки нужны by design?

Я же написал про Scalar::Util::weaken.

Может, стоит уже закопать Perl в 2016 году?

Очень непонятный наезд. Я разве рекламирую тут Perl? Его уже закопали, году так в 2006м. В 2010 он почти полностью исчез с рынка труда.

outtaspace ★★★
()
Ответ на: комментарий от outtaspace

Избранные теги поциента: erlang, erzent, haskell, ocaml, rust, sml, убогонький недоязычок

При этом он сам наверняка пишет на похапе или 1с.

anonymous
()
Ответ на: комментарий от anonymous

При этом он сам наверняка пишет на похапе или 1с.

К 1C меня не пускают :(

hateyoufeel ★★★★★
()
Ответ на: комментарий от outtaspace

Давай ссылку на perldoc.

perlobj

Очень непонятный наезд. Я разве рекламирую тут Perl? Его уже закопали, году так в 2006м. В 2010 он почти полностью исчез с рынка труда.

Я тут срач пытаюсь устроить, а ты...

hateyoufeel ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.