Глава 11 • Ошибки и исключения
Обработка ошибок в SomonScript
С помощью блоков кӯшиш-гирифтан и пользовательских классов ошибок мы можем обрабатывать ошибки, показывать пользователю понятное сообщение и не давать программе аварийно завершиться.
1. Простой пример: деление на ноль
В этом примере мы пишем функцию, которая выбрасывает исключение при попытке деления на ноль, и обрабатываем это исключение в блоке кӯшиш-гирифтан.
Деление с проверкой ошибки
Функция с проверкой деления на ноль и использование блока кӯшиш-гирифтан.
example.som
// Функция деления с проверкой ошибки
функсия тақсим_кардан(а: рақам, б: рақам): рақам {
агар (б === 0) {
партофтан нав Хато("Тақсим ба сифр иҷозат нест");
}
бозгашт а / б;
}
// Вызов с обработкой ошибок
кӯшиш {
тағ натиҷа: рақам = тақсим_кардан(10, 0);
чоп.сабт("Натиҷа: " + натиҷа);
} гирифтан (хато) {
чоп.хато("Хато: " + хато.message);
}terminal
somon run errors-basic.som
Хато: Тақсим ба сифр иҷозат нест2. Пример посложнее: пользовательский класс ошибки
Теперь создадим специальный класс ошибки для проверки данных, которые вводит пользователь. Так мы сможем отличать разные виды ошибок друг от друга.
Пользовательская ошибка для проверки
Пользовательский класс ошибки и его использование в функциях проверки.
example.som
// Пользовательский класс ошибки для проверки данных
синф Хатои_тасдиқ мерос Хато {
конструктор(паём: сатр) {
супер(паём);
ин.name = "Хатои_тасдиқ";
}
}
функсия тасдиқи_синну_сол(синну_сол: рақам): беджавоб {
агар (синну_сол < 0) {
партофтан нав Хатои_тасдиқ("Синну сол набояд манфӣ бошад");
}
агар (синну_сол > 150) {
партофтан нав Хатои_тасдиқ("Синну соли хеле калон");
}
чоп.сабт("Синну сол дуруст аст: " + синну_сол);
}
// Вызов с отдельной обработкой своей ошибки
кӯшиш {
тасдиқи_синну_сол(-5);
} гирифтан (хато) {
агар (хато instanceof Хатои_тасдиқ) {
чоп.хато("Хатои тасдиқ: " + хато.message);
} вагарна {
чоп.хато("Хатои номаълум: " + хато);
}
}terminal
somon run errors-validate.som
Хатои тасдиқ: Синну сол набояд манфӣ бошад3. Упражнения
Эти упражнения помогут вам лучше освоить обработку ошибок.
- Напишите функцию, которая проверяет возраст и выбрасывает исключение, если он указан неверно.
- Создайте простую систему журнала ошибок, которая записывает сообщения об ошибках в массив и в конце выводит их на экран.
- Создайте пользовательский класс ошибки «Ошибка базы данных» и используйте его в функции подключения к базе данных.