Я думаю, что это абсолютно правильно использовать утверждения в Ruby. Но вы упоминали две разные вещи:
- Основы xUnit используют
assert
методы проверки ваших ожиданий тестов. Они предназначены для использования в вашем тестовом коде, а не в вашем коде приложения.
- Некоторые языки, такие как C, Java или Python, включают в себя конструкцию
assert
, предназначенную для использования внутри кода ваших программ, для проверки допущений, которые вы делаете о своей целостности. Эти проверки встроены внутри самого кода. Это не утилита для тестирования, а время разработки.
Я недавно писал solid_assert: a little Ruby library implementing a Ruby assertion utility а также a post in my blog explaining its motivation .. Это позволит вам записывать выражения в виде:
assert some_string != "some value"
assert clients.empty?, "Isn't the clients list empty?"
invariant "Lists with different sizes?" do
one_variable = calculate_some_value
other_variable = calculate_some_other_value
one_variable > other_variable
end
И они могут быть выключены так assert
и invariant
получить оценку в виде пустых заявлений. Это позволит избежать проблем с производительностью при производстве. Но обратите внимание, что The Pragmatic Programmers рекомендуют не деактивировать их. Вы должны отключать их только в том случае, если они действительно влияют на производительность.
Относительно ответа, говорящего, что идиоматический рубиновый способ использует нормальное заявление raise
, я думаю, что ему не хватает выразительности. Одним из золотых правил настойчивого программирования не является использование утверждений для нормальной обработки исключений. Это две совершенно разные вещи. Если вы используете один и тот же синтаксис для двух из них, я думаю, что код будет более неясным. И, конечно же, вы теряете способность деактивировать их.
Вы можете быть уверены, что использование утверждений - это хорошо, потому что две обязательные для чтения классические книги, такие как The Pragmatic Programmer From Journeyman to Master и Code Complete, посвящают им все разделы и рекомендуют использовать их. Существует также хорошая статья под названием Programming with assertions, которая очень хорошо иллюстрирует, что такое напористое программирование и когда его использовать (оно основано на Java, но концепции применимы к любому языку).
Мне нравятся проблемы, которые делают и то, и другое: научите вас и сделайте что-нибудь. :) – 2008-09-29 14:35:02