170 похожих чатов

Вот у тебя есть код, который ждёт Animal, но ещё

ждёт, что к объекту прикрутят, ну не знаю, api Circle там например?

53 ответов

37 просмотров

кроме привычной плюсовикам и жабофилов типизации существует ещё и утиная

Алексей-Попов Автор вопроса

С конкретным примером было бы понятнее Не на этом эльфийском наречии, а просто словами

что не понятно? если понадобилось новое удобное api а за базовый тип отвечает кто-то другой, не надо лезть в чужой код, просто прикрути api и пользуйся

Алексей-Попов Автор вопроса

То есть это просто реализация нескольких (разных) интерфейсов одним объектом? Ну так бы и сказал 😁

в данном случае интерфейс прикручивается один

звучит как паттерн «композиция» 😏

значит "композиция" это когда потомок в конструкторе принимает предка, выглядит как он и даёт новые возможности?

Компоновщик (англ. Composite pattern) — структурный шаблон проектирования, объединяющий объекты в древовидную структуру для представления иерархии от частного к целому.

то что у меня с этим определением не сходится (или я не так понял)

ну и ладно, лень обсуждать 😊

ну вот... в итоге знания о паттернах для меня бесполезно

знали бы - не было бесполезно 😊

Алексей-Попов Автор вопроса

Нет, композит (по-русски называют компоновщик) это когда у тебя один интерфейс и для листа, и для дерева Пока что похоже, что ты предлагаешь просто реализацию интерфейса. Не знаю, можно ли назвать это паттерном, хотя вот про декоратор ты сам вспомнил

в js же нет интерфейсов, или я что-то пропустил?

декоратор - функция одного аргумента, такие функции очень удобно использовать в синтаксисе кофескрипта (знаю что так ещё и паттерн называется, но похоже он и заключается в использовании функции одного аргумента)

ключевого слова интерфейс нет, но реализовать их можно)

Алексей-Попов Автор вопроса

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

Как?

ну я знаю только на основе договоренностей. договариваемся что этот объект по логике будет иметь такие то методы / свойства, и всегда им следуем. без TS - это неявные, наверно сложно поддерживаемые, но все же, интерфейсы))

Эм, интерфейс может вообще не имеет методов, не говоря уже про то что два интерфейса могут иметь одинаковые методы

это вы из го взяли что интерфейс не имеет методов?)) а в чем его польза тогда? или приведите пример, может просветить меня незнающего

> приведите пример dto, например 😊

Из Java и php, называется marker interface

- я в предыдщуем сообщение указал через слэш что "методы / (или/и) свойства" - имхо, интерфейс должен быть как java / c#, иметь только методы, а не свойства, то что в TS это так сделано - другой вопрос

https://docs.oracle.com/javase/7/docs/api/java/lang/Cloneable.html Вот интерфейс без методов и свойств

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

ну я лишь ответил на ваш вопрос про то, как “интерфейс не имеет методов?”)))

Алексей-Попов Автор вопроса

Дело исключительно в определении слова интерфейс Если понимать под ним сигнатуру функции, или набор функций с определённой сигнатурой, то очевидно, что в js это есть

Алексей-Попов Автор вопроса

А ты глянул только названия? Сложно представить, что есть вменяемый код, в котором одна строчка сразу несколько паттернов реализует

😅

и это я ещё не всё прочитал

Алексей-Попов Автор вопроса

Я угадал с названиями?

Я выше написал, интерфейс может быть пустой

Алексей-Попов Автор вопроса

В языках с утиной типизацией в этом нет смысла (хотя какой в этом смысл в любых языках для меня пока загадка)

Чтоб не засирать класс мета информацией

Алексей-Попов Автор вопроса

Мне не стало понятнее 🤷‍♂ Практическая цель какая?

Пометить что класс нельзя клонировать/сериализировать/логировать

Алексей-Попов Автор вопроса

Этой цели можно добиться добавлением комментария? Пометка же только для человека будет, а не для компилятора

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

Алексей-Попов Автор вопроса

А как получается ошибка в рантайме? Например, в жабе - будет сгенерировано исключение, если в классе описать метод serialize при имплементации пустого интерфейса nonSerializible?

Без интерфейса clonable нельзя клонировать объект через object.clone

Алексей-Попов Автор вопроса

Ты о пустых интерфейсах говорил Как пустым интерфейсом пометить, что объект нельзя клонировать, и что именно произойдёт при попытке реализовать оба интерфейса (clonable/nonclonable) и вызове clone?

Пустые интерфейсы можно юзать через instanceOf - а это антипатерн.

Алексей-Попов Автор вопроса

что имеется в виду под юзанием пустого интерфейса? и мы в контексте жабы были, там нет instanceOf моя мысль была о том, что пустой интерфейс вполне можно заменить комментариями, но оппонент утверждает, что будут какие-то ошибки, и я всё хочу понять, какие именно ошибки и когда

https://www.baeldung.com/java-instanceof

В duck typing он бесполезен наверное и реально можно заменить комментами. Но при стат типизации можно использовать.

Алексей-Попов Автор вопроса

точно, спасибо тем не менее, мне не стало понятнее чем имплементация пустого интерфейса принципиально отличается от комментариев, и как добиться ошибки

Про java или js(ts) говорим?

Алексей-Попов Автор вопроса

java или c#, там есть интерфейсы в том смысле, который в него вносили в начале дискуссии

Будет исключение

Алексей-Попов Автор вопроса

конкретно с клонированием в жабе вроде как не будет, но я уже сам разобрался, почему там для клонирования пустой интерфейс

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта