, C++ основан на RAII.
, Если у Вас есть код, который мог бы перестать работать, возвратите или бросьте (то есть, самый нормальный код), затем необходимо перенести указатель в интеллектуальном указателе (предполагающий, что Вы имеете очень хороший причина не создать Ваш объект на стеке).
, Они являются подробными, и имеют тенденцию разрабатывать во что-то как:
if(doSomething())
{
if(doSomethingElse())
{
if(doSomethingElseAgain())
{
// etc.
}
else
{
// react to failure of doSomethingElseAgain
}
}
else
{
// react to failure of doSomethingElse
}
}
else
{
// react to failure of doSomething
}
В конце, Вы кодируете, набор idented инструкций (я видел этот вид кода в производственном коде).
Этот код мог быть переведен в:
try
{
doSomething() ;
doSomethingElse() ;
doSomethingElseAgain() ;
}
catch(const SomethingException & e)
{
// react to failure of doSomething
}
catch(const SomethingElseException & e)
{
// react to failure of doSomethingElse
}
catch(const SomethingElseAgainException & e)
{
// react to failure of doSomethingElseAgain
}
, Которые чисто разделяют код и ошибочную обработку, которая может быть хороша вещь.
Если не некоторое неясное предупреждение из одного компилятора (см. комментарий "phjr"), они могут легко быть проигнорированы.
С вышеупомянутыми примерами, примите, чем кто-то забывает обрабатывать его возможную ошибку (это происходит...). Ошибка проигнорирована при "возвращении" и возможном взрыве позже (т.е. Нулевой указатель). Той же проблемы не произойдет за исключением.
ошибка не будет проигнорирована. Иногда, Вы хотите, чтобы это не взорвалось, хотя... Таким образом, Вы должны, выбрал тщательно.
Скажем, у нас есть следующие функции:
, Каков тип возврата doTryToDoSomethingWithAllThisMess, если одна из его вызванных функций перестала работать?
, Операторы не могут возвратить код ошибки. Конструкторы C++ не могут, также.
заключение вышеупомянутой точки. Что, если я хочу записать:
CMyType o = add(a, multiply(b, c)) ;
я не могу, потому что возвращаемое значение уже используется (и иногда, оно не может быть изменено). Таким образом, возвращаемое значение становится первым параметром, отправленным как ссылка... Или нет.
, можно отправить различные классы за каждым видом исключения. Исключения Ressources (т.е. из памяти) должны быть легкими, но что-либо еще могло быть столь же тяжелым по мере необходимости (мне нравится Исключение Java, дающее мне целый стек).
Каждая выгода может затем быть специализирована.
Обычно, Вы не должны скрывать ошибку. Если Вы не повторно бросаете, по крайней мере, зарегистрируйте ошибку в файле, откройте messagebox, безотносительно...
проблема за исключением состоит в том, что злоупотребление их произведет код, полный попытки/выгод. Но проблема в другом месте: Кто пробует/ловит его код с помощью контейнера STL? Однако, те контейнеры могут отправить исключение.
, Конечно, в C++, никогда не позволяют исключению выйти из деструктора.
убедиться поймать их, прежде чем они произведут Ваш поток на его коленях или распространят в Вашем цикле сообщения Windows.
, Таким образом, я предполагаю, что решение состоит в том, чтобы бросить, когда что-то должно не , происходят. И когда что-то может произойти, затем используйте код возврата или параметр для включения пользователю для реакции на него.
Так, единственный вопрос, "что такое что-то, чего не должно происходить?"
Это зависит от контракта Вашей функции. Если функция принимает указатель, но указывает, что указатель должен быть непустым, то нормально выдавать исключение, когда пользователь отправляет Нулевого указателя (вопрос быть, в C++, когда не сделал функциональных ссылок использования автора вместо указателей, но...)
Иногда, Ваша проблема состоит в том, что Вы не хотите ошибок. Используя исключения или ошибку коды возврата прохладны, но... Вы хотите знать об этом.
В моем задании, мы используем своего рода "Утверждать". Это будет, в зависимости от значений конфигурационного файла, неважно, опции компиляции отладки/выпуска:
И в разработке и в тестировании, это позволяет пользователю точно определить проблему точно, когда это обнаруживается, и не после (когда некоторый код заботится о возвращаемом значении, или в выгоде).
легко добавить к унаследованному коду. Например:
void doSomething(CMyObject * p, int iRandomData)
{
// etc.
}
приводит своего рода код, подобный:
void doSomething(CMyObject * p, int iRandomData)
{
if(iRandomData < 32)
{
MY_RAISE_ERROR("Hey, iRandomData " << iRandomData << " is lesser than 32. Aborting processing") ;
return ;
}
if(p == NULL)
{
MY_RAISE_ERROR("Hey, p is NULL !\niRandomData is equal to " << iRandomData << ". Will throw.") ;
throw std::some_exception() ;
}
if(! p.is Ok())
{
MY_RAISE_ERROR("Hey, p is NOT Ok!\np is equal to " << p->toString() << ". Will try to continue anyway") ;
}
// etc.
}
(у меня есть подобные макросы, которые активны только на отладке).
Примечание, что на производстве, конфигурационный файл не существует, таким образом, клиент никогда не видит результат этого макроса... Но легко активировать его при необходимости.
при кодировании кодов возврата использования Вы готовитесь к отказу и надеетесь, что Ваша крепость тестов достаточно безопасна.
при кодировании исключения использования Вы знаете, что Ваш код может перестать работать, и обычно помещать противоогонь, ухватываются за выбранное стратегическое положение в Вашем коде. Но обычно, Ваш код больше о, "что он должен сделать" затем, "чего я боюсь, произойдет".
, Но когда Вы кодируете вообще, необходимо использовать лучший инструмент в Вашем распоряжении, и иногда, это, "Никогда не скрывают ошибку и показывают его как можно скорее". Макрос, который я говорил выше, следует за этой философией.
То, что вы хотите сделать, это либо:
$("input[id$='_txtSomeData1']").val().....
, либо вы можете добавить класс или настраиваемый атрибут в текстовое поле, которое вы можете выбрать на
Есть много селекторов, которые можно использовать ... возможно, вы хотите добавить класс.
Это большая жалоба сообщества на веб-формы ASP.Net. В ASP.Net 4.0 вы снова получаете контроль над своими идентификаторами, как если бы вы написали их в необработанном HTML. В качестве альтернативы, без .Net 4.0, вы могли бы использовать ASP.Net MVC, который по большей части не использует серверные элементы управления, поэтому у вас не будет проблем.
Но, как говорит хэппитайм, Гарри, добавление класса может Вы захотите, если вы работаете с веб-формами и jquery.
Java не предоставляет прямого способа запросить MAC-адрес хоста в вашей сети, поскольку он абстрагируется библиотеками сокетов Java.
В некотором смысле это имеет смысл, поскольку MAC-адрес хоста практически ничего не говорит. Не существует такого понятия, как «MAC-адрес хоста».
"$ (element) .children ('. MyClass'). Show ()"
, может быть хорошим способом сделать это без идентификаторов.
Btw , http://visualjquery.com/ - отличный способ просмотреть API-интерфейсы jQuery и т. Д.
Селекторы подстановочных знаков jQuery - это то, что вам может здесь не хватать.
, если javascript находится в том же файле .aspx, вы можете сделать:
$('<%= txtSomeData1.ClientID %>').val('Some More Data!!');
Если вы собираетесь перенести JavaScript в свой собственный. js вы застряли либо с жестким кодированием в id (наиболее эффективным), либо с селектором регулярных выражений, либо с использованием неэффективного селектора по имени класса.
Однако, если он находится в том же файле, что и элемент управления .NET, вы всегда можете использовать $ ('<% = txtSomeData1.ClientID%>')
Вы можете использовать нотацию элемента [id $ = Identifier], которая ищет идентификатор, заканчивающийся указанным вами текстом (это идентификатор, который вы указываете в разметке ASPX). Вот пример, показывающий, как вы можете его использовать (см. Слайд № 30): Создание приложений интрасети с помощью ASP.NET AJAX и jQuery .