AGB  ·  Datenschutz  ·  Impressum  







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

Guter Code

Offene Frage von "jaenicke"
Ein Thema von PascalDeveloper · begonnen am 14. Feb 2018 · letzter Beitrag vom 2. Mär 2018
Antwort Antwort
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#1

AW: Guter Code

  Alt 2. Mär 2018, 18:30
Man sieht bei Upgrades der Delphiversion immer wieder in welcher Delphi-Bibliothek wieder jemand with benutzt hat. Denn das fällt ständig auf die Füße. Ohne with hätte ich viele Quelltexte von Delphi 7 einfach so unter 10.2 kompilieren können. Nur with muss ich bei jeder Version irgendwo korrigieren... Und dann auch noch erst einmal herausfinden wie genau ich das korrigieren muss...
"with" benutzte ich nur früher ausnahmsweise, wohl eher, um es auszuprobieren, seit vielen Jahren jedoch nicht mehr. Ganz einfach, weil es auch für mich selbst die Programmlesbarkeit erschwert. Die Tipperei ist für mich jedenfalls kein Argument, außerdem kann man ja "Guttenberg spielen".

Wenn ich die nicht enden wollende Kritik an diesem "Komfortbefehl" lese, ist "with" also irgendwo zwischen bäh-bäh und ziemlich bis ganz böse einzuordnen.

Vielleicht sollte man es auf den Index setzen, so, wie es den armen Labels und dazugehörigen Gotos geschah. Wobei ich letztere dosiert doch verwende.
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.686 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: Guter Code

  Alt 2. Mär 2018, 18:41
Nur mal so am Rande:

With gibt es auch verschärft:
Delphi-Quellcode:
with A, B, C, D do
  PropertyVonA := MethodVonB(FieldVonC, MethodVonD);
end;
Wer solchen Code noch nicht gesehen hat, sollte sich für die Gnade seiner späten Geburt bedanken. Das war zu Turbo/Borland Pascal-Zeiten leider durchaus üblich. Und noch schlimmer: Auch ich habe damals solchen Code geschrieben.

Wenn sich dabei auch nur einer der 4 Typen minimal ändert, knallt es gewaltig.
Thomas Mueller
  Mit Zitat antworten Zitat
mensch72

Registriert seit: 6. Feb 2008
838 Beiträge
 
#3

AW: Guter Code

  Alt 2. Mär 2018, 18:59
was bin ich froh, das es solches "with" in C++ nicht gibt

Löse das früher wie heute als simple zusätzliche typisierte Pointervariablen. Das funktioniert in Delphi wie in C/C++
Positiver Nebeneffekt: man kann solche Pointervariablen vorab auch selbst auf NIL/NULL prüfen, denn das gibt per "with" stets häßliche Exeptions

Ganz ehrlich: ganz ohne Wissen nur mit aktuell eh stets verfügbarer Quelltextvervollständigung über "Q." oder "Q->" tippt man doch sogar weniger wie "SQL".
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.360 Beiträge
 
Delphi 12 Athens
 
#4

AW: Guter Code

  Alt 2. Mär 2018, 19:17
Gibt es in C nicht die Variante vom With, wo man auch einen lokalen Alias (Variable) mit angeben kann?
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
mensch72

Registriert seit: 6. Feb 2008
838 Beiträge
 
#5

AW: Guter Code

  Alt 2. Mär 2018, 20:22
..."wo man auch einen lokalen Alias (Variable)"...
yo, innerhalb eines { Blocks

also z.B. ala "with xarray[a]"
{
Xtype *xt=&xarray[a];

//dann weiter mit
xt->...
}

das mach ja schon jeder bessere "C/C++ <-> Delphi" Konverter
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.360 Beiträge
 
Delphi 12 Athens
 
#6

AW: Guter Code

  Alt 2. Mär 2018, 20:44
Ich würde bei Pascal jetzt nicht unbedingt solche Variablendeklarationen mitten im Code einführen,
aber ein with x := xyz do wäre auch was Nettes und würde nicht der Syntax des Pascal wiedersprechen, bzw. nicht mit der aktuellen Syntax kollidieren.

Delphi-Quellcode:
var
  xyz: TComponent;
begin
  ...
  with x := xyz do begin
    ShowMessage(x.Name);
  end;
end;
X wäre eine temporäre "lokale" Variable, mit dem Typen (CompileTime), welcher dort zu zugewiesen wird, innerhalb dieses Blocks.
Hier würde mann quasi den Namespace "x" definieren und würde nicht den Namespace der Methode kompromitieren ("xyz" als neuen "automatischen" Namespace).

Automatische Variablen legt Delphi ja auch so öfters schon an.
* Für Rückgaben von Funktionen, welche aber nicht angenommen werden, wie z.B. trim(s) ohne links eine Variable.
* Und für Zwischenergebnisse von Berechnungen, sowie bei verschachtelten Methoden/Propery x.abc.def , also das Result von abc.
* ...
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 2. Mär 2018 um 20:50 Uhr)
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#7

AW: Guter Code

  Alt 2. Mär 2018, 21:07
Eigentlich könnte man das Problem mit dem with ja recht einfach lösen, indem man vor jedem Bezeichner, das zum with gehört, einen Punkt setzen muss.
Delphi-Quellcode:
with xyz do begin
  ShowMessage(.Name);
end;
Das hat mich schon immer leicht gestört, dass das nicht so gelöst wurde. Denn so wäre es immer eindeutig.
  Mit Zitat antworten Zitat
Antwort Antwort

 

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 16:51 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