LINUX.ORG.RU

История изменений

Исправление 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), получить изображение с рендера, проверить пиксели.