Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.02.25;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.031 c
3-1164981214
DelphiLexx
2006-12-01 16:53
2007.02.25
Аналог UpdateRecord но без CashedUpdates


3-1165219427
DelphiLexx
2006-12-04 11:03
2007.02.25
Foreign Key определить все зависимые элементы


2-1170482024
vegarulez
2007-02-03 08:53
2007.02.25
Как в стринговую переменную char записать?


1-1167840478
Igor_Z
2007-01-03 19:07
2007.02.25
Adope Acrobat


2-1170924802
Alexdeil
2007-02-08 11:53
2007.02.25
Проблема с записью....