Как было сказано выше,
в программе во время ее работы могут возникать ошибки, причиной которых, как
правило, являются действия пользователя. Например, пользователь может ввести
неверные данные или, что бывает довольно часто, удалить нужный программе файл.
Нарушение в работе
программы называется исключением. Обработку исключений (ошибок) берет на себя
автоматически добавляемый в выполняемую программу код, который обеспечивает,
в том числе, вывод информационного
сообщения. Вместе с тем Delphi дает возможность программе самой выполнить обработку
исключения.
Инструкция обработки
исключения в общем виде выглядит так:
try
//
здесь инструкции, выполнение которых может вызвать исключение
except // начало секции обработки исключений
on ТипИсключения1 do Обработка1;
on
ТипИсключения2 do Обработка2;
on ТипИсключенияJ do ОбработкаJ;
else
// здесь инструкции обработки остальных исключений
end;
где:
Как было сказано выше,
основной характеристикой исключения является его тип. В таблице 13.1 перечислены
наиболее часто возникающие исключения и указаны причины, которые могут привести
к их возникновению.
Таблица 13.1.
Типичные исключения
Тип исключения |
Возникает |
||
EZeroDivide |
При выполнении операции
деления, если делитель равен нулю |
||
EConvertError |
При выполнении преобразования,
если преобразуемая величина не может быть приведена к требуемому виду.
Наиболее часто возникает при преобразовании строки символов в число |
||
Тип исключения |
Возникает |
||
EFilerError |
При обращении к файлу.
Наиболее частой причиной является отсутствие требуемого файла или,
в случае использования сменного диска, отсутствие диска в накопителе |
||
Следующая программа,
вид диалогового окна которой приведен на рис. 13.3, а текст— в листинге 13.1,
демонстрирует обработку исключений при помощи инструкции try.
Рис. 13.3. Диалоговое
окно программы
Листинг 13.1.
Обработка исключения типа EZeroDivide
unit
UsTry_;
interface
uses
Windows, Messages, SysUtils, Classes,
Graphics,
Controls, Forms, Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4:
TLabel;
Editl: TEdit; // напряжение
Edit2:
TEdit; // сопротивление
Label5:
TLabel; // результат расчета - ток
Button1:
TButton; //кнопка Вычислить
procedure ButtonlClick(Sender: TObject);
private
{ Private declarations )
public
{ Public declarations }
end;
var
Form1:
TForm1;
implementation
{$R
*.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var
u: real; // напряжение
r: real; // сопротивление
i: real; // ток
begin
Labels.Caption
:= ' '; try
// инструкции, которые могут вызвать исключение (ошибку)
u := StrToFloat(Edit1.Text);
r := StrToFloat(Edit2.Text);
i
:= u/r;
except // секция обработки исключений
onEZeroDivide do // деление на ноль
begin
ShowMessage('Сопротивление не может быть равно нулю!');
exit;
end;
on EConvertError do // ошибка преобразования строки в число
begin
ShowMessage('Напряжение
и сопротивление должны быть ' +
'заданы числом. ' +#13+
'При
записи дробного числа используйте запятую.';
exit;
end;
end;
Label5.Caption := FloatToStr(i) + ' A';
end;
end.
В приведенной программе
исключения могут возникнуть при вычислении величины тока. Если пользователь
задаст, что сопротивление равно нулю, то при выполнении инструкции i:=u/r возникает
Исключение EZeroDivide.
Если неверно будет введено числовое значение, например, для разделения целой и дробной частей числа вместо запятой будет использована точка, то возникнет исключение типа EConvertError. Оба исключения обрабатываются одинаково: выводится сообщение, после чего процедура обработки события Onclick завершает свою работу.
Когда тот или иной физик использует понятие "физический вакуум", он либо не понимает абсурдности этого термина, либо лукавит, являясь скрытым или явным приверженцем релятивистской идеологии.
Понять абсурдность этого понятия легче всего обратившись к истокам его возникновения. Рождено оно было Полем Дираком в 1930-х, когда стало ясно, что отрицание эфира в чистом виде, как это делал великий математик, но посредственный физик Анри Пуанкаре, уже нельзя. Слишком много фактов противоречит этому.
Для защиты релятивизма Поль Дирак ввел афизическое и алогичное понятие отрицательной энергии, а затем и существование "моря" двух компенсирующих друг друга энергий в вакууме - положительной и отрицательной, а также "моря" компенсирующих друг друга частиц - виртуальных (то есть кажущихся) электронов и позитронов в вакууме.
Однако такая постановка является внутренне противоречивой (виртуальные частицы ненаблюдаемы и их по произволу можно считать в одном случае отсутствующими, а в другом - присутствующими) и противоречащей релятивизму (то есть отрицанию эфира, так как при наличии таких частиц в вакууме релятивизм уже просто невозможен). Подробнее читайте в FAQ по эфирной физике.