четверг, апреля 15

логические ошибки

"Слепо" доверять интеллектуальным подсказчикам IDE - зло!

простой пример появления логической ошибки:


пишем код:
if (cookies.length != 0) {
    for (int i = 0; i < cookies.length; i++) {
     isAuth = isAuth || cookies[i].getName().equalsIgnoreCase(paramCooikeAuth);
     break;
    }
   }
логическая ошибка - наличие break без условия прерывания. IDE (в данном случае, Eclipse) предлагает удалить "i++", как не требующуюся в цикле (всё равно не будет использована). "Слепо" соглашаемся Чуть позже замечаем ошибку про break и добавляем условие:
if (cookies.length != 0) {
    for (int i = 0; i < cookies.length;) {
     isAuth = isAuth || cookies[i].getName().equalsIgnoreCase(paramCooikeAuth);
     if (isAuth) break;
    }
   }
Но следом получаем вечный цикл for, так как отсутствует счетчик, удалённый ранее! Следствие: прежде чем согласиться на то, что предлагает IDE - подумайте, ПОЧЕМУ он это предлагает, ведь может так оказаться, что ошибка-то совсем не в том месте, где её "видит" IDE! UPD: в конечном итоге код всё равно сократился до (см. ниже), но как говориться, "осадок остался" :)
if (cookies.length != 0) {
    for (int i = 0; i < cookies.length; i++) {
     if (isAuth = cookies[i].getName().equalsIgnoreCase(paramCooikeAuth)) break;
    }
   }

Если вам пригодилась статья, то отправьте 5 рублей автору. Спасибо!

Комментариев нет:

Отправить комментарий