Сегодня мы поговорим о так элементе любого языка программирования как исключения. Рассматривать данный механизм мы будем на примере C#, однако общая теория неизменна для любого языка программирования.
Что же такое исключения? Исключения в программировании — это некоторое состояние программы, которое наступает в определенном месте кода, при невозможности выполнения дальнейшего алгоритма. Звучит это немного страшно, однако на самом деле все достаточно просто и понятно. Достаточно рассмотреть простой пример. Допустим у пользователя есть форма для ввода, в которой необходимо ввести число, и кнопка. После нажатия на кнопку, программа считает введенное значение и попытается умножить его на два. Теперь представим ситуацию, если программист забыл реализовать проверку вводимого значения на факт является ли оно числом или нет. Что мы имеем в итоге: вводим два — получаем 4, вводим ‘sd’ — программа выдает ошибку и закрывается. Вот такая ситуация и называется исключением.
Если брать на примере языка C#, то описанная выше процедура будет выглядеть так:
int A = Int32.Parse(textBox1.Text); MessageBox.Show((A * 2).ToString());
Чтобы избежать закрытия программы, после ошибки необходимо использовать исключения — блок try {} catch {} [finnaly {}].
Блок try — заключает в себя кусок кода, в котором может произойти ошибка в момент выполнения программы. Блок catch — заключает в себя код, который будет выполнен, если ошибка в блоке try все-таки произошла. При этом можно получить саму ошибку путем указания параметра:
... catch (Exception ex) { ///ex - объект, содержащий возникшую ошибку } ...
Стоит отметить, что при возникновении ошибки в блоке try на строчке N, все остальные строчки данного блока кода выполнены не будут. выполнение перейдет на блок catch. После блока catch может указываться блок finnaly — блок, содержащий код, который будет выполнен после выполнения блока catch или try.
Связка try — catch обязательна, не может быть использованно что-то одно. Блок finnaly необходимо использовать в зависимости от той или иной ситуации. Например в нашем примере данный блок вполне можно опустить.
int A = 0; try { A = Int32.Parse(textBox1.Text); MessageBox.Show((A * 2).ToString()); } catch (Exception ex) { MessageBox.Show("Ошибка: " + ex.Message); }
А вот если речь идет о умножении нескольких введенных значений, то блок finnaly может помочь. Не важно сможем ли мы считать значения, мы все равно должны показать результат произведения. При этом в случае ошибки мы вернемся к значениям «по умолчанию»:
int A = 5, B = 5, C = 5, D = 5; try { A = Int32.Parse(textBox1.Text); B = Int32.Parse(textBox2.Text); C = Int32.Parse(textBox3.Text); D = Int32.Parse(textBox4.Text); } catch { A = 5, B = 5, C = 5, D = 5; } finnaly { MessageBox.Show((A * B * C * D).ToString()); }
Так же стоит отметить, что блоки try-catch-finnaly ни как не ограничены в коде, а значит в рамках этих блоков мы так же можем использовать новые try-catch-finnaly.
try { ... } catch { ... try { ... } catch { ... } finnaly { ... } } finnaly { ... }