You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 1-js/10-error-handling/2-custom-errors/article.md
+4-4Lines changed: 4 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -129,12 +129,12 @@ try {
129
129
130
130
Версия с `instanceof` гораздо лучше, потому что в будущем мы собираемся расширить `ValidationError`, сделав его подтипы, как `PropertyRequiredError`. И проверка `instanceof` продолжит работать для новых наследованных классов. Так что это на будущее.
131
131
132
-
Также важно, что если `catch` встретит неизвестную ошибку, то он снова выбросит исключение в строке `(**)`. `catch` знает только как обрабатывать ошибки валидации и синтаксические ошибки, а другие виды ошибок (опечатки и тому подобное) он должен попустить.
132
+
Также важно, что если `catch` встретит неизвестную ошибку, то он снова выбросит исключение в строке `(**)`. `catch` знает, только как обрабатывать ошибки валидации и синтаксические ошибки, а другие виды ошибок (опечатки и тому подобное) он должен попустить.
133
133
134
134
135
135
## Дальнейшее наследование
136
136
137
-
Класс `ValidationError` является слишком общим и много что может пойти не так. Свойство может отсутствовать или иметь неверный формат (как строковое значение для `age`). Поэтому для отсутствующих свойств сделаем более конкретный класс `PropertyRequiredError`. Он будет нести дополнительную информацию о свойстве, которое отсутствует.
137
+
Класс `ValidationError` является слишком общим, и много что может пойти не так. Свойство может отсутствовать или иметь неверный формат (как строковое значение для `age`). Поэтому для отсутствующих свойств сделаем более конкретный класс `PropertyRequiredError`. Он будет нести дополнительную информацию о свойстве, которое отсутствует.
138
138
139
139
```js run
140
140
classValidationErrorextendsError {
@@ -225,7 +225,7 @@ alert( new PropertyRequiredError("field").name ); // PropertyRequiredError
225
225
226
226
Назначение функции `readUser` в приведенном выше коде - это "чтение данных пользователя", верно? Там могут возникнуть различные виды ошибок в процессе. Сейчас у нас есть `SyntaxError` и `ValidationError`, но в будущем функция `readUser` может расшириться: новый код, вероятно, будет генерировать другие виды ошибок.
227
227
228
-
Код, который вызывает `readUser`, должен обрабатывать эти ошибки. Сейчас используются множественные `if` в блоке `catch` для обработки ошибок известных типов и пробрасывание дальше ошибок неизвестного типа. Но если функция `readUser` генерирует несколько видов ошибок, то мы должны спросить себя: действительно ли мы хотим проверять все типы ошибок поодиночке во всех местах в коде, где вызывается `readUser`?
228
+
Код, который вызывает `readUser`, должен обрабатывать эти ошибки. Сейчас используются множественные `if` в блоке `catch` для обработки ошибок известных типов и пробрасывание дальше ошибок неизвестного типа. Но если функция `readUser` генерирует несколько видов ошибок, то мы должны спросить себя: действительно ли мы хотим проверять все типы ошибок поодиночке во всех местах в коде, где вызывается `readUser`?
229
229
230
230
Часто ответ "Нет": внешний код хочет быть на один уровень выше всего этого. Он хочет иметь какую-то обобщённую ошибку чтения данных. Почему именно это произошло -- часто не имеет значения (об этом говорится в сообщении об ошибке). Или даже лучше, если есть способ получить подробности об ошибке, но только если нам это нужно.
231
231
@@ -303,7 +303,7 @@ try {
303
303
304
304
Внешний код проверяет только `instanceof ReadError`. Не нужно перечислять все возможные типы ошибок
305
305
306
-
Этот подход называется "обертывание исключений", потому что мы берём "исключения низкого уровня" и "заключаем" их в `ReadError`, который является более абстрактным и более удобным для использования в вызывающем коде. Такой подход широко используется в объектно-ориентированном программировании.
306
+
Этот подход называется "обёртывание исключений", потому что мы берём "исключения низкого уровня" и "заключаем" их в `ReadError`, который является более абстрактным и более удобным для использования в вызывающем коде. Такой подход широко используется в объектно-ориентированном программировании.
0 commit comments