AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Im with statement obj referenzieren

Ein Thema von DGS · begonnen am 13. Okt 2007 · letzter Beitrag vom 17. Okt 2007
Antwort Antwort
Seite 1 von 5  1 23     Letzte »    
DGS

Registriert seit: 10. Jul 2004
65 Beiträge
 
Delphi 6 Enterprise
 
#1

Im with statement obj referenzieren

  Alt 13. Okt 2007, 20:14
Tach.

ich stehe vor einer Aufgabe und habe Probleme die richtigen Worte zu finden dazu.

Jedenfalls Ausgangslage:
Ich benutze eine with Konstruktion, um u.a. Variablennamen einzusparen. Verwende ich für ein Stream.

Hier ein fetzen des relevaten Codes:

Delphi-Quellcode:
function tForm1.lesen( datei: String; var stream : tStream) : boolean;
var i : int;
begin
  with tFileStream.Create( datei, fmOpenRead) do begin
    {...}
    stream.CopyFrom( XXX, i );
    {...}
    free;
  end;
end;
Was ich nun möchte:
Aus dem erstellten tFileStream will ich ne Stelle in stream kopieren.

Das Problem:
Welche referenz soll ich nutzen? ( Stelle mit XXX markiert )
ein self liefert nur (in diesem Beispiel ) Form1, nicht aber den temporären stream.

Kann man das irgendwie mit with trotzdem lösen, oder komm ich um eine weitere Variable nicht herum?
Also sowas:

Delphi-Quellcode:
function tForm1.lesen( datei: String; var stream : tStream) : boolean;
var
  i : int;
  t : tStream;
begin
  t := tFileStream.Create( datei, fmOpenRead);
  {...}
  stream.CopyFrom( t, i );
  {...}
  t.free;
end;
Also dieser Code tut das, was ich auch will.
Wenn also mit with nicht gehen sollte, dann nehme ich auch den. Nur möcht ich halt wissen, ob es wirklich nicht möglich ist, oder ob doch man was machen kann.

Gruss
Vorschläge für sinnvolle Signatur bitter per PN
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Im with statement obj referenzieren

  Alt 13. Okt 2007, 20:19
Nein, das geht nicht. Falls doch, würde es mich aber auch interessieren.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
DGS

Registriert seit: 10. Jul 2004
65 Beiträge
 
Delphi 6 Enterprise
 
#3

Re: Im with statement obj referenzieren

  Alt 13. Okt 2007, 20:27
Tja, schade eigentlich, dass es nicht geht.
Hab aber auch nicht wirklich erwartet, dass es klappen wird.
Dann muss halt ne zusätzliche Variable her.
Vorschläge für sinnvolle Signatur bitter per PN
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Im with statement obj referenzieren

  Alt 13. Okt 2007, 21:52
bin ich froh das es nicht geht Ich bin jemand der das Width überhaupt nicht mag weil oft nicht ersichtlich ist ob es innerhalb des blocks um eine Eigenschaft des With-Parameter handelt oder um eine eigenständige Variable. Oft kommt es dort auch zu fehlern.

Bsp.:
Delphi-Quellcode:
procedure TMyComponent.Methode();
begin
  with AnComponent do
  begin
    [...]
    Name := 'irgendwas';
    [...]
    //teilweise auch schon gesehen
    Name = AnComponent.Name;
    [...]
  end;
end;
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: Im with statement obj referenzieren

  Alt 15. Okt 2007, 07:59
Zitat von SirThornberry:
bin ich froh das es nicht geht Ich bin jemand der das Width überhaupt nicht mag weil oft nicht ersichtlich ist ob es innerhalb des blocks um eine Eigenschaft des With-Parameter handelt oder um eine eigenständige Variable. Oft kommt es dort auch zu fehlern.
Da schlag ich gleich auch in die selbe Kerbe.
Wenn ich irgendwo im Quellcode (eines Kollegen oder so) auf ein with stosse, wird dies ersatzlos eliminiert.
Vor allem hat der Debugger damit ein Problem, weil er die Variablen nicht auflösen kann. Beim "Drüberfahren" zeigt er den Wert der Variablen nicht an.
Und das menschlische Auge sieht auch nicht sofort, wo eine Property dazugehört. Geil wird es aber erst, bei mehrfachen oder verschachtelten with. Dann kommt weder der Compiler noch der Debugger noch der Mensch mehr klar.
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
DGS

Registriert seit: 10. Jul 2004
65 Beiträge
 
Delphi 6 Enterprise
 
#6

Re: Im with statement obj referenzieren

  Alt 15. Okt 2007, 19:23
Je nach Mensch natürlich. Ich konnte da bisher gut mitverfolgen, was passiert.

Also würdet ihr alle eh generell von der With-Konstruktion abraten?
Dafür lieber eine Variable mehr deklarieren?
Vorschläge für sinnvolle Signatur bitter per PN
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Im with statement obj referenzieren

  Alt 15. Okt 2007, 19:28
Ohne with ist es eindeutiger und imho leichter zu sehen zu welcher variable die Eigenschaft/Methode gehört
Markus Kinzler
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: Im with statement obj referenzieren

  Alt 15. Okt 2007, 19:48
Ich bin wohl der einzige auf der Welt, der mit 'with' gerne arbeitet.
Statt
Delphi-Quellcode:
Foo.Bar.Grumpy.Steve.Bob.Jim.Arm := 1;
Foo.Bar.Grumpy.Steve.Bob.Jim.Leg := 2;
Foo.Bar.Grumpy.Steve.Bob.Jim.Head := 3;
dann doch lieber

Delphi-Quellcode:
With Foo.Bar.Grumpy.Steve.Bob.Jim do Begin
  Arm := 1;
  Leg := 2;
  Head := 3;
End;
Bei Mehrdeutigkeiten lass ich es natürlich sein und verwende für Jim vielleicht eine lokale Variable, aber Konstrukte wie
Delphi-Quellcode:
With TMyForm.Create (nil) do begin
  If ShowModal = mrOk Then DoSomeThing;
  Release
End;
sind doch echt nett.

Aber es ist egal, ob nun mit 'with' oder nicht. Ihr wollt es übersichtlich und lesbar, ich auch. Und darum geht es letztendlich.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.041 Beiträge
 
Delphi XE2 Professional
 
#9

Re: Im with statement obj referenzieren

  Alt 15. Okt 2007, 19:49
Ich liebe with-Statements und benutze sie immer dann, wenn der Source-Code dadurch kürzer wird.

@Sir T. :
Für mich wird dadurch der Code übersichtlicher.

@RavenIV :
Der Compiler kommt damit sehr wohl klar (und ich auch). Lediglich der Debugger hat damit Probleme, aber die nehme ich gern in Kauf.

Und was denken die Profis (ich bin ja nur ein AmateurProfi)?:
Einfach mal in die Delphi Source Codes schauen.
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Whookie

Registriert seit: 3. Mai 2006
Ort: Graz
441 Beiträge
 
Delphi 10.3 Rio
 
#10

Re: Im with statement obj referenzieren

  Alt 15. Okt 2007, 19:56
Also ich würd auch sagen "Finger weg" vom with Statement (obwohl ich es früher auch gerne verwendet habe ... es bringt vor allem langfristig NUR Probleme mit sich!!

@alzaimar so ist es viel besser:

Delphi-Quellcode:
Var
  jim: TFooObject;
Begin
  jim := Foo.Bar.Grumpy.Steve.Bob.Jim;
  jim.Arm := 1;
  jim.Leg := 2;
  jim.Head := 3;
Whookie

Software isn't released ... it is allowed to escape!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 5  1 23     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz