У меня есть постусловие, которое я хочу регулярно проверять многими методами. Я почти уверен, что правильно использую assert < / a>, т.е. проверяю только что-то, чтобы убедиться, что мой код не делает ничего глупого, и я намерен через некоторое время отключить утверждения. Но я не уверен, что постусловие в том виде, в каком я его написал сейчас, - это именно то условие, которое мне всегда нужно. Я вложил это в метод. Но потом я столкнулся со следующей проблемой:
public class Foo
{
public void doSomethingRisky()
{
//...
assert someBoolean();
}
private boolean someBoolean()
{
return bar && baz;
}
}
vs.
public class Foo
{
public void doSomethingRisky()
{
//...
verifySomeBoolean();
}
private void verifySomeBoolean()
{
assert bar && baz;
}
}
Я знаю, что если я компилирую с отключенными утверждениями, предыдущий код не будет иметь проблем с производительностью, поскольку someBoolean()
никогда не будет вызван. Но достаточно ли «умен» Java, чтобы при отключенных утверждениях вторая форма также не имела снижения производительности при отключенных утверждениях?
И, очевидно, более важный вопрос: какая практика лучше?
Мне нравится assert someBoolean()
, потому что он явный, не подлежит повторной или неправильной интерпретации, но кажется, что другая форма может быть немного более надежным в будущем, потому что, возможно, я захочу расширить поведение verifySomeBoolean()
, чтобы сделать что-то помимо утверждения такое же базовое логическое значение. Хотя мое чутье говорит, что если бы это было так, мне лучше перекодировать, чем пытаться подогнать старый код. Будем очень признательны за любые слова мудрых.