Чистые методы в классах c ++ / c #

Итак, я верю, что понимаю чистые функции. Что-то похожее на abs или sqrt, где вывод зависит от ввода и не имеет побочных эффектов. Однако я не совсем понимаю, как это работает с методами.

Если мы рассмотрим метод как функцию с неявным этим параметром, то я бы предположил, что такой метод, как приведенный ниже, действительно будет чистым.

class Foo
{
int x;

[Pure] public int Bar() { return x * 2; }
}

Это правильное предположение, что функция чистая? Будет ли иметь значение, если переменная чтения была только для чтения / const?

0

Решение

Функция считается чистой, когда:

Функция всегда оценивает одно и то же значение результата, учитывая одно и то же значение аргумента. Значение результата функции не может зависеть от
скрытая информация или состояние, которые могут измениться во время выполнения программы
продолжается или между разными исполнениями программы …

От Википедия

Bar не чисто, потому что это зависит от переменной x, Итак, результат Bar() будет отличаться в разных случаях, если значение x изменения.

Представьте себе что-то вроде этого:

var obj = new Foo();
obj.x = 1;
obj.Bar(); // Returns 2.
obj.x = 5;
obj.Bar(); // Returns 10.

Тогда как, если x были постоянными / только для чтения, это было бы все еще чисто, потому что, результаты Bar() никогда не изменится.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]