Thema: Delphi Goto

Einzelnen Beitrag anzeigen

Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#24

Re: Goto

  Alt 22. Aug 2007, 22:06
Zitat von scrat1979:
Wie um himmels willen findet man auf die schnelle solche Cartoons zu einem x-beliebigen Thema?!?
Wer xkcd kennt, kennt für jedes Thema einen Comic. Sei es über Informatik, Mathematik oder Velociraptoren .

Hier noch die Delphi-Umsetzung von Elvis' Beispiel:
Delphi-Quellcode:
type
  TForLoopEnumerator = class // *hust* Interfaces? *hust*
    fTo, fCurrent: Integer;
  public
    constructor Create(aFrom, aTo: Integer);
    function MoveNext: Boolean;
    property Current: Integer read fCurrent;
  end;

  TForLoop = class
    fFrom, fTo: Integer;
    public
    function GetEnumerator: TForLoopEnumerator;
    property From: Integer read fFrom write fFrom;
    property &To: Integer read fTo write fTo;
  end;

{ TForLoopEnumerator }

constructor TForLoopEnumerator.Create(aFrom, aTo: Integer);
begin
  fCurrent := aFrom - Sign(aTo - aFrom); // MoveNext wird bereits vor dem ersten
  // Schleifendurchgang aufgerufen, also musse fCurrent künstlich einen Schritt
  // zurückgesetzt werden
  fTo := aTo;
end;

function TForLoopEnumerator.MoveNext: Boolean;
begin
  Result := fCurrent <> fTo;
  Inc(fCurrent, Sign(fTo - fCurrent));
end;

{ TForLoop }

function TForLoop.GetEnumerator: TForLoopEnumerator;
begin
  Result := TForLoopEnumerator.Create(From, &To);
end;

var
  i: Integer;
  loop: TForLoop;
begin
  loop := TForLoop.Create;
  loop.From := 10;
  loop.&To := -1;

  for i in loop do
    Writeln(i);

  Readln;
end.
Die marginal vergrößerte Codelänge kann angesichts der Tatsache, dass dieser Iterator in beide Richtungen funktioniert, wohl vernachlässigt werden .

Zitat von Pelvis:
Iterator (oder Enumerator in MS-speak)
Hejlsberg hat wohl nur auf einem Ohr zugehört, als die Namen jener beiden Interfaces so und nicht anders festgelegt wurden - und dann kommt RemObjects daher und führt auch noch eine dritte Bezeichnung ein .

[edit]Einmal Editieren ist dem Cache wohl zu wenig .[/edit]
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat