Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
книги хакеры / Питер_Гудлиф_Ремесло_программиста_Практика_написания_хорошего_кода.pdf
Скачиваний:
16
Добавлен:
19.04.2024
Размер:
9.23 Mб
Скачать

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

6

Людям свойственно ошибаться

Борьба с неизбежным – ошибками в коде

В этой главе:

Какие бывают ошибки

Правильная обработка ошибок

Как генерировать ошибки

Программирование в условиях неопределенности

Мы знаем, что единственный путь избежать ошибки – обнаружить ее.

И единственный путь обнаружить ее – иметь возможность свободно задавать вопросы.

Дж. Роберт Оппенгеймер

В какой%то момент жизни у каждого насту% пает прозрение: мир устроен иначе, чем вам казалось. Мой приятель Том выяснил это в годовалом возрасте, пытаясь залезть на кресло, которое было в четыре раза выше его самого. Он рассчитывал забраться на верши% ну. Результат оказался неожиданным: на него рухнула мебель.

Что%то нарушилось в мире? Или он непра% вильно устроен? Нет. Мир движется вперед уже миллионы лет и, похоже, не собирается останавливаться. Это наши представления о нем не верны и нуждаются в пересмотре. Как говорится, неприятности неизбежны, поэтому нужно учиться справляться с ними.

 

 

 

 

hang

e

 

 

 

 

 

 

C

 

E

 

 

 

X

 

 

 

 

 

-

 

 

 

 

 

d

 

F

 

 

 

 

 

 

t

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

to

 

 

 

 

w Click

 

 

 

134m

 

 

 

 

w

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

.

 

 

 

 

 

.c

 

 

p

 

 

 

 

g

 

 

 

 

df

 

 

n

e

 

 

 

 

-xcha

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

Глава 6. Людям свойственно ошибатьсяClick

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

.c

 

 

.

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Мы обязаны писать код так, чтобы он работал в реальном мире со все% ми его неожиданностями.

Это особенно тяжело, потому что обычно мир ведет себя предсказуе% мым образом и тем самым внушает нам ложное чувство безопасности. Человеческий мозг настроен на то, чтобы справляться с проблемами, и имеет встроенную систему безопасности. Если кто%то заложит вход в ваш дом кирпичом, ваш мозг обнаружит проблему, и вы останови% тесь, а не ударитесь лбом об стену. Но программы не столь умны, и при% ходится сообщать им, где находятся кирпичные стены и что делать, сталкиваясь с ними.

Не стоит рассчитывать, что ваша программа всегда будет работать без сучка и задоринки. Мир не всегда действует согласно вашим предполо% жениям: вы должны предусмотреть обработку всех аварийных ситуа% ций в своей программе. На словах это просто, но на практике требует массы усилий.

Откуда что берется

Готовиться к неожиданностям – признак вполне современного интеллекта.

Оскар Уайлд

Ошибки были и будут. Неприятные результаты могут быть следствием почти любой операции. Это не то же самое, что дефект программы, по% скольку вы заранее знаете, что может произойти ошибка. Например, вам нужно открыть файл базы данных, а он оказывается удален, или диск переполнен, и операция записи становится невозможной, или не% доступен требуемый веб%сервис.

Если не написать код для обработки таких аварийных ситуаций, про% грамма почти наверняка окажется дефектной; она не всегда будет ра% ботать так, как вы предполагали. Однако если аварийная ситуация возникает редко, дефект может оказаться трудно обнаружимым! О де% фектах (багах) мы поговорим в главе 9.

Есть тысячи причин возникновения аварийных ситуаций, но все они попадают в одну из трех категорий:

Ошибки пользователя

Глупый юзер варварски обращается с вашей любимой программой. Возможно, он ввел неверные данные или попытался выполнить со% вершенно бессмысленную операцию. Хорошая программа укажет на ошибку и поможет пользователю исправить ее. Она не станет из% деваться над ним или жаловаться непонятно на что.

Ошибка программиста

Пользователь действовал правильно, но код некорректен. Где%то есть дефект, недосмотр программиста, с которым пользователь ни%