Читать в оригинале

<< ПредыдущаяОглавлениеСледующая >>


6.3. Функции с побочным эффектом

Функция называется функцией с побочным эффектом, если помимо результата, вычисляемого функцией и возвращаемого ей в операторе return, она имеет выходные аргументы с ключевыми словами ref и out. Хороший стиль объектно-ориентированного программирования не рекомендует использование таких функций. Выражения, использующие функции с побочным эффектом, могут потерять свойства, присущие им в математике. Если f(a) - функция с побочным эффектом, то a + f(a) может быть не равно f(a) + a.

Примером такой функции является функция f, приведенная выше (см. стр. 86). Вот тест, демонстрирующий потерю коммутативности сложения при работе с этой функцией:

/// <summary>
/// тестирование побочного эффекта
/// </summary>
public void TestSideEffect() {
int a = 0, b = 0, c = 0;
a = 1;
b = a + f(ref a);
a = 1;
c = f(ref a) + a;
Console.WriteLine("a={0}, b={1}, c={2}", a, b, c);
}

На рис. 20 показаны результаты работы этого метода

Рисунок 20. Демонстрация вызова функции с побочным эффектом

Обратите внимание на полезность указания ключевого слова ref в момент вызова. Его появление хоть как-то оправдывает некоммутативность сложения.

 



<< ПредыдущаяОглавлениеСледующая >>