использовать setTimeout с фиксированным таймаутом?
А с не фиксированным можно? (Если что - я не знаю что такое нефиксированный тайм-аут)
А для чего в этой функции будет использован setTimeout?
Часто замечаю что применение разных подходов и паттерном скатывается в догматизм. Вот в этом случае мне кажется то же самое. Если надо вызвать и ты видишь, что лучше это не сделать, то вызывай
Тут суть в том, что бы разобраться в понятии..
Вот, подходящее слово - догма. Не вижу причин придавать такое значение в данном вопросе.
А что изменится если окажется что она не чистая или наоборот чистая? Ты от этого не будешь ей пользоваться? А что возьмёшь взамен?
Разобраться в понятии чистой функции?
Та блин)) говорю же суть в том, что просто докапаться и разобраться в понятии..
Ну да. Вот в частности, про сет таймаут вопрос
Да я понимаю. Просто интересны последствия. Это уже какой-то излишний формализм в данном вопросе. Чистота функции важна для удобства тестирования/поддержки/использования и т.д. Когда это не повлияет ни на что, как в данном примере, нет смысла формализовать настолько точно.
Ну нужно понимать суть. Вот как ты думаешь, консоль лог, портит чистоту функции или нет?
Ну если считать вывод на консоль побочным эффектом то это не будет чистой функцией. 😜
Да, и тут это можно объяснить как то. Я это себе объясняю так, что в процессе выполнения консоль лога может произойти ошибка и мы это не можем контролировать, поэтому она портит частоту А сет таймаут и консоль лог, это же не часть JavaScript, да? Вот сейчас пришла мысль.. а может консоль лог и сет таймаут нельзя юзать потому что это не часть языка, а просто типо функции сторонние и мы не можем их контролировать?
Да ты как программист в данном вопросе не должен думать является ли функция частью движка V8 или нет. Иначе дальше тебе придётся пойти на уровень ОС, потом памяти (а там байтики могут/будут меняться) и процессора с регистрами (ты изменил глобальное состояние машины!). На уровне кода функция будет чистой. Думаю этого достаточно будет. Так как ты не можешь влиять на очередь тасков в евентлупе, к примеру.
да, console.log это изменение внешнего состояния - в случае браузера вывод в консоль браузера, в случае ноды - выводи в консоль ноды
Суть чистых функций в том, что они не делаю сайд эффектов т.е. после того как функция отработала и вернула результат, ты можешь быть полностью уверен что никаких изменений состояния глобальных объектов не будет На мой взгляд, setTimeout некоторых случаях может быть использован не нарушая чистоты функции, а в некоторых случаях нарушая 1. Если ты будешь дожидаться результата вызова setTimeout (через промис или колбек), то это не нарушает чистоту т.к. после того как функция отработает и вернёт результат ты можешь сказать, что никаких side эффектов нет и весь код связанный с твоей функций отработал 2. А если твоя функция сделает вызов setTimeout и не даст тебе возможность дождаться исполнения, то после выполнения твоей функции останется сайд эффект т.е. в очереди еще будет лежать запланированный через setTiemout колбек который еще должен будет исполнится и выполнение которой ты уже никак не проконтролируешь
Так что можно использовать, но останется при этом функция чистой зависит от того, как ты использовал setTimeout
по поводу первого пункта не согласен. Функция может отработать, а потом через 10 сек вызовется колбек из settimeout и в колбеке может вылететь ошибка, тогда приложение может рухнуть..
Ну так ты обрабатывай ошибки и всё окей. В чистых функция не может быть ошибок разве?
не, тут что-то не то) В обычных тоже могут быть ошибки. Но функция либо выполнилась, либо нет. А тут вроде выполнилась, а потом вылетает ошибка..
Обсуждают сегодня