Информация об изменениях

Сообщение Re[34]: Haskell нужен! (в Standard Chartered Bank) от 05.02.2015 17:43

Изменено 05.02.2015 17:44 Evgeny.Panasyuk

Здравствуйте, Mamut, Вы писали:

J>>Без типов — придется просматривать руками все вызовы change_amount по всему проекту и пытаться понять, где у нас processed, где не processed, а где рыбу заворачивали.

M>Что мешает вставить ровно одну проверку на is_processed собственно в change_amount? Тем более, что везде, где «заворачивали рыбу» известно, что смена суммы может и не пройти.

Так ты определись какие у preconditions у change_amount.
Если необходимость is_processed == true входит в предусловия, то любое его нарушение это баг в программе. Если такой баг обнаружен runtime check'ом, то нужно клеить ласты ASAP.
Отражение состояния processed в типе, позволит гарантировать отсутствие такого бага в работающей программе. В то время как если проверка происходит в runtime, то даже 100% покрытие строк кода unit-тестами не даст такую гарантию (в более менее сложной программе).
Если же такого предусловия нет, и есть постусловие вида "может изменить, а может и нет" — то непонятно зачем сюда пытаться впихнуть статические проверки.
Re[34]: Haskell нужен! (в Standard Chartered Bank)
Здравствуйте, Mamut, Вы писали:

J>>Без типов — придется просматривать руками все вызовы change_amount по всему проекту и пытаться понять, где у нас processed, где не processed, а где рыбу заворачивали.

M>Что мешает вставить ровно одну проверку на is_processed собственно в change_amount? Тем более, что везде, где «заворачивали рыбу» известно, что смена суммы может и не пройти.

Так ты определись какие preconditions у change_amount.
Если необходимость is_processed == true входит в предусловия, то любое его нарушение это баг в программе. Если такой баг обнаружен runtime check'ом, то нужно клеить ласты ASAP.
Отражение состояния processed в типе, позволит гарантировать отсутствие такого бага в работающей программе. В то время как если проверка происходит в runtime, то даже 100% покрытие строк кода unit-тестами не даст такую гарантию (в более менее сложной программе).
Если же такого предусловия нет, и есть постусловие вида "может изменить, а может и нет" — то непонятно зачем сюда пытаться впихнуть статические проверки.