Введение |
Массивы, строки и структуры |
Операторы |
Операции |
Переменные и типы |
Пояснения к курсовой работе |
Препроцессор |
Работа с файлами |
Стандарты безопасного кодирования |
Функции и модули |
Ввод-вывод |
Побочным эффектом функции называется изменение и использование для вычислений глобальных переменных, выполнение ввода-вывода. Потенциально такая функция является недетерминированной, т.е. при вызове с совпадающими значения аргументов мы можем получить разные результаты. Такой эффект может получиться также из-за ошибки в программе, которая приводит к UB. Функция rand()
, возвращающая случайное число, является очевидным примером недетерминированной функции. Функция move
из примера выше также является недерминированной, так как на нее влияют значения глобальных переменных dx и dy.
Чистые функции являются детерминированными и не имеют побочных эффектов, то есть при вычислениях используют только значения, переданные в качестве аргументов, и не могут вводить и выводить. Детерминированными являются все функции в математике.
С одной стороны, использование чистых функций повышает надежность программы и возможность использования такой функции в других программах, с другой стороны, длинные списки аргументов затрудняют понимание программы, снижают её эффективность (на передачу каждого значения тратится время), поэтому нужно выбрать некоторый компромисс. С точки зрения объектно-ориентированного программирования всю программу можно рассматривать как некоторый объект, глобальные переменные – это поля этой структуры, а функции – это функции-элементы этой структуры, т.е. все глобальные переменные являются скрытыми параметрами любой функции, также в параметры можно включить вводимые данные, а вывод – в результаты функции. Рассматривая проблему чистоты функции с этой точки зрения, все функции, не имеющие ошибок, будут детерминированы и не будут иметь побочных эффектов.
Поэтому нужно указывать в качестве параметров только те значения, которые меняются в разных вызовах этой функции.