Implementing a custom loop #226

I love the C#/C++/Java for loop. It lets you define the value by which you increment the loop variable, e.g.:

for (int index = 0; index <= 1000; index += 2) { }

Delphi does not have an equal loop, but you can use a while/repeat loop to implement something similar. Anyways here's my trial code.

Create a new VCL application, drop a button and a spin edit on the form, the define a new type like so:

type
  TurboLoopCallback = procedure (Index: Integer) of Object;

Now the loop procedure:

procedure TurboLoop(
  Index, (* loop start index *)
  ToIndex: Integer; (* until this value *)
  Callback: TurboLoopCallback; (* the callback procedure *)
  const Step: Integer = 2); (* the step value *)
begin
  (* is it a TO or DOWNTO loop? *)
  if Index > ToIndex then begin
    (* this is a DOWNTO loop
      for index := VALUE downto VALUE do... *)
    while Index >= ToIndex do begin
      (* callback procedure *)
      Callback(Index);
      (* decrement the value of index by STEP value *)
      Dec(Index, Step);
    end;
  end
  else
  begin
    (* this is a TO loop *)
    while Index <= ToIndex do begin
      (* callback procedure *)
      Callback(Index);
      (* increment the value of index by STEP value *)
      Inc(Index, Step);
    end;
  end;
  (* tadam! that's it *)
end;

Add a new public procedure to form:

...
  public
    procedure MessageLoop(Index: Integer);
  end;
...

And it's implemention:

procedure TForm1.MessageLoop(Index: Integer);
begin
  ShowMessageFmt('this is my %d message', [Index]);
end;

Finally in the button's OnClick event handler write this code:

procedure TForm1.Button1Click(Sender: TObject);
begin
  TurboLoop(1, 10, MessageLoop, seIndex.Value);
end;

This is just a proof of concept, it is not very productive.

Original resource:
Author: Dorin Duminica
Contributor: topellina
Added: 2013/09/06
Last updated: 2013/09/06