Урок 13 по JScript: Оператор throw

Урок 13 по JScript: Оператор throw Программирование на JSCRIPT

В этой статье мы познакомимся с jscript инструкцией throw js сценариев. Инструкция throw позволяет в сценариях js генерировать исключительную ситуацию, которая впоследствии, может обрабатываться конструкцией try catch. Может возникнуть логический вопрос – зачем генерировать исключительную ситуацию (ошибку), если можно просто задать условие, при котором будет происходить простой вывод сообщения?

Как не странно, но это так, следующий пример это демонстрирует:

// *****************************************************************
// Пример создания исключительной ситуации (js throw)
// throw.js
// *****************************************************************
 
 function summ(){
 var s=0;
     for (var i=0; i<=100; i++){
                 s+=i;
     }
return s;    //5050
 }
 
WScript.echo (summ());
 
 function summ1(){
 var s=0;
     for (var i=0; i<=100; i++){
                 s+=i;
                 if (s>1000){
                            WScript.Echo ("Переменная s больше 1000");
                            break;
                 }
     }
return s;    //500
 }
 
WScript.echo (summ1());           
 
 function summ2(){
 var s=0;
     for (var i=0; i<=100; i++){
                 try {
                            s+=i;
                            if (s>1000) throw new Error("Переменная s больше 1000");
                 }catch(e){
                            if (e!=0){
                                        WScript.Echo (e.description);
                                        break;
                            }
                 }
     }
return s;    //500
}
 
WScript.echo (summ2());

В данном примере мы прописали три функции (sum(), summ1() и summ2()), все они выполняют практически одну задачу – нахождение суммы чисел от 0 до 100. В первой функции мы получим результат в 5050, а во-вторых – 1035. В функции summ1() мы прописали условие, что если переменная s будет больше или ровно 1000, то произвести выход из цикла с помощью оператора break. В функции summ2() мы использовали js throw инструкцию, видим, что после нее идет создание объекта Windows Script Host – Error, в качестве параметра мы передали ему сообщение: «Переменная s больше 1000», то есть, мы генерировали собственную ошибку с условие появления при s больше или ровно 1000. Что бы данную ошибку обработать, используется конструкция try catch. Видим, что тут мы тоже прописали оператор break.

Скачать архив с примерами

Стоит учитывать, что после оператора throw может следовать не только новый объект Error, но и простая строка или число:

// *****************************************************************
// Пример создания исключительной ситуации (js throw)
// throw_1.js
// *****************************************************************
 
 function new_summ(){
 var s=0;
     for (var i=0; i<=100; i++){
                 try {
                            s+=i;
                            if (s>1000) throw "Переменная s больше 1000";
                 }catch(e){
                            if (e!=0){
                                        WScript.Echo (e);
                                        break;
                            }
                 }
     }
return s;    //500
}
 
WScript.echo (new_summ());

Как видим, в данном случае мы после throw просто прописали строку «Переменная s больше 1000».

Хорошо, теперь, давайте рассмотрим следующий пример:

// ***********************************************************
// Пример создания исключительной ситуации (js throw)
// throw_2.js
// ***********************************************************
 
var i=0, msg="Результат деления 15 на\n\n", e, msg_err="Ошибка деления!!!\n\n";
 
// Объявляем функцию my_fun
var my_fun = function(x,y){return x +y;}
 
// Объявляем объект my_obj
var my_obj = {a:10, b:100};
 
// Объявляем массив my_arr из 7 элементов!
var my_arr=[5, 7.5, 0,"строка",2, my_fun, my_obj];
 
while (i <= 7) {
//результат деления
var result;
     try{
                 result=15/my_arr[i];
                 //генерируем сообщение об ошибке
                 if (!isFinite(result)) throw new Error("my_arr[" + i + "]: " + my_arr[i]);
     }catch(e){
                 if (e!=0){
                            msg_err+=e.description + "\n";
                 }
     }finally{        
                 if (isFinite(result)) msg+="my_arr[" + i + "]: " + my_arr[i] + " \tровно: " + result + "\n";
                 i++;
     }
}
WScript.echo (msg + "\n" + msg_err);

В данном примере мы создали массив my_arr, который состоит из 7 элементов, числа, строка, функция и объект, причем, одно из чисел ровно 0. В цикле происходит деление числа 15 на каждый элемент массива. При делении на ноль, строку, функцию и объект ошибки не произойдёт, так как сам язык Jscript вернёт типы данных NaN – не число и infinity – бесконечность. Что бы вручную генерировать сообщение об ошибке, мы использовали оператор throw в js сценарии. Есть функция isFinite(х), которая вернёт true лишь в том случае, если переменная х не имеет тип данных NaN или infinity.

Используя данную функцию, мы прописали условие:

if (!isFinite(result)) throw new Error(«my_arr[» + i + «]: » + my_arr[i]);

Само сообщение об ошибке будет храниться в переменной msg_err, а переменная msg будет хранить только правильный результат деления.

Оцените статью
Технологии программирования и ведение блога
Добавить комментарий