Подтвердить что ты не робот

Лучший способ проверить, нет ли переменной?

Общим условием, которое должны выполнять все программы, является проверка того, назначены ли переменные или нет.

Возьмем следующие утверждения:

(1)

if Assigned(Ptr) then
begin
  // do something
end;

(2)

if Ptr <> nil then
begin
  // do something
end;

В чем разница между Assigned(Ptr) и Ptr <> nil?

4b9b3361

Ответ 1

Это обычно одно и то же... кроме случаев, когда вы проверяете функцию...

function mfi: TObject;
begin
  Result := nil;
end;

procedure TForm1.btn1Click(Sender: TObject);
type
  TMyFunction = function: TObject of object;
var
  f: TMyFunction;
begin
  f := mfi;

  if Assigned(f) then
  begin
    ShowMessage('yes'); // TRUE
  end
  else
  begin
    ShowMessage('no');
  end;

  if f <> nil then
  begin
    ShowMessage('yes');
  end
  else
  begin
    ShowMessage('no');  // FALSE
  end;
end;

Со вторым синтаксисом он проверит результат функции, а не сама функция...

Ответ 2

Что касается производительности, то нет никакой разницы. Я лично предпочитаю вторую форму, поскольку я нахожу, что люди могут быстрее анализировать смысл.