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 2 von 3     12 3      
Benutzerbild von Sir Rufo
Sir Rufo

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

AW: With und Klassenmethoden

  Alt 16. Aug 2015, 01:44
Was ist an dem Beispiel von Uwe so unverständlich?

Nochmal, bei der Verwendung von with in einer Methode kann man eben nicht sicher sagen, worauf sich dort der Zugriff bezieht. Für den Moment mag das klar sein, aber wie sieht es in der Zukunft aus? Und wir sprechen hier nicht nur von den Klassen, die von Delphi selber kommen, sondern auch - oder gerade da - bei den Klassen, die man selber schreibt. Die sind doch nicht in Stein gemeißelt und können sich ändern.

Wenn ich jetzt bei jeder Änderung (neue Eigenschaft, Methode) immer den gesamten Code im Blick haben muss, ob da nicht irgendwo ein with verwendet wird und der Code auf einmal völlig anders reagiert. Die Anwendung kompiliert aber liefert nur Grütze. Jetzt kann man anfangen und alle Stellen heraussuchen, wo so ein with verwendet wurde, und sich jeden Code genau anschauen muss, um den korrekten Bezug wieder zu bekommen.

Spätestens nach dieser Erfahrung erklärt man with für böse und droht mit Teeren und Federn wenn irgendwer diesen Unfug wieder in den Code hineinbringt.

Ich vermisse das with nicht und brauche da auch keine Erweiterung.
Delphi-Quellcode:
var
  F:TFoo;
begin
  ...
  F := Feld[i+7*j].x[k];
  F.a:=F.b+F.c;
end;
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
Dejan Vu
(Gast)

n/a Beiträge
 
#2

AW: With und Klassenmethoden

  Alt 16. Aug 2015, 07:28
'with' ist für Tippfaule. Wer es in einfachen Konstrukten verwendet, würde von mir weder geteert noch gefedert. Beispiel:
Delphi-Quellcode:
With Combobox do
  SelectedIndex := Item.IndexOf(Text);
Da wird man wohl schwerlich etwas erweitern, sodass es unübersichtlich oder der Scope unklar ist/wird. Außerdem programmieren im Team keine Kleinkinder.

Gabeln sind übrigens auch böse, weil man sich und Andere damit verletzen kann und beim Suppeessen verhungern würde. Die Konsequenz? In den meisten Kulturkreisen wird darauf verzichtet (hat zwar auch andere Gründe, aber egal, passt jetzt nicht ).

Und das wiederum bedeutet für unser 'With': Es ist in vielen Programmiererkreisen schlichtweg überflüssig. Und natürlich ist es nebenbei auch verpönt. Aber das sollte nicht der Grund für das Vermeiden dieses Wurmfortsatzes sein. Man braucht es einfach nicht, und wenn man es braucht, kann man es eigentlich immer auch eleganter lösen.
  Mit Zitat antworten Zitat
idefix2

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

AW: With und Klassenmethoden

  Alt 16. Aug 2015, 08:29
Das Beispiel von Uwe ist schon klar, aber erstens ist eine eher seltene Ausnahme, und wäre durch eine einfache Compilerwarnung, dass im Bereich des With durch ein Feld der angegebenen Struktur eine andere Variable verdeckt wird, leicht aus der Welt zu schaffen, wenn Emba das einfach machen würde (ausser bei den Leuten, die in ihrem Code Dutzende Compilerwarnungen produzieren und sich nicht darum kümmern - aber die haben dann auch gravierendere Probleme).

Ebenso wäre eine Syntaxerweiterung auf die Art, wie ich sie vorgeschlagen habe, dafür eine Lösung. Natürlich kann man sich mit lokalen Variablen behelfen, aber das ist m.E. im Vergleich zum with-Konstrukt schwerfällig. Genauso, wie wenn man statt Klammern in Ausdrücken die Teilausdrücke auf lokale Variable zwischenspeichern würde.


Zitat:
Man braucht es einfach nicht, und wenn man es braucht, kann man es eigentlich immer auch eleganter lösen.
Nein, man kann es eigentlich immer auch umständlicher lösen.

Geändert von idefix2 (16. Aug 2015 um 08:44 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

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

AW: With und Klassenmethoden

  Alt 16. Aug 2015, 09:16
'with' ist für Tippfaule. Wer es in einfachen Konstrukten verwendet, würde von mir weder geteert noch gefedert.
Da "einfach" doch sehr relativ ist, meide ich With wie der Teufel das Weihwasser. Lieber 10 Zeichen mehr tippen, als stundenlang mit dem Debugger die falschen Werte kontrollieren.
Wer's trotzdem verwendet muß halt damit leben, darf sich dann hinterher aber nicht beschweren.

Gruß
K-H

P.S.
mit relativen Dateinamen ist genau das gleiche....
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

AW: With und Klassenmethoden

  Alt 16. Aug 2015, 11:16
'with' ist für Tippfaule. Wer es in einfachen Konstrukten verwendet, würde von mir weder geteert noch gefedert.
Und warum dann nicht gleich ganz abgewöhnen? Und was sind einfache Konstrukte? Das ist doch sehr schwammig formuliert und für jeden bedeutet "einfach" was anderes. Zumal der Quelltext in sich konsistenter wird, wenn man es generell vermeidet und nicht nur bei komplexen Konstrukten.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

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

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.877 Beiträge
 
Delphi 11 Alexandria
 
#7

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.813 Beiträge
 
Delphi 12 Athens
 
#8

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
 
#9

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
 
#10

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
Antwort Antwort
Seite 2 von 3     12 3      


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 12:38 Uhr.
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