C#: «Try-Catch-Finnaly: Exceptions is must» или «Исключения — главный атрибут правильного кода»

Сегодня мы поговорим о так элементе любого языка программирования как исключения. Рассматривать данный механизм мы будем на примере 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 {
...
}
Запись опубликована в рубрике C# с метками , , , , , , , , . Добавьте в закладки постоянную ссылку.