Vladimir
я говорю про случай когда функция состоит только из вызов внутренних функций и больше ничего
Vladimir
а остальные случаи можно к этому случаю привести
Shub
а зачем нам такая функция? это и не функция вовсе, это просто оператор композиции в таком случае
Roman
как ты удостоверишься, что все инварианты покрыты: все ошибки обработаны, все краевые случаи в логике и т.п.?
ну явно не тестами. Логику надо писать и композировать на чистых функциях/структурах, и если она укладывается в типы, то за тебя проверит компилятор
Vladimir
Shub
но во-первых, речь идет про модификацию существующего кода, а во-вторых, надо еще суметь найти баланс и не скатиться в сотни функций-пустышек, которые просто скрывают логику цепочкой вызовово
Roman
ну явно не тестами. Логику надо писать и композировать на чистых функциях/структурах, и если она укладывается в типы, то за тебя проверит компилятор
я, конечно, не готов ответственно утверждать, что это применимо на практике в 100% случаев, но пока с моего бугра кажется, что применимо. Хотя бы в некоторых случаях
Shub
ну потому что нам нужны такие композиции чтобы ими оперировать
в общем случае бизнес-логика таковой не является
Shub
где-то все равно будет находится место, где нужно писать логику, пусть даже логику связывания других компонентов
Vladimir
Только если функции чистые.
да даже кстати если и нечистые, мы же за dependency rejection, нас интересует unit test только чистых функций
Shub
иначе у тебя для тривиальных случаев на экране будет открыто 5 разных файлов
Shub
ну так и вынеси эту логику в отдельную функцию и ее проюнитестируй
ее и тестируем. эта логика имеет n зависимостей. предмет дискуссии - найти удобный способ их туда передавать при условии, что ни мейнстримовый DI, ни ООП в целом недоступны в силу каких-то причин
Shub
до сих пор такой способ обнаружен не был
Anonymous
да даже кстати если и нечистые, мы же за dependency rejection, нас интересует unit test только чистых функций
Ну я к тому, что композиция чистой и нечистой функций есть функция нечистая, причем в зависимости от эффектов (наверно) сам акт композиции может привнести ещё эффекты.
Anonymous
до сих пор такой способ обнаружен не был
А как сейчас это выглядит? Или уже писали, я пропустил?
Shub
щас есть некоторое количество способов, решающие проблему частично
Shub
начиная от декомпозиции задачи на компоненты так, чтобы число зависимостей отдельного компонента было равно единице и заканчивая подходом к тестированию
Vladislav
Чот тяжело конечно _правильно_ код писать на фп
Shub
совершенно верно
Shub
мне кажется это оттого, что ни одна теория не принимает во внимание изменения.
Shub
в теоркате если алгебра сформулирована - она неизменна, как неизменно определение синуса
Roman
Чот тяжело конечно _правильно_ код писать на фп
на ооп писать тоже тяжело. Разница в том, что там люди научились делать вид, что это не так
Shub
в бизнесе изменения льются непрерывным потоком
Shub
на ооп писать тоже тяжело. Разница в том, что там люди научились делать вид, что это не так
на ооп накоплено опыта на несколько порядков больше и этот опыт структурирован на порядки лучше. фпешечка же до сих пор находится в состоянии накопления базовых фактов о вселенной
Shub
когда-нибудь, конечно же, и фп наберет те же объемы, которые приведут к качественному скачку
Shub
а пока что мы early adopters со всеми страданиями, к этому статусу прилагаемыми
Anonymous
начиная от декомпозиции задачи на компоненты так, чтобы число зависимостей отдельного компонента было равно единице и заканчивая подходом к тестированию
Я вот не понимаю. Дана зависимость, например, функция f определенной сигнатуры, которая приходит как параметр. Она зависит от функций g и h. В чем проблема? По закону транзитивности ты зависишь от g и h, при условии что функции чистые.
Roman
на ооп накоплено опыта на несколько порядков больше и этот опыт структурирован на порядки лучше. фпешечка же до сих пор находится в состоянии накопления базовых фактов о вселенной
больше — возможно. Структурирован лучше — ну хуй знает. Они там до сих пор не могут договориться, как правильно паттерны реализовывать/применять. И большая часть их best practices очень напоминает народную медицину: "Я попробовал это и у меня все прошло. Рекомендую"
Shub
проблема в “как с этим всем теперь взлететь”
Anonymous
проблема в “как с этим всем теперь взлететь”
Без g и h никак: они описывают объективно необходимый и достаточный минимум.
Shub
Без g и h никак: они описывают объективно необходимый и достаточный минимум.
совершенно верно. но лететь как-то надо. надо написать тест, не зависящий от конкретной реализации g и р (мы ж абстрагируемся), надо, чтобы пользоваться f было не сложнее, чем обычной функцией
Vladislav
Оно же только мейнстримом становится
Vladislav
Условно
Shub
ну дело-то не только во времени. надо еще и людей побольше
Anonymous
совершенно верно. но лететь как-то надо. надо написать тест, не зависящий от конкретной реализации g и р (мы ж абстрагируемся), надо, чтобы пользоваться f было не сложнее, чем обычной функцией
Так сигнатуры на то и нужны. Пока сами типы достаточно хороши, ты всегда можешь подсунуть фейк. Даже если типы плохи, то можешь, просто некрасиво будет. Я не прав?
Shub
Оно же только мейнстримом становится
мейнстримом оно становится очень давно, с 60х
Shub
как конкретно подсунуть?
Anonymous
прав. но мы обсуждаем конкретно реализацию. теория ок
А, теперь понял. Я думал на уровне теории раскол.
Anonymous
Я не верю в какой-то Единственно Правильный Способ (ТМ). Чувство меры и ощущение прекрасного тебе в помощь.
Vasiliy
Rebel Distillers выпустила брендированную водку по Doom, бутылка которой стоит 45 фунтов стерлингов (около 3600 рублей). Теперь фанаты франшизы точно смогут напиться до чёртиков. https://dtf.ru/life/68312
Anonymous
Но чисто логически рассуждая, в каждом конкретном случае у тебя будут и g, и h и максимум что можно сделать - некий пул переиспользования оных. Не знаю, насколько эти рассуждения вообще полезны или нет.
Shub
Я не верю в какой-то Единственно Правильный Способ (ТМ). Чувство меры и ощущение прекрасного тебе в помощь.
пусть бы их было два или три, пусть даже перекрывающихся. пока что остаются весьма ощутимые дыры
Shub
ну точнее, хер бы с ней, с идеологической чистотой и с прочим, шурупчик гибридный язык и позволяет юзать классы, где это реально необходимо
Shub
вся проблема в мешках
Shub
в этих гадских кожаных бипедальных мешках
Vladislav
Shub
Ну в плане в области тырпрайз
без всякого ехидства рекомендую почитать историю лисп-машин и связанной с ней индустрией и коммерцией. мемуары и интервью покойного Dan Weinreb, например, который работал в Symbolic
Shub
был, был у фпшечки свой звездный час, свои 5 минут славы
Vladimir
как конкретно подсунуть?
смотри в функции есть куча кода и вызов этих двух фукнций, ты весь код кроме этих вызовов переносишь в третью и получается родительская фукнция это композиция трех которую тестировать уже не надо - профит
Shub
(минорный) - пролиферация тупых модулей в стиле Logic.ApplicationBlah, которые непонятно куда складывать (впрочем наши джуны не растерялись и стали складывать по принципу “где нажрался - там и проспался”)
Shub
второй - это пролиферация функций-пустышек, глядя на которые непонятно, зачем их использовать и почему бы мне не вызвать Logic.* напрямую?
Shub
то есть абстрагирование как бы сломано
Shub
inb4 private и “кладите рядом”, но это как раз попытки проэмулировать ооп из изоленты и палок
Vladimir
сча уходить надо, позже обсудим)
Shub
это справедливо в общем смысле слова, абсолютно с тобой согласен
Shub
однако интересно посмотреть на инкапсуляцию в чисто фп стиле, без эфшарповых методов на рекордах
Shub
а в моей команде для этого есть взвод фанатиков
Romɑn
Но в целом, сокрытие - это не попытка сделать ооп, это попытка скрыть)
Shub
воспитанных с одной целью - умереть от недопущения ооп в любом виде
Romɑn
а в моей команде для этого есть взвод фанатиков
зачем они это делают, это конечно вопрос
Shub
точнее, не в моей команде даже. на нашем проекте
Shub
зачем они это делают, это конечно вопрос
я думаю, это выходит далеко за рамки технических вопросов и возможностей языков
Anonymous
Она не нужна
Shub
в математике
Anonymous
Ну в пределе функциональный язык это математика в ее жалком подобии
Shub
собственно, я наблюдаю это на практике. идеоматический код на хаскеле страдает всеми детскими болячками оопешного кода из 90х