VR
Virtual Reality On-line   Журнал
Новости   |     Журнал    |    Хаkер    |     Магазин   |   Проекты
[   Вход    ]
[Kарта сайтa]

[ Download  ]
[  Конкурс  ]
[ Анекдоты  ]
[  Ссылки   ]
[  Реклама  ]
[ Почтальон ]
[ О проекте ]






TopList
Язык программирования Delphi.
Исключительные ситуации
:

Сегодня мы познакомимся с исключительными ситуациями. Для чего они нужны? Допустим, что у тебя есть участок кода, где может произойти ошибка. Как сделать так, чтобы программа не вылетала при её возникновении? Очень просто. Надо заключить этот код в блок проверки исключений и тогда твоя прога выдержит даже цунами :).

И так. Простейший блок исключений выгляди как:

 TRY
  //Здесь ты пишешь код, в котором может произойти ошибка
 EXCEPT
  //Если ошибка произошла, то выполнится этот код
 END;

Рассмотрим простейший пример:

 TRY
  x:=y/0;
 EXCEPT
  Application.MessageBox('На ноль делить нельзя.','Ошибка!',
     MB_OK + MB_ICONINFORMATION);
 END;
 x:=0;

Между TRY и EXCEPT я вставил маленькое действие - деление на ноль. Компьютер не умеет делать такие вещи, поэтому произойдёт ошибка и выполнится код между EXCEPT и END. После обработки ошибки процедура заканчивает выполнение и все остальные операторы не будут выполнены, как, например, в нашем случае - x:=0;

Если бы мы поменяли 0 на любое другое число, то ошибки бы не было и код между EXCEPT и END никогда не выполнился бы.

Давай посмотрим ещё пример:

 var
  b:TBitmap
 begin
  b:= TBitmap.Create;
  TRY
   b.Canvas.Rectangle(1,1,100,100);
  EXCEPT
   Application.MessageBox('Ошибка рисования.','Ошибка!',
        MB_OK + MB_ICONINFORMATION);
   b.free;
  END;
  b.free;
 end;

В этом примере мы создаём объект b типа TBitmap. Потом начинаем блок TRY. В этом блоке мы пытаемся начать рисование. Если во время рисования произошла ошибка, то вызывается окно с сообщенеием Application.MessageBox и освобождается память b.free. После этого происходит выход из процедуры. Если ошибок не было, то просто освобождается память b.free.

Теперь давай разберёмся с ещё одним типом исключительных ситуаций - TRY ... FINALLY:

 TRY
  //Здесь ты пишешь код, в котором может произойти ошибка
 FINALLY
  //Этот код выполнится в любом случае
 END;

Между TRY и FINALLY ты пишешь свой сомнительный код, в котором может произойти ошибка. А между FINALLY и END ты пишешь код, который должен выполнится в не зависимости от результата кода. В этом случае мы не можем информировать пользователя об ошибки, потому что в разделе FINALLY мы не знаем произошла ошибка или нет. Зато вот такой пример будет уместен:

 var
  b:TBitmap
 begin
  b:= TBitmap.Create;
  TRY
   b.Canvas.Rectangle(1,1,100,100);
  FINALLY
   b.free;
  END;
 end;

Подобный пример мы уже рассматривали. В этом случае мы создаем объект b и пытаемся нарисовать. В разделе FINALLY мы удаляем созданный объект b. Теперь мы уверены, что b всегда будет удалён корректно и мы освободим память.

Опять сложный материал превратился в очень простой.


Design by FMk group ©
Copyright©: Horrific aka Флёнов Михаил ©