На этом шаге мы рассмотрим на простейшем примере основные приемы, используемые для организации программной обработки ошибок.
При составлении приложений важно предусмотреть, чтобы программа анализировала возможные ошибки, возникающие при ее выполнении по вине пользователя, и информировала его об этом, подсказывая, что конкретно он сделал неправильно. При этом возможно два подхода.
При создании приложений надо сочетать оба подхода, применяя в каждом конкретном случае и для каждой возможной ошибки тот, который кажется разработчику наиболее эффективным.
На этом шаге рассмотрим процесс создания приложения, в котором предотвращается появление ошибок, на примере разработки простейшего приложения:
Рис.1. Диалоговое окно Деление
Следующая программа производит деление числителя на знаменатель по нажатию кнопки Счет без контроля появления возможных ошибок:
Private Sub CommandButton1_Click() Dim Числитель, Знаменатель, Результат As Single Числитель = CDbl(TextBox1.Text) Знаменатель = CDbl(TextBox2.Text) Результат = Числитель / Знаменатель TextBox3.Text = CStr(Результат) End Sub
Несмотря на то что рассматриваемая ситуация очень простая, она уже таит в себе множество подводных камней. Например, если пользователь по невнимательности забудет ввести в поле Числитель или в поле Знаменатель число при нажатии кнопки Счет происходит аварийное прерывание программы с малопонятным сообщением о несоответствии типов отображаемом в диалоговом окне Microsoft Visual Basic (рисунок 2).
Рис.2. Диалоговое окно Microsoft Visual Basic с сообщением об ошибке
Данное сообщение об ошибке связано с одной из следующих двух инструкций в программе:
Числитель = CDbl(TextBox1.Text) Знаменатель = CDbl(TextBox2.Text)
Такие ошибки ввода легко избежать, если производить в программе предварительную проверку: преобразуются ли вводимые данные в числа? Эту предварительную проверку можно, например, сделать, как показано в следующей процедуре, в которой предусмотрены:
Рис.3. Пример сообщения о некорректном вводе данных
Например, в ситуации, показанной на рисунке 3, в поле Знаменатель было введено число с десятичной запятой, в то время как установки системы предусматривают десятичную точку. Поэтому процедура вызвала отображение диалогового окна Деление с сообщением об ошибке в знаменателе и установила фокус на поле Знаменатель.
Private Sub CommandButton1_Click() Dim Числитель, Знаменатель, Результат As Single If IsNumeric(TextBox1.Text) = False Then MsgBox "Ошибка в числителе", _ vbInformation, "Деление" TextBox1.SetFocus Exit Sub End If If IsNumeric(TextBox2.Text) = False Then MsgBox "Ошибка в знаменателе", _ vbInformation, "Деление" TextBox2.SetFocus Exit Sub End If Числитель = CDbl(TextBox1.Text) Знаменатель = CDbl(TextBox2.Text) Результат = Числитель / Знаменатель TextBox3.Text = CStr(Результат) End Sub
Но это еще не все подводные камни, которые подстерегают неосторожного пользователя при вводе данных даже в этом простом примере. Если пользователь в поле Знаменатель введет 0, то также произойдет аварийная остановка выполнения программы с отображением в диалоговом окне Microsoft Visual Basic сообщения: Деление на 0. Для избежания подобной ошибки будем проверять не только, являются ли введенные в поле данные числом, но и что это не ноль. Например, добавим перед расчетным блоком в процедуре следующую дополнительную проверку:
If CDbl(TextBox2.Text) = 0 Then MsgBox "Знаменатель не может быть нулем", _ vbInformation, "Деление" TextBox2.SetFocus Exit Sub End If
На следующем шаге мы рассмотрим перехват и обработку ошибок.