Блоки try … catch … finally … в JScript 5

Пояснення для людей, не знайомих з даною конструкцією

Конструкція try – catch – finally призначена для перехоплення помилок (виключень). Якщо в блоці try в якомусь операторі виникає помилка, JScript ігнорує інші оператори і переходить до блоку catch, де знаходиться блок обробки винятків. Останнім виконується блок finally, в якому зазвичай виконують деякі заключні дії. Допускається використання неповної конструкції – без catch або finally.

Скажу відразу, щоб не було ніяких непорозумінь: JScript – це JavaScript в інтерпретації Microsoft, а 5-я версія припускає наявність Internet Explorer 5.0 (в 4-м IE всього лише 3-я версія JScript).
Не знаю як ви, а я, скільки програмую на J [ava] Script, мріяв, щоб у цій мові з'явилася нарешті ця конструкція з двох слів, але йшли роки, а заповітні слова так і залишалися зарезервованими і я вже було втратив всяку надію, як вийшов п'ятий IE …

І ось, одного разу увечері, вносячи чергові зміни до свого JS Unix і порпаючись одночасно в нутрощах 5-го "зонда", погляд мій зачепив знайомі "try, catch" і незнайоме "Error". Неясна надія маленьким мерехтливим вогником загорілася в моїй душі. Обережно, не даючи їй згаснути, я простягнув руки до клавіатури, набрав try … catch … і в місце прикрого "зарезервовані слова" отримав радісне "передбачається наявність} ". Треба було бачити мене в той момент (або чути), каюсь: я кричав, що Гейтс молодчина. Каюсь, тому що Гейтс – поганий дядько, зробив в п'ятій версії те, що треба було зробити ще у першій. Ну да ладно, це все чудово, але треба було зробити так, щоб окрім п'ятого експлорера інші браузери не помічали цей блок. Добре, що в JScript є така чудова річ, як умовна компіляція. Скориставшись нею можна приховати все що завгодно від сторонніх очей Netscape Navigator і Internet Explorer 4.01 і нижче. Таким чином, вся конструкція виглядає так (після крапки з комою – мої коментарі):

/ * @ Cc_on @ * /; Включаємо умовну компіляцію
/ * @ If (@ _jscript_version> 4); Перевіряємо версію JScript
try; Сам блок try
{@end @*/
Result = eval (expression);; Робимо щось корисне
/*@if (@_jscript_version>4)
} Catch (err); "Ловимо" помилку
{
alert (err.description);; Повідомлення про помилку
Result=””;
} finally
{
alert (Result);; Завершальні дії
};
@end @*/
/ * @ Cc_off @ * /; Вимикаємо умовну компіляцію

Де Еrr – ім'я об'єкта Error, який буде створений при виникненні помилки, в нього будуть поміщені параметри помилки. Об'єкт Error має три конструктори і дві властивості:

err=new Error();
err=new Error(number);
err=new Error(number,description);


Властивість (і параметр конструктора) number – числове значення (номер помилки), властивість description (також параметр конструктора) – рядок, опис помилки. Деякі числові значення та відповідні їм опису помилок наведено в таблиці нижче:

































Номер помилки
Опис помилки
-2146823279 Визначення відсутнє
-2146827282 Передбачається наявність ")"
-2146827273 Незавершена рядкова константа
-2146827286 Помилка синтаксису
-2146827280 Передбачається наявність {
-2146827850 Об'єкт не підтримує це властивість чи метод
-2146827843 Команда не підтримується об'єктом
-2146827859 Неможливо створення об'єкта сервером програмування об'єктів
-2146828235 Файл не знайдено


Існує спосіб програмно порушити виняток (створити помилку) – досить викликати оператор throw зі створеним раніше об'єктом Error. При перехопленні помилки конструкцією try-catch створений об'єкт буде переданий блоку catch. Приклади:

var err = new Error (-10, "Неправильне число");
throw(err);
throw (new Error (-4, "Помилка"));

Таким чином, JScript поповнився ще однією корисною конструкцією, істотно спрощує життя програміста.


Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*