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]