среда, 12 сентября 2007 г.

Java Puzzle 42: Thrown for a Loop

Тут авторами была написана большая программа, которая обходила все массивы, содержащиеся в другом массиве. Приводить я ее не буду, расскажу вкратце...
Обход массива был сделан с помощью бесконечного цикла, выход из которого осуществлялся при отлавливании ArrayIndexOutOfBoundsException. И программа работала непонятным образом, так как все такие исключения втихую пропускались. Это первый совет: никогда не используйте исключений для управления циклом, а используйте исключения только для обработки исключительных условий. Этот совет, кстати, был еще в книге Блоха "Эффективное программирование на Java", Item 39.
Второй проблемой в программе было использование оператора & для логического выражения: (3 <= array.length) & (array[2] == 3)
При таком использовании второе выражение вычисляется несмотря на то, что первое имеет значение false. И, естественно, происходит исключение...

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

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