![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
помогите определиться с форматом функции
dev888 © (2011-10-26 15:15:00)нужно написать функции (API), которые были бы максимально удобными для перемещения по товарам магазина (GoToFirstProduct, GoToNextProduct, GoToPreviousProduct, GoToLastProduct). Нужно предусмотреть возврат идентификатора товара, а также возможность перемещения к товару. Как это лучше сделать, чтобы не писать еще и функции EOF, BOF? Пока что думаю так:
function GoToFirstProduct(out ProductId: Integer): Boolean;
function GoToLastProduct(out ProductId: Integer): Boolean;
- Если товары в магазине отсутствую, функция будет возвращать False
function GoToNextProduct(out ProductId: Integer): Boolean;
function GoToPreviousProduct(out ProductId: Integer): Boolean;
- если товары в магазине отсутствую, либо текущий товар был последним (GoToNextProduct) / первым (GoToPreviousProduct) функция будет возвращать False.
но:
если нужно пробежать по товарам магазина и выполнить над каждым какое-то действие, то получается не очень удобно для программиста.
AdapterStore.GoToFirstProduct(ProductId);
// действие на товаром
while AdapterStore.GoToNextProduct(ProductId) do
begin
// дейсвие над товаров
end;
Ega23 (2011-10-26 15:46:00) [41]
> каждый раз будет вынужден писать цикл перебора.
Без индексирования или упорядочивания у тебя и так и так будет цикл перебора.
Медвежонок Пятачок (2011-10-26 15:44:00) [42]в результате пользователь апи, когда ему надо будет тем или иным обработать товары, каждый раз будет вынужден писать цикл перебора.
Омлет (2011-10-26 15:42:00) [43]> Нужно предусмотреть возврат идентификатора товара, а также возможность перемещения к товару.
А, может, сразу ссылку на объект возвращать?
Ega23 (2011-10-26 15:41:00) [44]
First;
Next;
Eof;
Этого достаточно.
И будет тогда что-то вроде
with AdapterStore do
begin
First;
while not Eof do
try
.... Работаем с ID, также выносим его в public
finally
Next;
end;
end;
Медвежонок Пятачок (2011-10-26 15:21:00) [45]если нужно пробежать по товарам магазина и выполнить над каждым какое-то действие, то получается не очень удобно для программиста.
type
TEnumCallbackFunc = function(AProduct : integer; var bMore : boolean; ACustomData : Pointer) : boolean;
function enum_products(ACallBackFunc : TEnumCallbackFunc; ACustomData : Pointer) : integer;
var bMore : boolean;
begin
Result := 0; bMore := True;
while product_exists do
begin
if ACallBackFunc(ProductID,bMore,ACustomData) then inc(Result);
if not bMore then break;
end;
end;