Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

помогите определиться с форматом функции


Страницы:   1 2 3

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;


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо