• Плюсы и минусы ведения бизнеса в США: наблюдения после года развития своей компании
    0
    чем выше у тебя уровень доходов (в сравнении с другими согражданами), тем меньше тебя касаются правила и законы страны. Штрафы всё больше воспринимаются не как наказания, а как тарифы за право нарушать законы.
    Так штрафы пропорциональные уровню доходов — это совершенно отдельная тема.
  • Вам действительно нужен Redux?
    0
    Не имело за собой практического примера
    А насколько «практический» должен был быть пример? И что вы вообще под этим подразумеваете? Вот тут, тут и тут я приводил примеры разной степени «практичности», вплоть до конкретной полной реализации mapDispatchToProps, что с ними не так? Чем оно хуже вашего примера с «вот так оно будет [где-то] в [каком-то] фреймворке» (получалось, прямо в Реакте, который мы, вроде бы, вообще не рассматривали)
    Не реализуется на практике в редаксе
    Поясните, под «не реализуется» вы подразумеваете «не реализуемо» или «не реализовано»?
  • Почему следует игнорировать истории основателей успешных стартапов
    0
    Вот вам пример из соседнего топика от Mendel:
    У моего близкого человека был маленький бизнес. Буквально пять рабочих мест считая двух учредителей. Работали они очень хорошо, клиентов обслуживали на ура.
    Но одному человеку с большим административным ресурсом (не будем конкретизировать, без политики) захотелось чуть больше денег.
    Поэтому определенным гос.органам в той сфере был спущен «белый список» фирм (свежерегов) документы которых (и их клиентов) нужно пропускать максимально быстро, а всех остальных — по максимально возможному сроку.
    Да, у «белых» фирм уровень обслуживания был ужасен и цены — ровно в два раза выше. Но в той сфере время деньги, и все клиенты были вынуждены уйти к «белым».
    Большинство в той сфере или закрылись или ушли аутсорсерами для «белых».
  • Вам действительно нужен Redux?
    0
    Получается что-то типа того, как await'ы работают в JS и C# — когда всё, что после await становится новой функцией-коллбэком, которую запустят передав ей результат await'а.
  • Вам действительно нужен Redux?
    0
    Вы между ними разницу видите, или нет?
    Вы серьёзно думаете, что я не вижу разницы, но при этом тут же переписал код так, чтобы явного вызова «грязной» функции не было?

    Только сперва в том сообщении, что вы процитировали найдите, где я говорил, что вы говорили, что редакс — чистый.
    А почему только именно в нём? В нём вы писали, что Redux грязный из-за dispatch, а в другом написали про меня:
    Вы сказали, что диспатч, цитирую: «будет аналогом вызова чистой функции»
    Итого вы выставили меня защитником чистоты Redux как такового.

    Когда на самом деле
    Я просто предлагал заменить/разделить целиком грязную функцию А на 2 отдельных части — чистую часть (функцию Б, которая делает всё, кроме вызова dispatch) и грязную часть (вызов dispatch для диспачтинга значения, возвращённого этой чистой функцией Б), чтобы грязную часть можно было вынести с глаз долой во фреймворк


  • Вам действительно нужен Redux?
    0
    Но теперь вы уже играете с моей идеей) Зачем вы представляете ее как свою?
    А не вы с моей? Впрочем, неважно. Интересно только, откуда вы взяли, что я вашу как свою преставляю, я же прямым текстом написал:
    Я ведь тоже мог
    С другой стороны, забавно, что вы собственную же идею не узнали даже после прямой отсылки и набросились с критикой.
  • Вам действительно нужен Redux?
    0
    Т.е., с точки зрения самой программы этого IO как бы и нет, есть просто значение, которое подставится при компиляции?
  • Вам действительно нужен Redux?
    0
    -
  • Вам действительно нужен Redux?
    0
    Только у меня он будет делать что-то типа

    var newState = dispatch(handlers[onClick.handler](onClick.data), oldState)
    Ну, или если внутри просто оригинальный Redux, то сделает просто вот так:
    function processHandler(handlerDescription){
      var handler = handlers[handlerDescription.handler];
      var data = handlerDescription.data;
      handler(data).forEach(action=>dispatch(action);
    }
    Как и у вас, весь «грязный» код будет во фреймворке, а весь клиентский — будет «чистым».
  • Вам действительно нужен Redux?
    0
    То есть мы все это время, все эти десятки сообщений про погоду говорили? Напомню, что вся эта ветка началась с моего заявления:
    А dispatch уже в редаксе не используется? Диспатч — это про impure. В ооп тоже некоторые методы чистые, это не делает его pure
    А сможете найти, где я утверждал, что Redux — чистый?
    И у вас в onTodoClick будет опять вызов процедурного диспатча или его аналога? Что будет в этой функции, которую вы пишете в своем приложении
    У меня в приложении будет вон тот мой чистый onTodoClick:
    onTodoClick: id => {
          return[toggleTodo(id)];
        }
    А уже фреймворк будет вызывать её по имени и диспатчить возвращённое значение. Так же, как и у вас там, цитирую:
    // Так фреймворк обрабатывает клики:
    var newState = markup.div.onClick(oldState);
    Только у меня он будет делать что-то типа
    var newState = dispatch(handlers[onClick.handler](onClick.data), oldState)
  • Вам действительно нужен Redux?
    0
    > Так, знаете, IO, например, в принципе не может быть чистым, значит, и Haskell весь «грязный»?

    Почему же не может? Может.
    Погодите-погодите, что-то я это пропустил. А как это IO может быть чистым? Что это за IO-функция, которая при одинаковом вызове всегда возвращает одно и то же и не меняет ничего за пределами себя? Та же getLine из Хаскеля — она же возвращает внешний ввод, который не выводится из входных параметров.
  • Как я заработал 200 000 $ в 16 лет
    0
    Плагин к чему? Могу вам юзерскриптик для Грисманки накидать, если надо.
  • Почему следует игнорировать истории основателей успешных стартапов
    +1
    Ну, например, устроить так, что магазин конкурента будет постоянно закрыт из-за проверок?
  • Плюсы и минусы ведения бизнеса в США: наблюдения после года развития своей компании
    0
    есть еще deductible (сколько денег на медуслуги надо заплатить, чтобы дальше включился страховой план) + отдельное понятие out-of-pocket (даже после исчерапания дедактибл и включении плана какую-то часть за прием у врача надо платить самому)
    Что-то типа франшизы во каско?
  • Плюсы и минусы ведения бизнеса в США: наблюдения после года развития своей компании
    0
    Те же, что и в Европе. Европейцы как то выживают.
    Менее обязательнее их платить, чем в той же Европе и в США, попробуй там откоси… Но и американцы и европейцы как-то выживают.
    Так в том и была суть претензии — что у нас не платят целые сферы, соответственно, конкурировать с ними честно невозможно — разоришься. Если бы платили все — можно было бы как-то конкурировать.
  • Как я заработал 200 000 $ в 16 лет
    0
    Меня одного бесит, что подобное появилось на GT?
    А оно и не появилось на ГТ. Мы же на ХХ!
  • Вам действительно нужен Redux?
    0
    Еще раз, при редаксе изменения стейта — грязные.
    Вы имеете в виду вызовы dispatch и вызовы методов из компонента? Да, это так. А с этим кто-то спорил?
    И компонент чистый. Посмотрите внимательно — компонент — это чистая функция, которая возвращает объект, он никогда не изменяет стейт.
    Ну, раз вы мутацию стейта в обработчик хэндлеров (т.е., в Реакт, или кто теперь у вас хэндлеры к DOM привязывает?) перенесли — то само собой. Реакт(?) стал чуть-чуть «грязнее», потому что он теперь занимается и мутациями глобального стейта, а код стал чистым. Я ведь тоже мог написать у себя в примере, что в реакт-компоненте буду не функции в хэндлерах писать, а объект данных, достаточный для вызова:
    return (
      <div onClick={{handler: "onTodoClick", data: {id:1}}}>
        ClickMe!
      </div>
    );
    И сразу мой компонент стал бы «чистым».
    Увы, но это так. Я вижу, что вы расстроены, мне жаль, но редакс — предоставляет процедурный API с функциональными элементами.
    Вот опять — а кто это отрицал-то вообще? Ну, разве что я бы скорее сказал, что у него процедурный API для диспатчинга и функциональный — для редьюсеров (раз уж «инициализация не считается»). Но тут большой разницы нет.
  • Вам действительно нужен Redux?
    0
    Сделать часть async-action creator-ов декларативными ― реально. Но не стоит забывать, что на практике они бывают несколько сложнее, чем просто последовательный вызов нескольких более плоских action-ов. И это тоже нужно будет как-то продумывать. Вплоть до DSL :D
    Единственное, что мешает сделать их все чистыми — это IO. Но тут даже Хаскель грешен.
  • Вам действительно нужен Redux?
    0
    Мм, это я ушёл в крайность? Это же вы говорите, что даже часть процедурного программирования делает весь код не-функциональным.
    Но заметьте что есть разница — процедурно инициировать приложение (а дальше оно работает функционально), или процедурно строить всю архитектуру, где кое-какие места будут работать функционально.
    В моём варианте весь «грязный» код был компоненте и во фреймворке, при этом и редьюсеры, и экшн-креэйторы, и экшн-генераторы были чистыми. У вас редьюсер (increaseCounter) запихнут в компонент, экшнов вообще нет, и всё равно фреймворк и компонент — «грязные».
    // Так фреймворк обрабатывает клики:
    var newState = markup.div.onClick(oldState);
    Под «фреймворк обрабатывает клики» вы предполагаете, что это часть которого фреймворка, Реакта? (а какой ещё фреймворк тут знает всю структуру компонента со всеми хэндлерами?)
    Тогда вы просто пошли дальше по моему пути — воспользовались тем, что Реакт всё равно «грязный» и засунули туда («под ковёр») всю «грязную» часть интеграции с Редуксом (вызов экшн-генератора из хэндлера).
  • Вам действительно нужен Redux?
    0
    Читает — в смысле, из стора? Так давать им getState через middleware.
  • Вам действительно нужен Redux?
    0
    Я же писал снизу пример истинно функционального кода на JS.
    Где именно? Тут?
    Код оттуда
    initialState = { counter = 1 };
    
    increaseCounter = (state) {
       return { counter: state.counter + 1 };
    }
    
    Counter (state) {
       return (
          <div onClick={increaseCounter}>
             {state.counter}
          </div>
       );
    }
    
    // Клиент инициирует фреймворк:
    FpReact.render(Counter, initialState);
    
    // Код фреймворка:
    FpReact.render = (UserMarkup, currentState) { 
       markup = UserMarkup(currentState);
    }
    
    // Так фреймворк обрабатывает клики:
    var newState = markup.div.onClick(oldState);
    Так тут функциональщиной не пахнет — вот это «FpReact.render(…)» функциональный компилятор бы просто выкинул, потому что возвращённое функцией значение не используется.
  • Вам действительно нужен Redux?
    0
    Так, знаете, IO, например, в принципе не может быть чистым, значит, и Haskell весь «грязный»? (getLine, вызванная из кода с одними и теми же параметрами вернёт каждый раз разные значения).
  • Почему следует игнорировать истории основателей успешных стартапов
    0
    Вы утку с кликбейтом (заманухой) не путаете?
  • Вам действительно нужен Redux?
    0
    А когда количество ФП превысит 50%, вы продолжите так говорить? Можно тогда такой вопрос: а код на JS, по-вашему, вообще, в принципе — может быть функциональным несмотря на то, что язык поддерживает процедурное и объектно-ориентированное программирование?
  • Вам действительно нужен Redux?
    0
    Поддержка чистых функций делает C# (как и JS) мультипарадигменным языком
  • Вам действительно нужен Redux?
    0
    Ну, т.е., это документированное поведение, позволяющее подключать туда произвольный код, в т.ч. асинхронный бизнес-код, без привлечения доп. фреймворков ;)
    It’s up to you to return an object that somehow uses dispatch to bind action creators in your own way
    Т.е., «это уже ваше дело будет вернуть объект, который сможет как угодно использовать dispatch, и прибайндить туда action creator'ы так, как вам удобнее».
  • Вам действительно нужен Redux?
    0
    Чистых опционально чистых action generator'ов action-list generator'ов.
  • Вам действительно нужен Redux?
    0
    А редьюсеры — чистые функции, это не указывает на функциональный стиль? Т.е., Редакс использует смешанный стиль.
  • Вам действительно нужен Redux?
    0
    Мы ведь типа в mapDispatchToStore должны список actionCreator-ов передать.
    Имеете в виду mapDispatchToProps? Нет, не так. В доках пишут, что мы должны передать туда не список actionCreator'ов, а функцию, которая принимает dispatch и возвращает список функций, которые будут вызывать actionCreator'ы и этот переданный ей dispatch.
    Скриншот из доков Redux
  • Вам действительно нужен Redux?
    0
    Пойду писать публиковать свой фреймворк для чистых асинхронных action generator'ов в качестве бизнес-логики.
  • Вам действительно нужен Redux?
    0
    А то, что при этом это работает в обход redux-а, не принципиальный момент? То что вызвав store.dispatch(asyncAction()) у вас приложение упадёт с ошибкой (т.к. это вообще не action) — это разве мелочь?
    Вы путаете. Эта функция — не action creator, поэтому её возвращаемое значение и нельзя задиспатчить — она не возвращает action.
    Но асинхронным action-ом это, конечно, не станет.
    Я, вообще-то, именно про это и писал — мол, зачем создавать какие-то асинхронные action'ы, если можно просто вызывать dispatch обычных action'ов в асинхронном коде?
  • Вам действительно нужен Redux?
    0
    если вы вызываете грязную функцию фреймворка, то это ВЫ вызываете грязную функцию фрейворка, используете сайд-эффекты и все такое.
    Я и использую. Но грязным в итоге получается только Реакт-компонент — больше у меня никто не вызывает грязный код.
  • Вам действительно нужен Redux?
    0
    Грязный код он как инфекция. Всё что к нему прикасается — становится грязным.
    Но, скажем, интерпретатор Хаскеля — не чистый. Разве это делает весь код на Хаскеле грязным?
    это когда сам грязный код вызывает чистый код
    Разве это не мой случай? У меня функции будут чистыми, а вызывать их будет фреймворк.
  • Вам действительно нужен Redux?
    0
    Так Реакт в принципе «нечистый», код компонента вообще нельзя сделать чистым. Я предложил просто способ писать больше чистых функций в интеграции Редукса. Т.е., плюс тут в «ещё один файл теперь состоит только из чистых функций».
  • Вам действительно нужен Redux?
    0
    Так я с этим и не спорю. this.props.onTodoClick — будет грязная функция. Но она не моя, её фреймворк создал. Я же про это и говорю, что фреймворк сам — не чистый, но писать только грязные функции он не заставляет. Вроде же был же уже консенсус что редьюсеры — чистые функции? Несмотря на то, что во фреймворке они используются чтобы менять глобальное состояние. Я просто предложил способ как такими же чистыми функциями можно писать и код, создающий экшны.
  • Вам действительно нужен Redux?
    0
    Это не аргумент. Вот по-моему — у вас, и что?
    Я говорю, что чисто грязную функцию можно разделить на чистую и грязную части, тогда грязную часть (которая будет одинаковая для всех таких функций) можно будет вынести в отдельное место (во фреймворк) и тогда грязный код будет только во фреймворке.
  • Вам действительно нужен Redux?
    –1
    Мы же рассматриваем вариант, что myMapDispatchToProps() — часть фреймворка, верно? Тгда this.props.onTodoClick — это именно фреймворковский код, а мой — то, что он внутри себя вызывает.
  • Вам действительно нужен Redux?
    –2
    Ну, и чего минус? Я устал уже — тысячу раз говорю, что предлагал (аналогия) заменить использование грязной посуды на использование чистой, которую потом запачкать, и тысячу раз мне одно и то же в ответ — «как же это вы предлагаете использовать чистую посуду, если вот она у вас пачкается». Как будто я сам не то же самое с самого начала и пишу.
  • Вам действительно нужен Redux?
    –1
    Вы так пишете, будто это что-то сложное и нестандартное, а не просто добавить 1 слово (async) в стандартное приложение на react-redux.
  • Вам действительно нужен Redux?
    0
    Поменялся мой код — он весь чистый. mayorovp выше приводил пример интерпретатора Хаскеля — рантайм-то нечистый, но язык вполне себе функциональный. Так и тут — весь мой код будет чистым.
    Вообще, не понял, чего вы ждали — я это и обещал, что все «нечистые» штуки будут вынесены во фреймворк. Никуда из приложения они, разумеется, не пропадут, просто будут частью инфраструктуры (как рантайм у Хаскеля), а не бизнес-кода.