Size: a a a

2020 July 27

A

Aleksandr Khristenko in PHP
источник

A

Aleksandr Khristenko in PHP
Алексей Гевондян
идешка видит что не то делаешь / стат анализаторы проверяют и находят что не то делаешь, и оповещают об этом. а если проигнорить - то на этапе выполнения возникнет ошибка... вроде как очеивидно все... не пойму, в чем затык то у меня...
Эти генерики нужны для того, чтобы показать статическому анализатору/компилятору как связаны типы и как их выводить.
источник

A

Aleksandr Khristenko in PHP
Я выше кинул пример их использования.
источник

АГ

Алексей Гевондян... in PHP
а если уйти от скалярных типов, и заменить T, B на интерфейсы? не пойдет такое?
источник

АГ

Алексей Гевондян... in PHP
короче как я понял, если по сути, вся эта шумиха вокруг дженериков обусловлена манипуляциями со встроенными типами (скалярными, либо другими массив, объект). при манипуляции с классами / интерфейсами такой проблемы нет.
источник

АГ

Алексей Гевондян... in PHP
если внедрить концепцию "все объект" (условно) т.е. 2->multiply(2) === 4 - то и у скалярных объектов появится некий интерфейс, и проблема уйдет? необходимость в дженериках отпадет?
источник

A

Aleksandr Khristenko in PHP
Алексей Гевондян
а если уйти от скалярных типов, и заменить T, B на интерфейсы? не пойдет такое?
Как?
источник

A

Aleksandr Khristenko in PHP
Алексей Гевондян
короче как я понял, если по сути, вся эта шумиха вокруг дженериков обусловлена манипуляциями со встроенными типами (скалярными, либо другими массив, объект). при манипуляции с классами / интерфейсами такой проблемы нет.
Неправильно =\
источник

A

Aleksandr Khristenko in PHP
Алексей Гевондян
а если уйти от скалярных типов, и заменить T, B на интерфейсы? не пойдет такое?
Там вся фишка именно в зависимости на уровне типов. Т.е. мы вы Collection<A> можем передать только функцию которая принимает A и возвращает какое-то B. И вернет этот метод именно Collection<B>.
Как это интерфейсами выразить?
источник

A

Aleksandr Khristenko in PHP
Тэкс, ты видимо дальше на дискуссию не настроен. Пойду я тогда.
источник

AM

Artem Molotov in PHP
Aleksandr Khristenko
Да вот не скажи. Много ты языков с вытесняющими грин тредами знаешь?
Есть мнение, что они не нужны
источник

A

Aleksandr Khristenko in PHP
Artem Molotov
Есть мнение, что они не нужны
Не нужны грин треды? Или не нужны вытесняющие грин треды?
источник

АГ

Алексей Гевондян... in PHP
Aleksandr Khristenko
Тэкс, ты видимо дальше на дискуссию не настроен. Пойду я тогда.
в 4 утра что-то жестко дискутировать) вместо функции можно передать тоже объект-преобразователь, можно завернуть в объекты все. есть же распространенная "хорошая" практика заворачивать айдишники в классы, так что вполне нормально вокруг скаляра класс делать... видимо я упускаю какие-то моменты, но у нас же, если мы работаем с абстракциями, как раз все в порядке с архитектурой. а шаблоны завязаны на конкретику
источник

A

Aleksandr Khristenko in PHP
Алексей Гевондян
в 4 утра что-то жестко дискутировать) вместо функции можно передать тоже объект-преобразователь, можно завернуть в объекты все. есть же распространенная "хорошая" практика заворачивать айдишники в классы, так что вполне нормально вокруг скаляра класс делать... видимо я упускаю какие-то моменты, но у нас же, если мы работаем с абстракциями, как раз все в порядке с архитектурой. а шаблоны завязаны на конкретику
Ну покажи, как по-твоему будет выглядеть мой пример с контейнером.
источник

АГ

Алексей Гевондян... in PHP
т.е. как бы в момент объявления там завязка на абстракцию (тип) а в момент конкретного применения на уровне кода (не на уровне рантайма) там уже идет замена на что-то конкретное... вот и не пойму зачем это, когда можно оставить все зависимости на интерфейсы, и перевести только на рантайм эти вещи...
источник

АГ

Алексей Гевондян... in PHP
попозже напишу код...
источник

АГ

Алексей Гевондян... in PHP
в том примере идет замена T на B. т.е. видимо подразумевается, что это разные интерфейсы. а зачем так осуществлять преобразование? почему бы не написать просто TToBConverter{.. convert(T $t):B; }, где T и B это интерфейсы?
источник

АГ

Алексей Гевондян... in PHP
разные типы, в данном случае я идеалистически заменяю на разные интерфейсы
источник

АГ

Алексей Гевондян... in PHP
если ввести такие интерфейсы как Any, Scalar, Number и т д
источник

A

Aleksandr Khristenko in PHP
Алексей Гевондян
в том примере идет замена T на B. т.е. видимо подразумевается, что это разные интерфейсы. а зачем так осуществлять преобразование? почему бы не написать просто TToBConverter{.. convert(T $t):B; }, где T и B это интерфейсы?
Ты попробуй написать аналог того кода сначала.
источник