понедельник, 13 мая 2013 г.

Сегодня получил неожиданное пятикратное подтверждение тому, почему надо писать FreeAndNil, а не Free

Сегодня получил неожиданное пятикратное подтверждение тому, почему надо писать FreeAndNil, а не Free.

В смысле - в ПЯТИ местах кода поменял Free на FreeAndNil. Тесты их показали.

Причём в коде коллеги, который не так давно нас покинул. Так бывает. Причём - хороший программист, не подумайте. Если бы был дилетант - я бы даже не стал бы писать.

Я вообще заметил - пока человек на месте - его код работает (и я даже могу объяснить почему), как только человек покидает коллектив - его код перестаёт работать.

Для полноты картины скажу - конечно его код - потрогал другой коллега. Который "ни сном ни духом" в нём не понимал. И не потому что - дилетант. Он тоже - хороший программист. Если бы и он был дилетантом - я бы тоже не стал писать. Списал бы всё на это. Причина в другом. Ибо всё время код правил автор.

Собственно об этом и пишет Gunsmoker - "локальная переменная всегда может стать глобальной". Не так всё просто конечно. Но из этой серии.

Надо понимать, что у автора - "весь код в голове". И он правит сообразуясь с этим. И об этом и пишет Gunsmoker. О том, что можно выбрать где Free, а где FreeAndNil.

А другой человек - не может осознать всю гениальность этого выбора. Да и не ДОЛЖЕН. Пока не изучит чужой код. Не ВЫУЧИТ его наизусть. И этот код не станет - ЕГО.

Посему - ЧЕМ МЕНЬШЕ ВЫБОРА - тем лучше (не сочтите меня снобом и не старайтесь свести всё к абсурду - я это тоже умею).

Посему - призываю - ЕЩЁ раз перечитать ОЧЕНЬ УМНОГО человека. Он ВСЁ ОЧЕНЬ аргументированно сказал:

http://www.gunsmoker.ru/2009/04/freeandnil-free.html

"Используйте интерфейсы. Кто бы спорил..."

Кто бы спорил.. Кто бы спорил...

Но! Подводя сухой остаток. Призываю - пишите код так, чтобы его могли править и сопровождать люди, которые не понимают ГЕНИАЛЬНОСТЬ всех деталей замысла.

Будьте проще. Не оставляйте почвы для двояких толкований.

Спасибо, если удалось вас "задеть".

P.S. А что до Ника Ходжеса - я всё же больше верю практикам типа Gunsmoker'а, ну и, простите - меня. Как бы нескромно это ни звучало. По-моему - практика - критерий истины.

P.P.S. А ещё МНОГИЕ забывают о том, что в таком коде:

X := TSomeClass.Create;
SomeCode;
Result := X;


надо на самом деле писать так:

X := TSomeClass.Create;
try
 SomeCode;
except
 FreeAndNil(X);
 raise;
end;
Result := X;

P.P.P.S. И ещё из той же темы - http://18delphi.blogspot.com/2013/04/2_29.html и вот - http://18delphi.blogspot.com/2013/04/blog-post_27.html

Комментариев нет:

Отправить комментарий