История изменений
Исправление MOPKOBKA, (текущая версия) :
И ещё содержании объекта, куда оно рисует, например, дисплея. И нет гарантии, что она ещё куда-то не пишет.
Ну это больше к IO вообще, плохой я пример функции дал. Ну даже если так, просто нету возможности перестановки вызовов clear, draw, present, уможение матриц в Haskell работает так же.
Чистая функция позволяет гарантировать, что всё, что она делает, это возвращает некий результат.
Я понимаю что такое чистая функция, я не вижу принципиальной разницы. Вот ты говоришь что она зависит только от своего входа, я выше уже писал, что в императивном языке, ко входу автоматически добавляются например глобальные переменные которые она использует, если такие есть.
И как будто IDE достаточно в таком случае, она просто добавит текстом поверх дополнительные аргументы которые извне получаются.
Это очень упрощает тестирование. Не требуется перед тестом запускать кучу других функций, а после теста искать, как проверить что функция сделала, что ожидалось.
Ну если мы делаем игру на Haskell, и хотим сделать функцию-обработчик, которая обрабатывает попадание в монстра другим монстром, что бы он отвечал на это как в DOOM, но игра у нас сложнее. В функцию придется передать огромный state который руками без других функций не опишешь просто, и различные типы монстров, и их классы, и видно ли монстру монстра, итд.
Сразу включается сюда загрузка данных, много сторонних функций, итд.
Очень схожая у меня проблема с REPL, я поменял что то в монстре, и мне уже нужно перезапустить все, иначе мир в неконсистентном состоянии, поменять можно только какие то совсем простые функции типа sin, и то, если их результат нигде никто не сохранял.
Вот как тест для SDL_RenderClear написать?
Не занимался этим, первое что пришло в голову: Нарисовать белый фон, очистить (SDL_RenderClear), получить изображение с рендера, проверить пиксели.
Исправление MOPKOBKA, :
И ещё содержании объекта, куда оно рисует, например, дисплея. И нет гарантии, что она ещё куда-то не пишет.
Ну это больше к IO вообще, плохой я пример функции дал. Ну даже если так, просто нету возможности перестановки вызовов clear, draw, present, уможение матриц в Haskell работает так же.
Чистая функция позволяет гарантировать, что всё, что она делает, это возвращает некий результат.
Я понимаю что такое чистая функция, я не вижу принципиальной разницы. Вот ты говоришь что она зависит только от своего входа, я выше уже писал, что в императивном языке, ко входу автоматически добавляются например глобальные переменные которые она использует, если такие есть.
И как будто IDE достаточно в таком случае, она просто добавит текстом поверх дополнительные аргументы которые извне получаются.
Это очень упрощает тестирование. Не требуется перед тестом запускать кучу других функций, а после теста искать, как проверить что функция сделала, что ожидалось.
Ну если мы делаем игру на Haskell, и хотим сделать функцию-обработчик, которая обрабатывает попадание в монстра другим монстром, что бы он отвечал на это как в DOOM, но игра у нас сложнее. В функцию придется передать огромный state который руками без других функций не опишешь просто, и различные типы монстров, и их классы, и видно ли монстру монстра, итд.
Сразу включается сюда загрузка данных, много сторонних функций, итд.
Очень схожая у меня проблема с REPL, я поменял что то в монстре, и мне уже нужно перезапустить все, иначе мир в неконсистентном состоянии, поменять можно только какие то совсем простые функции типа sin.
Вот как тест для SDL_RenderClear написать?
Не занимался этим, первое что пришло в голову: Нарисовать белый фон, очистить (SDL_RenderClear), получить изображение с рендера, проверить пиксели.
Исправление MOPKOBKA, :
И ещё содержании объекта, куда оно рисует, например, дисплея. И нет гарантии, что она ещё куда-то не пишет.
Ну это больше к IO вообще, плохой я пример функции дал. Ну даже если так, просто нету возможности перестановки вызовов clear, draw, present, уможение матриц в Haskell работает так же.
Чистая функция позволяет гарантировать, что всё, что она делает, это возвращает некий результат.
Я понимаю что такое чистая функция, я не вижу принципиальной разницы. Вот ты говоришь что она зависит только от своего входа, я выше уже писал, что в императивном языке, ко входу автоматически добавляются например глобальные переменные которые она использует, если такие есть.
Это очень упрощает тестирование. Не требуется перед тестом запускать кучу других функций, а после теста искать, как проверить что функция сделала, что ожидалось.
Ну если мы делаем игру на Haskell, и хотим сделать функцию-обработчик, которая обрабатывает попадание в монстра другим монстром, что бы он отвечал на это как в DOOM, но игра у нас сложнее. В функцию придется передать огромный state который руками без других функций не опишешь просто, и различные типы монстров, и их классы, и видно ли монстру монстра, итд.
Сразу включается сюда загрузка данных, много сторонних функций, итд.
Очень схожая у меня проблема с REPL, я поменял что то в монстре, и мне уже нужно перезапустить все, иначе мир в неконсистентном состоянии, поменять можно только какие то совсем простые функции типа sin.
Вот как тест для SDL_RenderClear написать?
Не занимался этим, первое что пришло в голову: Нарисовать белый фон, очистить (SDL_RenderClear), получить изображение с рендера, проверить пиксели.
Исходная версия MOPKOBKA, :
И ещё содержании объекта, куда оно рисует, например, дисплея. И нет гарантии, что она ещё куда-то не пишет.
Ну это больше к IO вообще, плохой я пример функции дал. Ну даже если так, просто нету возможности перестановки вызовов clear, draw, present, уможение матриц в Haskell работает так же.
Чистая функция позволяет гарантировать, что всё, что она делает, это возвращает некий результат.
Я понимаю что такое чистая функция, я не вижу принципиальной разницы. Вот ты говоришь что она зависит только от своего входа, я выше уже писал, что в императивном языке, ко входу автоматически добавляются например глобальные переменные которые она использует, если такие есть.
Это очень упрощает тестирование. Не требуется перед тестом запускать кучу других функций, а после теста искать, как проверить что функция сделала, что ожидалось.
Ну если мы делаем игру на Haskell, и хотим сделать функцию-обработчик, которая обрабатывает попадание в монстра другим монстром, что бы он отвечал на это как в DOOM, но игра у нас сложнее. В функцию придется передать огромный state который руками без других функций не опишешь просто, и различные типы монстров, и их классы, и видно ли монстру монстра, итд.
Очень схожая у меня проблема с REPL, я поменял что то в монстре, и мне уже нужно перезапустить все, иначе мир в неконсистентном состоянии, поменять можно только какие то совсем простые функции типа sin.
Вот как тест для SDL_RenderClear написать?
Не занимался этим, первое что пришло в голову: Нарисовать белый фон, очистить (SDL_RenderClear), получить изображение с рендера, проверить пиксели.