Итак, я верю, что понимаю чистые функции. Что-то похожее на abs или sqrt, где вывод зависит от ввода и не имеет побочных эффектов. Однако я не совсем понимаю, как это работает с методами.
Если мы рассмотрим метод как функцию с неявным этим параметром, то я бы предположил, что такой метод, как приведенный ниже, действительно будет чистым.
class Foo
{
int x;
[Pure] public int Bar() { return x * 2; }
}
Это правильное предположение, что функция чистая? Будет ли иметь значение, если переменная чтения была только для чтения / const?
Функция считается чистой, когда:
Функция всегда оценивает одно и то же значение результата, учитывая одно и то же значение аргумента. Значение результата функции не может зависеть от
скрытая информация или состояние, которые могут измениться во время выполнения программы
продолжается или между разными исполнениями программы …От Википедия
Bar
не чисто, потому что это зависит от переменной x
, Итак, результат Bar()
будет отличаться в разных случаях, если значение x
изменения.
Представьте себе что-то вроде этого:
var obj = new Foo();
obj.x = 1;
obj.Bar(); // Returns 2.
obj.x = 5;
obj.Bar(); // Returns 10.
Тогда как, если x
были постоянными / только для чтения, это было бы все еще чисто, потому что, результаты Bar()
никогда не изменится.
Других решений пока нет …