Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Goto (https://www.delphipraxis.net/98180-goto.html)

Elvis 22. Aug 2007 21:16

Re: Goto
 
Zitat:

Zitat von scrat1979
//EDIT: @elvis - Was sind denn Iteratoren? Evtl. kenne ich nur den Begriff nicht, jetzt bin ich aber neugierig geworden und Google liefert mir nichts...

Damit kann man eine for-in Iteration sozusagen von innen aufbauen und man muss nur einzelne Werte rauswerfen, die dann ein Schleifendurchlauf im for-in werden.
Sinnbefreites Beispiel für die nichtssagende Erklärung :freak: :
Delphi-Quellcode:
type
  Sample = class
  public
    class method Test(startValue, endValue : Integer) : sequence of Integer; iterator;
  end;

implementation

class method Sample.Test(startValue, endValue : Integer) : sequence of Integer;
begin
  for i : Integer := startValue to endValue do
    yield i;
end;
Könnte man so benutzen:
Delphi-Quellcode:
for i in Sample.Test(2, 10) do
  Console.WriteLine(i);
Der wirklich Iterator (oder Enumerator in MS-speak) wird vom Compiler als eine state machine umgesetzt, die bei jedem Aufruf auf MoveNext zum nächsten yield springt.

scrat1979 22. Aug 2007 21:19

Re: Goto
 
Oje, muss gestehen, daß ich so etwas noch nie benutzt habe. Danke für den anschaulichen Code. Wenn ich mal Zeit habe, werde ich mir ihn mal genauer anschauen!! Thanx.

SCRaT

Hawkeye219 22. Aug 2007 21:27

Re: Goto
 
@Markus
Vom Meister selbst: Revised Report (1972)
Das Fehlen von GOTO in späteren Wirth-Sprachen zeigt ja sehr deutlich, daß er es selbst für überflüssig hielt. Aber ob das "Meister" Tobi überzeugt?

@SCRaT
Das geht (leider nicht ganz so schön wie in Chrome) auch in neueren Delphi-Versionen: klick

Gruß Hawkeye

Khabarakh 22. Aug 2007 22:06

Re: Goto
 
Zitat:

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 :D .

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 :zwinker: .

Zitat:

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 :stupid: .

[edit]Einmal Editieren ist dem Cache wohl zu wenig :stupid: .[/edit]

Elvis 22. Aug 2007 22:12

Re: Goto
 
Zitat:

Zitat von Khabarakh
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 :stupid:

sequences sind IEnumerable<T>, nur nicht so hässlich. Gab ja bereits "array of". :)

Khabarakh 22. Aug 2007 22:56

Re: Goto
 
Zitat:

Zitat von Elvis
sequences sind IEnumerable<T>, nur nicht so hässlich. Gab ja bereits "array of". :)

Ich weiß, auch wenn RemObjects das wohl irgendwie geheimhalten will *g* . Die Einführung eines neuen Keywords mit einer dritten Bezeichnung, das überhaupt nicht mehr mit den anderen zwei zusammenhängt, finde ich trotzdem nicht sinnvoll - wenn die C#-Generics zu hässlich sind, hätten sie sich gleich stattdessen an die VB-Syntax anlehnen sollen :duck: . Du musst zugeben, es würde doch auch niemand auf die Idee kommen, für stino Methoden wie Join() oder Select() Keywords einzuführen.

FAlter 22. Aug 2007 23:31

Re: Goto
 
Hi,

was hat das alles noch mit goto zu tun? :warn:

Mfg
FAlter

Hansa 23. Aug 2007 02:28

Re: Goto
 
Zitat:

Zitat von mkinzler
Wirths Pascal hatte kein goto. Wurde später aus einem mir unerklärlichen Grund
wieder eingeführt.

Doch, hatte es definitiv. Hawkeye hat da schon Recht. Das wurde weder abgeschafft noch neu eingeführt. Heutzutage wird nach Operator-Überladung usw. geschrien. Zur damaligen Zeit wurde eben GOTO gefordert. :P Den C-Sphagetti-Source kann man noch heute besichtigen. Lochkarten-Goto Basic-Code, der ist allerdings kaum noch zu finden. Obwohl,..VB ? :mrgreen:

Olli 23. Aug 2007 02:45

Re: Goto
 
Delphi-Quellcode:
goto Hell;
???? :mrgreen: :mrgreen: :mrgreen:

Hansa 23. Aug 2007 02:57

Re: Goto
 
Goto 3 ist doch schon viel besser. Die liegt hier vor mir auf dem Tisch. Wetten ? :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:13 Uhr.
Seite 3 von 4     123 4      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz