170 похожих чатов

Ребята, кто может раскрыть вопрос, почему в чистой функции нельзя

использовать setTimeout с фиксированным таймаутом?

20 ответов

28 просмотров

А с не фиксированным можно? (Если что - я не знаю что такое нефиксированный тайм-аут)

А для чего в этой функции будет использован setTimeout?

Часто замечаю что применение разных подходов и паттерном скатывается в догматизм. Вот в этом случае мне кажется то же самое. Если надо вызвать и ты видишь, что лучше это не сделать, то вызывай

Михаил-Ковальчук Автор вопроса

Тут суть в том, что бы разобраться в понятии..

Вот, подходящее слово - догма. Не вижу причин придавать такое значение в данном вопросе.

А что изменится если окажется что она не чистая или наоборот чистая? Ты от этого не будешь ей пользоваться? А что возьмёшь взамен?

Разобраться в понятии чистой функции?

Михаил-Ковальчук Автор вопроса

Та блин)) говорю же суть в том, что просто докапаться и разобраться в понятии..

Михаил-Ковальчук Автор вопроса

Ну да. Вот в частности, про сет таймаут вопрос

Да я понимаю. Просто интересны последствия. Это уже какой-то излишний формализм в данном вопросе. Чистота функции важна для удобства тестирования/поддержки/использования и т.д. Когда это не повлияет ни на что, как в данном примере, нет смысла формализовать настолько точно.

Михаил-Ковальчук Автор вопроса

Ну нужно понимать суть. Вот как ты думаешь, консоль лог, портит чистоту функции или нет?

Ну если считать вывод на консоль побочным эффектом то это не будет чистой функцией. 😜

Михаил-Ковальчук Автор вопроса

Да, и тут это можно объяснить как то. Я это себе объясняю так, что в процессе выполнения консоль лога может произойти ошибка и мы это не можем контролировать, поэтому она портит частоту А сет таймаут и консоль лог, это же не часть JavaScript, да? Вот сейчас пришла мысль.. а может консоль лог и сет таймаут нельзя юзать потому что это не часть языка, а просто типо функции сторонние и мы не можем их контролировать?

Да ты как программист в данном вопросе не должен думать является ли функция частью движка V8 или нет. Иначе дальше тебе придётся пойти на уровень ОС, потом памяти (а там байтики могут/будут меняться) и процессора с регистрами (ты изменил глобальное состояние машины!). На уровне кода функция будет чистой. Думаю этого достаточно будет. Так как ты не можешь влиять на очередь тасков в евентлупе, к примеру.

да, console.log это изменение внешнего состояния - в случае браузера вывод в консоль браузера, в случае ноды - выводи в консоль ноды

Суть чистых функций в том, что они не делаю сайд эффектов т.е. после того как функция отработала и вернула результат, ты можешь быть полностью уверен что никаких изменений состояния глобальных объектов не будет На мой взгляд, setTimeout некоторых случаях может быть использован не нарушая чистоты функции, а в некоторых случаях нарушая 1. Если ты будешь дожидаться результата вызова setTimeout (через промис или колбек), то это не нарушает чистоту т.к. после того как функция отработает и вернёт результат ты можешь сказать, что никаких side эффектов нет и весь код связанный с твоей функций отработал 2. А если твоя функция сделает вызов setTimeout и не даст тебе возможность дождаться исполнения, то после выполнения твоей функции останется сайд эффект т.е. в очереди еще будет лежать запланированный через setTiemout колбек который еще должен будет исполнится и выполнение которой ты уже никак не проконтролируешь

Так что можно использовать, но останется при этом функция чистой зависит от того, как ты использовал setTimeout

Михаил-Ковальчук Автор вопроса

по поводу первого пункта не согласен. Функция может отработать, а потом через 10 сек вызовется колбек из settimeout и в колбеке может вылететь ошибка, тогда приложение может рухнуть..

Ну так ты обрабатывай ошибки и всё окей. В чистых функция не может быть ошибок разве?

Михаил-Ковальчук Автор вопроса

не, тут что-то не то) В обычных тоже могут быть ошибки. Но функция либо выполнилась, либо нет. А тут вроде выполнилась, а потом вылетает ошибка..

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта