Пример кода №3

Предыдущая тема Следующая тема Перейти вниз

Пример кода №3

Сообщение автор Marina-T в Чт Ноя 05, 2015 10:37 pm

Код:

...
try
SRC.Canvas.Lock;
Buffer.Canvas.Lock;
...
Buffer.Canvas.Unlock;
SRC.Canvas.Unlock;
except
Result := False;
SRC.Canvas.Unlock;
Buffer.Canvas.Unlock;
end;
...


Данный код показывает незнание основных механизмов, предоставляемых языком программирования, и содержит две грубые ошибки при использовании методов блокировки ресурсов для доступа.

- Повторный вызов методов Unlock в блоке except лишний и ненужный, т.к. достаточно использовать конструкции try finally. Это позволяет избежать дублирования и сделать код более читабельным и логичным.

- Отсутствие операторов try finally между вызовами Lock и Unlock может привести к тому, что ресурс останется заблокированным или будет вызван Unlock на незаблокированном ресурсе.

- Вызов Unlock в блоке except может выполниться до того, как будет вызван Lock для этого ресурса.
avatar
Marina-T
Admin

Сообщения : 33
Дата регистрации : 2015-11-04
Возраст : 31

Посмотреть профиль http://auslogics.online-talk.net

Вернуться к началу Перейти вниз

Re: Пример кода №3

Сообщение автор SmartGuy в Пн Ноя 23, 2015 10:08 pm

Судя по коду (хотя этого не видно), в начале функции Result := True. Это очень плохо. По умолчанию лучше предполагать худший вариант - ошибку.

SmartGuy

Сообщения : 5
Дата регистрации : 2015-11-20

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Пример кода №3

Сообщение автор DELPHI team Auslogics в Вт Ноя 24, 2015 10:41 pm

1. Данный пример, опять же, показывает ошибочное использование.
2. По коду не видно, какое значение принимает Result.
3. По коду не видно, что это за функция и значение True может быть ошибкой.
avatar
DELPHI team Auslogics

Сообщения : 11
Дата регистрации : 2015-11-21

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Пример кода №3

Сообщение автор Спонсируемый контент


Спонсируемый контент


Вернуться к началу Перейти вниз

Предыдущая тема Следующая тема Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения