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

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

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

20 ответов

10 просмотров

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

А чем вам питонисты не угодили?😂
.
79
Язык Си можно выучить за день? По книжке ANSI C на 230 страниц
Vincent Vegan
29
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
75
Dim Dim, [02.07.2024 11:07] DB 0x62 Dim Dim, [02.07.2024 11:07] DB 0x66 Dim Dim, [02.07.2024 11:07] кто пояснит что это?
Dim Dim
14
Ошибка: segmentation fault (core dumped) Код: pastebin.com/BEsNNSSV Сообщение от компилятора: отсутствует ОС: Arch Linux Ядро: x86_64 Linux 6.9.7-arch1-1 Процессор: Intel Cele...
sec
4
Ребят, а за скок можно впарить анон чат с апишкой и веб админкой ?
Eugene Неелов
15
Ещё такой вопрос. Мне необходимо хранить пароль пользователя локально. Для этого планирую использовать ini файл. Это для автозаполнения полей логин и пароль при авторизации. Е...
Евгений
19
Кстати, я тут еще с одной темой столкнулся, вот учу я C++, на таком то ресурсе, а остальные постоянно советуют практиковаться, что то писать, проекты, но как писать если вот т...
aaswq1
7
Добрый день, чат. Мне в очередь из других RabbitMQ по shovel валятся метрики в формате текста для Prometheus. Помогите пожалуйста подружить RabbitMQ и Prometheus, чтобы он (...
Aleksey
4
Коллеги, как получить PId для собственного процесса из под линукса?
Роман Лях (rgreat)
6
Карта сайта