Форум: "Начинающим";
Текущий архив: 2007.02.25;
Скачать: [xml.tar.bz2];
ВнизAssigned или <> nil Найти похожие ветки
← →
НиколайКо (2007-02-01 17:01) [0]Нужно дорабатывать чужую программу, а в ней куча проверок в одних случаях
if Assigned(объект) then
в другихif объект <> nil then
Я пока не улавливаю разницу между этими проверками.
Подскажите в каких случая какую более правильно использовать, и какая работает быстрее.
Спасибо за внимание.
← →
Игорь Шевченко © (2007-02-01 17:05) [1]работает одинаково. а вот ссылки на функции через <> nil не проверишь
← →
Ega23 © (2007-02-01 17:05) [2]
Assigned function
Tests for a nil (unassigned) pointer or procedural variable.
Unit
System
Category
miscellaneous routines
function Assigned(var P): Boolean;
Description
Use Assigned to determine whether the pointer or procedure referenced by P is nil. P must be a variable reference of a pointer or procedural type. Assigned(P) corresponds to the test P<> nil for a pointer variable, and @P <> nil for a procedural variable.
Assigned returns False if P is nil, True otherwise.
Note: Assigned can"t detect a dangling pointer--that is, one that isn"t nil but no longer points to valid data. For example, in the code example for Assigned, Assigned won"t detect the fact that P isn"t valid.
← →
Anatoly Podgoretsky © (2007-02-01 18:59) [3]> НиколайКо (01.02.2007 17:01:00) [0]
> Я пока не улавливаю разницу между этими проверками.
Все просто.
Разница в том, что данный программист не знаком с оператором NOT
Там где он не требуется он использует Assigned, а так где нужен использует <> nil, поскольку не знает как написать.
← →
Ega23 © (2007-02-01 19:03) [4]
> Anatoly Podgoretsky © (01.02.07 18:59) [3]
:)))))))))
← →
Anatoly Podgoretsky © (2007-02-01 19:09) [5]> Ega23 (01.02.2007 19:03:04) [4]
Тебе смешно, но ведь это на поверхности, если конечно автор привел полную и достоверную информацию. По крайней мере я диагноз ставил на ее основе :-)
← →
НиколайКо (2007-02-02 16:21) [6]Спасибо, я конечно так и думал, что особой разницы нет.
Ну а что вы посоветуете что будет корректнее использовать проверку на nil или Assigned?
← →
Сергей М. © (2007-02-02 16:24) [7]
> НиколайКо (02.02.07 16:21) [6]
По колено горох)
Как тебе удобней, так и пиши.
Но не забывай, что придет программер и проклянет твой код)
← →
Сергей М. © (2007-02-02 16:27) [8]
> НиколайКо
Кстати, и ты вправе "проклянуть" того самого "долбаного программера", который заставил тебя задуматься над этой хренью)
← →
НиколайКо (2007-02-02 16:56) [9]
> Сергей М.
;) это хорошо, что заставил задуматься. Это означает, что есть чем думать.
← →
Сергей М. © (2007-02-02 17:09) [10]С др. стороны, стоит задуматься, что скрывается под "объект" во фразе
if объект <> nil then
Если тот прогарммер не такой уж и "долбаный", у него, вполне возможно, был резон написать именно так ...
← →
sinys © (2007-02-02 19:02) [11]Однако следует согласиться, что
if Assigned(объект) then
работает быстрее, чем
if not(объект <> nil) then
:)))
может тот программер мега оптимизатор?:)
← →
begin...end © (2007-02-02 19:11) [12]> sinys © (02.02.07 19:02) [11]
Варианты кодаif Assigned(объект)
иif объект <> nil
работают одинаково быстро.
← →
sinys © (2007-02-02 19:28) [13]
> if Assigned(объект) и if объект <> nil
разве я написал так?
← →
begin...end © (2007-02-02 19:34) [14]> sinys © (02.02.07 19:28) [13]
Вы написали два варианта, которые вообще дадут разный результат: если условие Assigned(объект) истинно, то условие not (объект <> nil) будет ложным. Поэтому непонятно, зачем их сравнивать по времени выполнения. Впрочем, Ваши два варианта тоже будут работать практически одинаково быстро.
← →
jack128 © (2007-02-02 20:13) [15]НиколайКо (01.02.07 17:01)
Я пока не улавливаю разницу между этими проверками.
Сравни и почувствуй разницу:procedure TForm2.FormCreate(Sender: TObject);
begin
if Assigned(OnClick) then
OnClick(nil);
if OnClick <> nil then
OnClick(nil)
end;
← →
DrPass © (2007-02-02 21:46) [16]
> Разница в том, что данный программист не знаком с оператором
> NOT
Есть более оптимистичный вариант - тот код могли писать два программиста. У одного душа лежала к Assigned, у другого - к not
← →
DrPass © (2007-02-02 21:46) [17]
>к not
к nil
← →
_uw_ (2007-02-04 14:51) [18]Игорь Шевченко © (01.02.07 17:05) [1]
работает одинаково. а вот ссылки на функции через <> nil не проверишьprocedure TForm1.FormCreate(Sender: TObject);
function Int(X: Integer): Integer;
begin
Result := 1;
end;
var
f: function(i: Integer): Integer;
begin
f := nil;
if @f = nil then
f := @Int;
if @f = nil then
f := @Int;
f(2);
end;
← →
_uw_ © (2007-02-04 14:55) [19]Странно, что с "= " работает, а с "<>" - нет.
← →
_uw_ © (2007-02-04 15:16) [20]Тьфу ты! И с "<>" тоже все хорошо.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.02.25;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.043 c