AGB  ·  Datenschutz  ·  Impressum  







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

With und Klassenmethoden

Ein Thema von idefix2 · begonnen am 15. Aug 2015 · letzter Beitrag vom 17. Aug 2015
Antwort Antwort
Seite 4 von 4   « Erste     234   
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#31

AW: With und Klassenmethoden

  Alt 16. Aug 2015, 14:30
Ich benutze WITH heute noch da, wo das möglich ist, weil es den Code übersichtlicher macht.
Und genau hie rgehen die Meinungen auseinander. Neben der potentiellen möglichen Fehler und der Inkonsitenz im Code, wenn man es mal so und mal so macht.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.009 Beiträge
 
Delphi 12 Athens
 
#32

AW: With und Klassenmethoden

  Alt 16. Aug 2015, 16:57
Uwe, kannst du ein Sourcecode-Analyse-Tool empfehlen? Ich würde den Code gerne diesbezüglich mal überarbeiten.
Ich verwende dazu den Pascal Analyzer.

Der Parser läuft schneller, weil er weniger zu parsen hat.
Um mal auf die ursprüngliche Intention von with und die damaligen Einschränkungen hinzuweisen:

Zitat von Pascal User Manual and Report (1975):
The above notation can be a bit tedious, and the user may wish to abbreviate it using the with statement. The with clause effectively opens the scope containing the field identifiers of the specified record variable, so that the field identifiers may occur as variable identifiers. (Thereby providing an opportunity for the compiler to optimize the qualified statement.)

...

No assignments may be made by the qualified statement to any elements of the record variable list. That is, given:
with r do S
r must not contain any variables subject to change by S.
Vereinfachte Schreibweise war wohl nur ein netter Nebeneffekt. Die Optimierung des Compilers war damals halt viel wichtiger. Und Ändern des Records innerhalb with ging auch nicht.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#33

AW: With und Klassenmethoden

  Alt 16. Aug 2015, 18:09
Zitat:
Und Ändern des Records innerhalb with ging auch nicht.
Ich denke, das dürfte ein Mißverständnis sein. Was hier gemeint sein dürfte und nach meiner Erinnerung die allererste Pascal Implementierung auf der CDC, auf der ich mein Studium begonnen habe, verboten hat, war eine Veränderung von Variablen, die zur Adressberechnug des Objekts benötigt worden sind.
Code:
with x[i] do
   begin
   i:=i+1
   ...
   end;
Diese Einschränkung ist allerdings zumindest in einer etwas späteren Version sehr bald gefallen. Man konnte im with Block dann auch Variable verändern, die für Berechnung der record Adresse benötigt wurden (sogar ohne dass das das Objekt des With verändert hätte). Beim Bearbeiten von Listen war dann absolut üblich
Code:
while p<>nil do
  with p^ do
    begin
    ...
    p:=next;
    end;

Ich glaube, alle Vorteile von 'with' wurden zur Genüge erwähnt:
Haben wir immer so gemacht
Habe ich so ... gelernt.
Der Parser läuft schneller, weil er weniger zu parsen hat.
Andere gibt es nicht.


Ich finde es schade, dass sich Emba nicht dazu entschliessen kann, durch eine simple Erweiterung der Syntax die Schwachstellen des with zu eliminieren. Tatsächlich trägt with dazu bei, den Code optisch besser zu strukturieren und damit übersichtlich zu machen. Leider in der aktuellen Syntax mit gewissen Risken, die gegenüber dem Vorteil manchmal überwiegen.

Geändert von idefix2 (16. Aug 2015 um 18:56 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.126 Beiträge
 
Delphi 10.3 Rio
 
#34

AW: With und Klassenmethoden

  Alt 17. Aug 2015, 06:58
With ist BÖSE
Ist doch quatsch...

With erspart Tiparbeit...

With einfach nur nicht für die letzte Ebene nehmen...

Beispiel:

Gegeben sei ein XML-Node: Balbla.blubblub.foofoo.barbar

Dann einfach
Delphi-Quellcode:
  With Balbla.blubblub do
    begin
      foofoo.barbar := 'Cool'
    end;
nehmen und nicht

Delphi-Quellcode:
  With Balbla.blubblub.foofoo do
    begin
      barbar := 'UnCool'
    end;
und schon ist alles prima...
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: With und Klassenmethoden

  Alt 17. Aug 2015, 07:05
Das wäre vielleicht die Lösung für den Fall den Uwe angesprochen hat (gemeint ist äusserer scope, der dann aber auf den inneren angewandt wird), aber sorgt dann dafür, dass es nun im umgekehrten Fall nicht funktioniert ( Entwickler erweitert den inneren scope, übersieht aber das die Eigenschaft übergeordnet schon existiert). Das Problem könnte man nur lösen, indem man die Möglichkeit schafft, den scope in den Eigenschaften zu spezifizieren ( wie in VB durch den Punkt asl Suffix).
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.763 Beiträge
 
Delphi 11 Alexandria
 
#36

AW: With und Klassenmethoden

  Alt 17. Aug 2015, 08:04
Mavarik: With zerstört innerhalb seines Gültigkeitsbereichs die Fähigkeit des Debuggers Feldinhalte anzuzeigen. Darum gibt es bei mir kein with. Alles andere ist mir absolut egal. Das geschilderte Verhalten sticht alles aus, und macht damit with für mich zu einem NoGo.

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#37

AW: With und Klassenmethoden

  Alt 17. Aug 2015, 08:08
Die Verwendung von with ist deswegen böse, weil es nur unter ganz speziellen Bedingungen halbwegs sicher ist (nur ein Scope -> nicht in einer Methode, ...).

Die Verwendung von try ... except {nix} end; ist deswegen böse, weil es nur unter ganz speziellen Bedingungen halbwegs sicher ist (in dem Codeblock kommen gar keine Exceptions, das Programm ist 100% fehlerfrei, ...).

Mit überhöhter Geschwindigkeit fahren ist auch böse, weil es auch nur unter ganz speziellen Bedingungen halbwegs sicher ist (abgesperrte Strecke, ...).

Das Risiko muss jeder für sich selber abschätzen. Wer kein Bock auf Risiko oder Random Application Developing hat - was macht meine Anwendung denn heute so - oder eben eine Anwendung die ohne erkennbaren Grund nicht mehr das macht, was sie machen soll, der verzichtet einfach auf die Verwendung von with , try ... except {nix} end; bzw. ballert nicht mit 120 durch eine Ortschaft.

Wenn es dann knallt, dann verbitte ich mir jedes wehleidige Gejammer "Das habe ich nicht gewollt!" - glaube ich sofort, aber billigend in Kauf genommen. Denn zu jedem Risiko gehört auch der richtige Hintern, den man dann in der Hose haben sollte, wenn es knallt. Erfahrungsgemäss ist das Verhältnis zwischen Risikobereitschaft und Hintern eher umgekehrt proportional
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#38

AW: With und Klassenmethoden

  Alt 17. Aug 2015, 10:52
Wenn es dann knallt, dann verbitte ich mir jedes wehleidige Gejammer "Das habe ich nicht gewollt!" - glaube ich sofort, aber billigend in Kauf genommen.;
Oder aus Unwissenheit gemacht, wenn so viele es machen kann's doch nicht falsch sein?

Denn zu jedem Risiko gehört auch der richtige Hintern, den man dann in der Hose haben sollte, wenn es knallt. Erfahrungsgemäss ist das Verhältnis zwischen Risikobereitschaft und Hintern eher umgekehrt proportional


Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.346 Beiträge
 
Delphi 11 Alexandria
 
#39

AW: With und Klassenmethoden

  Alt 17. Aug 2015, 13:20
wenn so viele es machen kann's doch nicht falsch sein?
Das hat fast wortwörtlich eine ehemalige Nachbarin bezüglich ihres Rauchens gesagt. Und hinterher sinngemäß das:
wehleidige Gejammer "Das habe ich nicht gewollt!"
Sie ist vor 4,5 Jahren an Lungenkrebs gestorben.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 4   « Erste     234   


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 20:53 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