| Autor |
Beitrag |
Tino
      

Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: Mi 11.08.04 08:37
Hallo!
Ich habe gerade auf der Borland Website gelesen das mit der neuen Version des Compilers eine Neuerung bei den Schleifen ansteht: for-loop- oder auch for-each-Schleifen.
Die Neuerung klingt ganze Interessant. Vor allem solche Konstrukte wie
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| type TRole = (worker, manager, executioner, CEO); TJobRoles = set of TRole;
procedure Demo3(const JobRoles: TJobRoles); var R: TRole; begin for R in JobRoles do end; |
finde ich sehr praktisch.
Gruß
Tino
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 11.08.04 11:28
Was isn´n los?
Delphi-Groups
DP 1, DP 2
Wahnsinn.
Und was meldet BILD stattdessen: "Waldi Hartmann gefeuert". Wie langweilig. 
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Mi 11.08.04 20:48
Wozu braucht mabn die??? In PHP mag die zwar ihre Berechtigung haben, aber mit ner For lässt sich das gleiche erreichen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| type TRole = (worker, manager, executioner, CEO);
procedure Demo3(const JobRoles: TJobRoles); var R: TRole; begin for R := Low(R) to High(R) do end; |
Bei Arrays genauso... Gut, For R in TJobRoles ist ne Code-Ersparnis, aber so sieht man wenigstens, was er macht.
P.S.: Auf die Art kann man sogar angeben von wo bis wo er durchlaufen soll:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| type TRole = (worker, manager, executioner, CEO);
procedure Demo4(const JobRoles: TJobRoles); var R: TRole; begin for R := manager to executioner do end; |
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
obbschtkuche
Gast
Erhaltene Danke: 1
|
Verfasst: Mi 11.08.04 21:45
|
|
Tino 
      

Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: Do 12.08.04 07:29
| obbschtkkuche hat folgendes geschrieben: | | Besonders interessant wäre es natürlich wenn man auch gleich noch auf TXYZ casten könnte (kann man das?) |
Was man mit de Pointer innerhalb der Schleife anstellt (casten) dürfter dieser wohl egal sein. Ich gehe also davon aus das es funktioniert.
Gruß
Tino
|
|
obbschtkuche
Gast
Erhaltene Danke: 1
|
Verfasst: Do 12.08.04 14:09
Ich meinte gleich im Schleifenkopf:
Delphi-Quelltext 1:
| for blubb in TMeinObject(Liste.Items) do |
|
|
Tino 
      

Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: Do 12.08.04 14:11
| obbschtkuche hat folgendes geschrieben: | | Ich meinte gleich im Schleifenkopf: |
Das ist doch dort noch gar nicht notwendig, oder?
|
|
obbschtkuche
Gast
Erhaltene Danke: 1
|
Verfasst: Do 12.08.04 14:15
Dann könnte man aber zum Beispiel auch noch auf sowas verzichten:
Delphi-Quelltext 1: 2: 3:
| for blubb in liste.items do with TMeinObject(blubb) do ... |
|
|
maximus
      
Beiträge: 896
Win XP, Suse 8.1
Delphi 4/7/8 alles prof
|
Verfasst: Do 12.08.04 15:01
| obbschtkuche hat folgendes geschrieben: | Dann könnte man aber zum Beispiel auch noch auf sowas verzichten:
Delphi-Quelltext 1: 2: 3:
| for blubb in liste.items do with TMeinObject(blubb) do ... | |
in dem For-in konstrukt musst du ja aber explizit mit blubb arbeiten, da nützt es dir nix, wenn es vorher mal gecasted wurde. Viel mehr sinn würde es machen, wenn du blubb schon als TMeinObject deklariert hättest und einen filternden iterator benutzt.
_________________ mfg.
mâximôv
|
|
obbschtkuche
Gast
Erhaltene Danke: 1
|
Verfasst: Fr 13.08.04 10:37
Sieht so aus als hättest du genau erkannt was ich will. ; -)
Ob ich da gleich noch einen Filter einbauen würde... nein. Vor allem wie? Ich könnte mir da höchstens sowas wie:
Delphi-Quelltext 1:
| for blubb in Liste.items where blubb is TObject do |
Vorstellen, weil
Delphi-Quelltext 1:
| for blubb in TFooBar(Liste.items) do |
Für einrn Cast gehalten wird. (Was auch alles ist was ich sagen wollte. TFooBar kannst Du hier auch von mir aus noch in integer umwandeln, wenn es dann klarer wird (Da ein pointer wenn ich mich recht erinnere automatisch nach TObject und nachfolger gecastet wird... :gruebel:). blubb ist dann aber auch natürlich vom Typ TFooBar)
Abgesehen davon ist ein (automatischer) Filter wohl kaum möglich, weil meine Liste garnicht weiß was in ihr ist. Wenn es eine Reine Object-Liste ist, wäre es ja möglich, aber mich hält ja nichts davon ab auch noch einfach einen integer dazuzuschmeißen. Und bei der oberen Variante mit "where" wäre ein if ... then übersichtlicher und nur minimal mehr platzverbrauchend.
|
|
maximus
      
Beiträge: 896
Win XP, Suse 8.1
Delphi 4/7/8 alles prof
|
Verfasst: Fr 13.08.04 16:11
| obbschtkuche hat folgendes geschrieben: | ...
Delphi-Quelltext 1:
| for blubb in TFooBar(Liste.items) do |
Für einrn Cast gehalten wird. (Was auch alles ist was ich sagen wollte. TFooBar kannst Du hier auch von mir aus noch in integer umwandeln, wenn es dann klarer wird (Da ein pointer wenn ich mich recht erinnere automatisch nach TObject und nachfolger gecastet wird... ). blubb ist dann aber auch natürlich vom Typ TFooBar)
... |
Wenn hier TFooBar = integer wäre, dann würde nix mehr gehen, da der kompilirer anstatt einer, zu enumerierenden, liste einen integer vorfinden würde.
Danny hat es relativ deutlich ausgedrückt: ( homepages.borland.com/dthorpe/blog/delphi/ )
| Danny Thorpe hat folgendes geschrieben: | for <variable> in <container expression> do <statement>;
...
<container> is an expression whose type either implements the IEnumerable interface, or implements a pattern that the compiler recognizes as an enumerator, or is a type that the compiler recognizes as being a container of data items, such as an array. |
Mit filter-iterator meinte ich eigentlich ein konkrete implementierung des INumerator interfaces, welches dann nur die elemente liefert, die deinen anforderungen genügen, sprich TMeinObjecte sind.
Oder wie darf ich mir das vorstellen? Letztendlich erhält man doch immer den typ von <variable> und man muss selbst zusehen ob der gültig, nil oder 'cast-bar' ist 
_________________ mfg.
mâximôv
|
|
obbschtkuche
Gast
Erhaltene Danke: 1
|
Verfasst: Fr 13.08.04 20:31
Lesen macht schlau ;-)
| obbschtkuche hat folgendes geschrieben: | | Besonders interessant wäre es natürlich wenn man auch gleich noch auf TXYZ casten könnte (kann man das?) |
Ich habe nie behauptet dass es so genau so sein sollte, sondern nur dass ich es gut fände wenn es möglich wäre und gleich noch ein Beispiel gepostet habe wie ich es mir vorstellen könnte.
|
|
maximus
      
Beiträge: 896
Win XP, Suse 8.1
Delphi 4/7/8 alles prof
|
Verfasst: Sa 14.08.04 11:50
| obbschtkuche hat folgendes geschrieben: | Lesen macht schlau
| obbschtkuche hat folgendes geschrieben: | | Besonders interessant wäre es natürlich wenn man auch gleich noch auf TXYZ casten könnte (kann man das?) |
... |
Schuldige das ich deine beiträge von ganz oben nicht auswendig konnte. Ich hab doch auch nix gegenteiliges behauptet. Ich denke wie sich die neue syntax genau verhalten wird, werden wir erst wissen wenn wir sie benutzen können. Imo ist der aspekt mit den iteratoren aber viel wichtiger, da in delphi iteratoren (enumeratoren) in zukunft eine grössere rolle spielen dürften. Wenn das jetzt per syntax unterstützt wird, so ist das ein grosse freude *green*
_________________ mfg.
mâximôv
|
|