Size: a a a

Боль Тимлида

2021 October 11

ММ

Максим Муратов... in Боль Тимлида
Там, где удобнее, инъекцию чаще применять хочется -- она прямо напрашивается, и это приносит свои дивиденды.
источник

VF

Victor Fabrichenko in Боль Тимлида
И где указывается что куда инжектить?
источник

AW

Ars Wysocki in Боль Тимлида
const ArrayTypeID = Symbol('Array');
type ArrayTypeID = typeof ArrayTypeID;
const TreeTypeID = Symbol('Tree');
type TreeTypeID = typeof TreeTypeID;

interface Tree<T> {
   value: T,
   children: Tree<T>[],
}
interface IDs<A> {
   readonly [ArrayTypeID]: Array<A>
   readonly [TreeTypeID]: Tree<A>
}

type TypeIds = keyof IDs<any>;

type Type<Container extends TypeIds, Element> = IDs<Element>[Container];
type X = Type<TreeTypeID, number>
type A<Id extends TypeIds, E> = (input: Type<Id, E>) => E;

const reduceTree: A<TreeTypeID, number> = (a: Tree<number>) => a.value;

type Reducer<T extends TypeIds, U> = {
   reduce: (input: Type<T, U>) => U
}

const reduceOp = <T extends TypeIds, U>(r: Reducer<T, U>) => (input: Type<T,U>) => r.reduce(input)
const ArrayNumberReducer: Reducer<ArrayTypeID, number> = {
   reduce(a) {
       return a.reduce((a,b) => a + b);
   }
}

const res = reduceOp(ArrayNumberReducer)([1,2,3])
источник

AW

Ars Wysocki in Боль Тимлида
здесь есть лишний бойлерплейт
источник

VF

Victor Fabrichenko in Боль Тимлида
Погромист не смог сказать словами и вывалил все что смог
источник

AW

Ars Wysocki in Боль Тимлида
давайте рассмотрим пример из практики
источник

VF

Victor Fabrichenko in Боль Тимлида
Да мы уже рассмотрели несколько примеров
источник

AW

Ars Wysocki in Боль Тимлида
мы хотим обобщить свертку структуры данных
источник

VF

Victor Fabrichenko in Боль Тимлида
Толку, вы уходите от сути вопроса
источник

VF

Victor Fabrichenko in Боль Тимлида
Не хотим мы ничего обобщить
источник

VF

Victor Fabrichenko in Боль Тимлида
Куда вы складывание формулы, по которым выполняете простые операции?
источник

AW

Ars Wysocki in Боль Тимлида
давайте представим, что вам надо взять пользователя и посчитать длину его фамилии, например
источник

AW

Ars Wysocki in Боль Тимлида
это просто функции
источник

AW

Ars Wysocki in Боль Тимлида
как, например, reduceOp
источник

ММ

Максим Муратов... in Боль Тимлида
Например, в OCaml можно такую иньекцию сделать _статически_, со всеми вытекающими. Можно даже сгенерировать типы, специфичные для конкретного случая иньекции. А в Go, например, так нельзя -- максимум, можно с динамическими интерфейсами извратиться.

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

VF

Victor Fabrichenko in Боль Тимлида
Вы мне все время приводите какие-то разные примеры с разными вводными
источник

AW

Ars Wysocki in Боль Тимлида
так вот, представим, что у нас есть сервис, который может этого юзера из бд достать и посчитать
источник

VF

Victor Fabrichenko in Боль Тимлида
Зачем?
источник

ii

iv iv in Боль Тимлида
Ипонамат.. Какие важные вопросы в чате лидов
источник

AW

Ars Wysocki in Боль Тимлида
length(getUserName(id)), верно?
источник