Лекция: ИЗБАВЬТЕСЬ ОТ ПОБОЧНЫХ ЭФФЕКТОВ

Побочные эффекты суть ложь. Ваша функция обещает делать что-то одно, но де­лает что-то другое,скрытое от пользователя. Иногда она вносит неожиданные из­менения в переменные своего класса — скажем, присваивает им значения параме­тров, переданных функции, или глобальных переменных системы.

Для примера возьмем безвредную на первый взгляд функцию из листинга 3.6. Функция использует стандартный алгоритм для проверки пары «имя пользова­теля/пароль». Она возвращает true в случае совпадения или false при возник­новении проблем. Но у функции также имеется побочный эффект. Сможете ли вы обнаружить его?

Листинг 3.6. UserValidator.java

public class UserValidator {

private Cryptographer cryptographer;

public boolean checkPassword(String userName, String password)

{

User user = UserGateway.findByName(userName);

if (user != User.NULL) {

String codedPhrase = user.getPhraseEncodedByPasswordO;

String phrase = cryptographer.decrypt(codedPhrase. password);

if («Valid Password».equals(phrase)) {

Session.initialize();

return true;

}

}

return false;

}

}

Разумеется, побочным эффектом является вызов Session.initialize(). Имя checkPassword сообщает, что функция проверяет пароль. Оно ничего не говорит о том, что функция инициализирует сеанс. Таким образом, тот, кто поверит имени функции, рискует потерять текущие сеансовые данные, когда он решит проверить данные пользователя.

Побочный эффект создает временную привязку. А именно, функция checkPassword может вызываться только в определенные моменты времени (когда инициали­зация сеанса может быть выполнена безопасно). Несвоевременный вызов может привести к непреднамеренной потере сеансовых данных. Временные привязки создают массу проблем, особенно когда они прячутся в побочных эффектах. Если без временной привязки не обойтись, этот факт должен быть четко оговорен в имени функции. В нашем примере функцию можно было бы переименовать в checkPasswordAndlnitial izeSession, хотя это безусловно нарушает правило «одной операции».


 

7. Комментарии. Основные правила написания хороших комментариев. Комментарии TODO.

еще рефераты
Еще работы по информатике