Блоки 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>

*

*