Now that you spell it out like that I think I have a strong preference for option 2
because any bugs down in findFirstmatch to do with the two returned items being out of
sync will appear as bugs in the caller
e.g. return false but populate the returned item or return true with a nil pointer.
In option 2, the contract between the caller and callee is cleaner. The findFirstMatch
has the responsibility for finding the firstMatch and nothing else. The caller is
responsible for thinking about whether no match is an error or not. Furthermore as
part of the contract, the caller is responsible for passing a valid list and if it
doesn't
then the function can throw an exception.
So my version would be:
functionFindFirstMatch (List: TItemList; Status: TItemStatus):TListItem;
var
i : Integer;
begin
if not assigned(List) then raise exception.create('No list assigned for
findFirstMatch()');
if not assigned(Status) then raise exception.create('No status assigned for
findFirstMatch()');
Result := nil;
for i:= 0 to list.count-1 do
if list[i].status = status then
begin
result := list[i];
exit;
end;
end;
>From a personal perspective, I like this because it increases the chances of
>seperation between error handling and application logic. If also attempts to stop a
>bug
jumping the stack from caller to callee or back up.
---------------------------------------------------------------------------
New Zealand Delphi Users group - Delphi List - [EMAIL PROTECTED]
Website: http://www.delphi.org.nz
To UnSub, send email to: [EMAIL PROTECTED]
with body of "unsubscribe delphi"
Web Archive at: http://www.mail-archive.com/delphi%40delphi.org.nz/