Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.051 c
9-1144671676
Kaviss
2006-04-10 16:21
2007.02.25
Самольная физика 3d d3d


15-1170519024
hmmm
2007-02-03 19:10
2007.02.25
PHP как получить адресную строку


15-1170501337
DemonP
2007-02-03 14:15
2007.02.25
скрипты JavaScript


11-1149736015
homm
2006-06-08 07:06
2007.02.25
Владимиру Кладову


2-1170542958
Student_
2007-02-04 01:49
2007.02.25
Обработчик для SpeedButton





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский