To better understand what PascalDragon means, you can try this:
program project1;
{$mode delphi}
function Fun: Pointer;
begin
Result := nil;
end;
type
TFun = function: Pointer;
var
B: Boolean;
F: TFun;
begin
F := Fun;
B := F <> nil;
Writeln(B); // prints FALSE
B := Assigned(F);
Writeln(B); // prints TRUE
ReadLn;
end.
So, not often will you experience the different behaviour of
Assigned(P) and
P<>nil, but, when you do, this bug(*) can be very hard to find. So, we should keep this in mind.
(*) -- when I said "bug", I mean semantic error, this is not a bug, but documented behaviour.