==
сравнивает опорное значение объектов, тогда как equals()
метод присутствует в java.lang.String
класса сравнивает содержимое String
объекта (к другому объекту). Утверждает способ явной проверки предположений, что Ваш код делает, который помогает Вам разыскать много ошибок путем сужения, каковы возможные проблемы могли быть. Они обычно только оценены в специальной сборке "отладки" Вашего приложения, таким образом, они не замедлят версию финальной версии.
Скажем, Вы записали функцию, которая взяла указатель в качестве аргумента. Существует хороший шанс, что Ваш код предположит, что указатель является непустым, итак, почему не явно проверяют это с утверждением? Вот то, как:
#include <assert.h>
void function(int* pointer_arg)
{
assert(pointer_arg != NULL);
...
}
важная вещь отметить состоит в том, что выражения, которые Вы утверждаете, никогда не должны иметь побочных эффектов, так как они не будут присутствовать в сборке конечных версий. Поэтому никогда не делайте что-то вроде этого:
assert(a++ == 5);
Некоторым людям также нравится добавлять небольшие сообщения в их утверждения, чтобы помочь дать им значение. Так как строка всегда оценивает к истинному, Вы могли записать это:
assert((a == 5) && "a has the wrong value!!");
Утверждения используются для проверки предположений дизайна, обычно с точки зрения входных параметров и результатов возврата. Например
// Given customer and product details for a sale, generate an invoice
Invoice ProcessOrder(Customer Cust,Product Prod)
{
assert(IsValid(Cust));
assert(IsValid(Prod);
'
'
'
assert(IsValid(RetInvoice))
return(RetInvoice);
}
операторы контроля не требуются для кода работать, но они проверяют законность ввода и вывода. Если вход недопустим, в функции вызова существует ошибка. Если вход допустим, и вывод недопустим, в этом коде существует ошибка. См. , дизайн контракта для получения дополнительной информации этого использования утверждает.
Редактирование: Как указано в других сообщениях, реализация по умолчанию утверждает, не включен во время выполнения выпуска. Обычная практика, которую многие использовали бы, включая меня, должна заменить его версией, которую включают в сборку конечных версий, но только называют в режиме диагностики. Это включает надлежащее регрессионное тестирование на сборках конечных версий с полной проверкой утверждения. Моя версия следующим образом;
extern void _my_assert(void *, void *, unsigned);
#define myassert(exp) \
{ \
if (InDiagnostics) \
if ( !(exp) ) \
_my_assert(#exp, __FILE__, __LINE__); \
} \
существует маленькое время выполнения наверху в этой технике, но это делает отслеживание любых ошибок, которые превратили его в намного легче поле.
Используйте утверждения для проверки на, "не может произойти" ситуации.
Типичное использование: проверьте по недопустимым/невозможным аргументам во главе функции.
Редко замечаемый, но все еще полезный: инварианты цикла и постусловия.
Утверждение - что-то, что Вы добавляете к своей программе, которая заставляет программу сразу остановиться, если условие соблюдают, и отобразите сообщение об ошибке. Вы обычно используете их для вещей, которым Вы верите, никогда не может происходить в Вашем коде.
<p:tabs>
, который принимает набор вместо <ui:repeat><p:tab>
. Я полагаю, что это когда-либо отправлялось как запрос новых функций на PrimeFaces, не уверенный, что Cagatay сделал с ним.
– BalusC
4 April 2011 в 18:07
Это не обращается эти , утверждают средство, которое свелось к нам с ранних дней C, но необходимо также знать функциональность StaticAssert Повышения, если проекты могут использовать Повышение.
стандартный C/C++ утверждают работы во время времени выполнения. Повышение средство StaticAssert позволяет Вам сделать некоторые классы утверждений во время компиляции, фиксируя логические ошибки и т.п. еще ранее.
Вот определение того, что утверждение, и здесь некоторый пример кода. Вкратце утверждение является способом для разработчика протестировать его (или ее) предположения о состоянии кода в любой данной точке. Например, если Вы делали следующий код:
mypointer->myfunct();
Вы, вероятно, хотите утверждать, что mypointer не является ПУСТЫМ, потому что это - Ваше предположение - что mypointer никогда не будет ПУСТЫМ перед вызовом.
rendered
атрибут? См. также stackoverflow.com/a/4870557 и stackoverflow.com/a/15947948 . С другой стороны, просто обновите до Mojarra 2.1.18 или более новый. It' s зафиксированный с тех пор.
– BalusC
15 May 2013 в 13:59
Утверждения являются операторами, разрешающими Вам протестировать любые предположения, которые Вы могли бы иметь в своей программе. Это особенно полезно для документирования логики программы (предварительные условия и постусловия). Утверждения, которые обычно приводят к сбою ошибки периода выполнения броска и знаки, что что-то ОЧЕНЬ неправильно с Вашей программой - Ваше утверждение, отказавшее, потому что что-то Вы приняли, чтобы быть верными, не были. Обычные причины: в логике Вашей функции существует дефект, или вызывающая сторона Вашей функции передала Вас неправильные данные.
Утверждение является булевыми выражениями, которые должны обычно всегда быть верными.
Они используются для обеспечения то, что Вы ожидали, также, что происходит.
void some_function(int age)
{
assert(age > 0);
}
Вы записали функцию для контакта с возрастами, Вы также 'знаете' наверняка, что Вы всегда передаете разумные аргументы, тогда Вы используете утверждение. Это похоже на высказывание, "Я знаю, что это никогда не может идти не так, как надо, но если это делает, я хочу знать", потому что, ну, в общем, все делают ошибки.
, Таким образом, это не должно проверять на разумный ввод данных пользователем, если существует сценарий, где что-то может пойти не так, как надо, не используйте утверждение. Сделайте реальные проверки и соглашение с ошибками.
Утверждает, обычно только для сборок отладки, не помещайте код с побочными эффектами в, утверждает.
<sys:Int32 x:Key="SpanAll">2147483647</sys:Int32>
иGrid.RowSpan="{StaticResource SpanAll}"
, чтобы заставить других людей понять what' s продолжение:) – Fredrik Hedblad 12 January 2011 в 00:01