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 3 von 5     123 45      
Benutzerbild von Tormentor32
Tormentor32

Registriert seit: 27. Okt 2005
Ort: Düsseldorf
369 Beiträge
 
Delphi XE5 Professional
 
#21

Re: Im with statement obj referenzieren

  Alt 16. Okt 2007, 09:37
Ich benutze das with-Konstrukt nur an den Stellen, wo ich mir sicher sein kann, um welche Properties es sich handelt, die ich da veränder/abfrage und wo ich damit jede Menge Text sparen kann.
Richard Mahr
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.294 Beiträge
 
Delphi 12 Athens
 
#22

Re: Im with statement obj referenzieren

  Alt 16. Okt 2007, 09:39
Zitat von Whookie:
@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;
So verwende ich es auch immer öfter. Grade beim Debuggen sind "Hilfsvariablen" wirklich nett und es ist manchmal wirklich besser lesbar.

Meine with-Statements werden so langsam im Code verbannt.
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

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

Re: Im with statement obj referenzieren

  Alt 16. Okt 2007, 09:44
Ihr habt euch aber wirklich.

Nur weil ich mit einem Prozeduraufruf eine Endlosrekursion produzieren kann, heisst das doch noch nicht, das ich gänzlich auf Prozeduren verzichte

Konstrukte, egal welcher Art, sollten da eingesetzt werden, wo es passt. Bei einer Zuweisung einzelner Eigenschaften zweier Instanzen ein und der selben Klasse, würde nur dann mit 'WITH' arbeiten, wenn ich den Rest der Coder-Gemeinschaft nachhaltig verärgern will.

Natürlich schreibt man dann:

Delphi-Quellcode:
Procedure TMyObject.Assign (aSrc : TMyObject);
Begin
  Self.Foo := aSrc.Foo;
  Self.Bar := aSrc.Bar;
...
End;
Wenn ich aber auf Jim's Körperteile eingehen will, wäre ein WITH durchaus adäquat. Auch die Verwendung bei der kurzzeitigen Verwendung einer Klasseninstanz ist das imho die richtige Wahl: Die Instanz ist so kurzlebig, das sie noch nicht mal eine eigene lokale Variable verdient. Das oi

Wie gesagt: Man *kann* damit furchtbar unleserlichen Müll fabrizieren. Aber das geht mit Vererbung, Methodenaufrufen und
Programmierung allgemein auch sehr einfach.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

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

Re: Im with statement obj referenzieren

  Alt 16. Okt 2007, 09:47
Zitat von bernau:
Meine with-Statements werden so langsam im Code verbannt.
Also ich bin irgendwie allergisch gegen das with.
Woimmer ich darüber stolpere, fliegt es raus.
Und im Code meiner Vorgänger kommt (kam) sowas sehr viel vor.

Einzige Ausnahme, wo es für mich Sinn macht:
Delphi-Quellcode:
with Irgendwas.create(...) do
begin
  PropertyX := ...;
  PropertyY := ...;
end;
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
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#25

Re: Im with statement obj referenzieren

  Alt 16. Okt 2007, 09:49
Ich will noch mal betonen, dass ich nichts gegen with-Konstrukte habe! Nur wenn ich halt mal einen Fehler finden muß fällt mir der Variablenkonstrukt einfach leichter.

Das man an der richtigen Stelle 'ne Menge Schreiberei mit with spaaren kann ist auch unbestritten. Aber genau damit

Zitat von Tormentor32:
Ich benutze das with-Konstrukt nur an den Stellen, wo ich mir sicher sein kann, um welche Properties es sich handelt, die ich da veränder/abfrage und wo ich damit jede Menge Text sparen kann.
bin ich auch schon auf die Nase gefallen.

Gruß oki
42
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#26

Re: Im with statement obj referenzieren

  Alt 16. Okt 2007, 11:14
Hi folks,

Prof. Wirth hat das WITH-Statement bereits in seinem Ur-Pascal nicht ohne Grund eingeführt. Wichtig war ihm die einmalige Auswertung des Ausdrucks im WITH-Statement, was richtig angewandt zu Effizienz und Übersichtlichkeit gleichermaßen führt:

Delphi-Quellcode:
with TFileStream.Create(fn, fm) do
begin
  Write(buf, bufSize);
  Free;
end;
Auch Borland verwendet positive Vokabeln zur Beschreibung dieses Sprachmerkmals: einfach, bequem, effizient, kurz. Beim GREP über das SOURCE Verzeichnis von Delphi merkt man, dass die Borland-Entwickler keine Scheu hatten es zu benutzen.

In Modula hat Wirth das WITH-Statement überarbeitet. Die Einmalauswertung wollte er unbedingt beibehalten, aber das Überdeckungsproblem machte ihm wohl Sorgen. Als Lösung schuf er die Bindung des Ausdrucks an eine Variable, die nur im WITH-Statement verfügbar ist:

Delphi-Quellcode:
// no valid delphi code
with fs = TFileStream.Create(fn, fm) do
begin
  fs.Write(buf, bufSize);
  fs.Free;
end
In Oberon hat er das WITH-Statement aus übergeordneten Gesichtspunkten eliminiert - er wollte eine Sprache schaffen, die im Tugendvergleich mit ihren Vorgängern ähnlich da stehen sollte, wie RISC vs. CISC. Das Motto war KISS - Keep It Small, Simple.

Ich sehe in den Beiträgen dieses Threads eher persönliche Erfahrungsberichte als Argumente für und wider. Auch wenn ich das WITH-Statement häufig benutze, möchte ich niemanden bekehren, aber ein paar Dinge möchte ich gerne los werden:

Als Software-Entwickler erzeugen wir in erster Linie Programm-Quelltexte für diejenigen, die nach uns kommen. Wenn der Code korrekt ist, dann gibt es keinen Grund ihn (äquivalent) umzuformen, also wird kein Profi freigegebenen Code verändern, wenn er es nicht muss. Wir schreiben unseren Code nicht für irgendeinen Runtime-Debugger und wenn ich mit dem Cursor innerhalb eines WITH-Statements über einen Bezeichner halte, dann meldet mir die D7-IDE den zugehörigen namespace.

Die Unübersichtlichkeit mancher Code-Strecken ist meiner Menung nach häufiger viel zu großen Funktionen geschuldet, als falsch angewandten WITH-Statements. Funktionale Programmierung und die konsequente Modularisierung führen zu Funktionen, die man mit einer oder beiden Händen abdecken kann. Wer dann noch fachbezogenen und abstrakten Code auf verschiedenen Ebenen ansiedelt, der macht sich um WITH-Statements kaum noch Sorgen.

Begreift WITH-Statements einfach als Freiheitsgrade der sprachlichen Ausdrucksfähigkeit von Object Pascal. Es sind dynamische default namespaces - nicht mehr und nicht weniger. Benutzt sie oder lasst es halt, aber lasst euch nicht beim Missionieren erwischen.

Freundliche Grüße
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.294 Beiträge
 
Delphi 12 Athens
 
#27

Re: Im with statement obj referenzieren

  Alt 16. Okt 2007, 11:15
Zitat von RavenIV:
Einzige Ausnahme, wo es für mich Sinn macht:
Delphi-Quellcode:
with Irgendwas.create(...) do
begin
  PropertyX := ...;
  PropertyY := ...;
end;
Eben so ein Konstrukt ist für mich tabu. Dort gibt es gar keine Möglichkeit mit einem Debugger auf die Werte zuzugreifen.

Wenn irgendetwas instanziert wird, dann landet es erst mal in einer Variablen.

Delphi-Quellcode:
fIrgendwas:=TIrgendwas.create(...)
fIrgendwas.PropertyX := ...;
fIrgendwas.PropertyY := ...;
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Benutzerbild von semo
semo

Registriert seit: 24. Apr 2004
755 Beiträge
 
Delphi 2010 Professional
 
#28

Re: Im with statement obj referenzieren

  Alt 16. Okt 2007, 12:21
Zitat:
Dort gibt es gar keine Möglichkeit mit einem Debugger auf die Werte zuzugreifen.
klar geht das mit evaluate / modify und watches...

und meiner meinung macht es gerade bei solchen konstruktoren sinn "with" zu verwenden, wenn viele zu initialisierenden parameter vorhanden sind.
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.294 Beiträge
 
Delphi 12 Athens
 
#29

Re: Im with statement obj referenzieren

  Alt 16. Okt 2007, 13:19
Zitat von M. Hassmann:
klar geht das mit evaluate / modify und watches...
Vieleicht lerne ich noch was dazu

Folgender Code:

Delphi-Quellcode:
with TStringList.Create do
  begin
    Add('aaa');
    Add('aaa');
    Add('aaa');
    Add('aaa');
  end;
wie sieht die Expression aus, die ich in der Watchlist eingeben muss, um mir das property "count" der Stringliste anzeigen.

Nur "Count" geht nicht. Eine Variable (z.B. "fStringlist"), auf die ich zugreifen kann, ist nicht vorhanden.
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.294 Beiträge
 
Delphi 12 Athens
 
#30

Re: Im with statement obj referenzieren

  Alt 16. Okt 2007, 13:21
@marabu: Sehr schöne Zusammenfassung.
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 5     123 45      


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 17:23 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