Delphi-PRAXiS
Seite 4 von 5   « Erste     234 5      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Guter Code (https://www.delphipraxis.net/195247-guter-code.html)

Solutor 28. Feb 2018 15:59

AW: Guter Code
 
Der Vorschlag guter Code....
...enthält kein with..do , denn oft genug versteht der Compiler das nicht so wie der Programmierer.

Widerspricht dem was Borland in seinen Handbüchern zur Programmierung empfiehlt.

Es ist korrekt, dass dies nicht immer zu empfehlen ist, erst recht wenn man das Ganze verschachtelt.
Ich mache dies oft bei Ereignisbehandlungsmethoden wie OnDrawCell usw.
Man muss hierbei einfach nur wissen, ob bestimmte Parameter und Eigenschaften/Variablen sich da nicht gegenseitig in die Quere kommen.
Einige Variablen/Methoden sind in verschiedenen Units vorhanden und haben daher trotz gleichen Namens einen anderen Bezug.

Doch jedes Mal voll zu referenzieren, macht viel Tipparbeit und den Code nicht immer übersichtlicher.

Wenn man ungewöhnliches macht, bzw. unerwartetes, dann hilft einfach ein entsprechender Kommentar um das Ganze zu erläutern.

haentschman 28. Feb 2018 16:03

AW: Guter Code
 
Moin...:P

Zitat:

Widerspricht dem was Borland in seinen Handbüchern zur Programmierung empfiehlt.
...die lernen auch dazu. :zwinker:

Hast du schon mal einen Fehler gesucht in Quelltext den du nicht programmiert hast und der von with strotzt? Wahrscheinlich nicht. Denn du wirst fluchen, das du im Debugger keine Variablenwerte siehst! Das ist ein NoGo für mich...ein gutes Werkzeug nicht benutzen zu können!
Viel Spaß...:roll:

hoika 1. Mär 2018 06:38

AW: Guter Code
 
Hallo,
also ich bin eigentlich ein Verfechter des with in Zusammenhang mit Queries,
weil es einfach so schön einfach ist.


Delphi-Quellcode:
var
  Q: TQuery;

..

with Q do
begin
  SQL.Clear;
  SQL.Add()
  Open;
end;
Close;
Aber gerade für Anfänger ist das sehr schwer (Stichwort Debugging, wie oben schon geschrieben wurde).

Such-Rätsel:
Wer findet den obigen Fehler ?

PS: Der war wirklich so in einem (Anfänger-) Code ...

TigerLilly 1. Mär 2018 06:53

AW: Guter Code
 
Zitat:

Zitat von Solutor (Beitrag 1394860)
... Man muss hierbei einfach nur wissen, ob bestimmte Parameter und Eigenschaften/Variablen sich da nicht gegenseitig in die Quere kommen.
...
Wenn man ungewöhnliches macht, bzw. unerwartetes, dann hilft einfach ein entsprechender Kommentar um das Ganze zu erläutern.

Na eben nicht. Ein Styleguide, eine SOP, good-code-principles etc haben eben den Zweck, dass man nicht nachdenken soll, wie man bestimmte Dinge angeht. Denn wenn ich jedes Mal nachdenke + entscheide, ob ich von meiner Vorgabe abweichen kann, weil da eh nichts passiert, habe ich schon genau die Fehler, die ich mit meinen Vorgaben verhindern wollte.

Wem die Tipparbeit zu viel wird, kann ja eine Variable benutzen + mit der weiterarbeiten.

@Kommentar: Wenn so ein Kommentar notwendig ist, ist das ein Hinweis auf schlechten Code.

Sherlock 1. Mär 2018 07:19

AW: Guter Code
 
Natürlich ist Quelltext selbsterklärend. Aber genauso natürlich gibt er nicht die Absicht des Entwicklers preis, die den Hintergrund seines Entstehens bildet.
Wenn also in einer Methode zum auffinden und löschen von Dubletten in einer Personen-Tabelle plötzlich Bestandteile eines Dienstes angehalten werden...kommentarlos (wie ich gerade gestern in einem Python Stück fand), dann darf man sich schon mal wundern.

Edith mahnt noch, daß sie keinesfalls ein "egal, welche Absicht hinter Code steckt, so lange er lesbar ist" hören möchte.

Sherlock

himitsu 1. Mär 2018 08:02

AW: Guter Code
 
Für kurzen Code und vorallem nicht verschachtelt, kann WITH auch mal praktisch sein und manchmal sogar den Code lesbarer machen,
aber der Code im WITH sollte dann nicht zu lang sein (dafür nimmt man ja meistens WITH, um zu kürzen) und nach Möglichkeit sollte nichts "Mehrdeutiges" drin vorkommen.

Lesbarer/Optimaler bei
Delphi-Quellcode:
with irgendwasgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanzlangem do
das dann anschließend mehrmals verwendet wird.
Ist dieses "irgendwas" etwas, dass aufwauch ändig/langatmig ist, dann wird hierdurch die Ausführung beschleunigt, aber das Gleiche würde man auch mit einer einbuchstabingen Variable erreichen.

Billiges Antibeispiel:
Delphi-Quellcode:
procedure TMyForm.AnEvent(...);
begin
  with MyTRectVar do
    Width := Right - Left + 1;
end;
Früher ging das, da
Delphi-Quellcode:
{Self.}Width := {MyTRectVar.}Right - {MyTRectVar.}Left + 1;
,
aber dann wurde was Neues erfunden. Delphi-Referenz durchsuchenTypes.TRect.Width :lol:

Delphi.Narium 1. Mär 2018 08:29

AW: Guter Code
 
Zitat:

Zitat von hoika (Beitrag 1394888)
Hallo,
also ich bin eigentlich ein Verfechter des with in Zusammenhang mit Queries,
weil es einfach so schön einfach ist.


Delphi-Quellcode:
var
  Q: TQuery;

..

with Q do
begin
  SQL.Clear;
  SQL.Add()
  Open;
end;
Close;
Aber gerade für Anfänger ist das sehr schwer (Stichwort Debugging, wie oben schon geschrieben wurde).

Such-Rätsel:
Wer findet den obigen Fehler ?

PS: Der war wirklich so in einem (Anfänger-) Code ...

Frage ernst gemeint?

Abfrage öffnen und Programm beenden ;-)

Man wird das Ergebnis halt nie zu Gesicht bekommen, aber das das SQL leer ist, ist das weiter nicht schlimm ;-)

@All
Und ja: Mit With arbeiten spart Schreibarbeit.
Und ja: Für die Fehlersuche braucht man entsprechend länger (oft viel länger, als die eingesparte Schreibarbeit).

Bei with muss man sehr genau wissen, welche "Querschläger" es geben kann und diese alle ausschließen.

Das ist fast unmöglich, also ist die zusätzliche, angeblich vermeidbare "Schreibmehrarbeit", nur in sehr seltenen Fällen eine wirkliche Ersparnis.

Oft ist es sinnvoller, auf with zu verzichten (wer konsequent immer drauf verzichtet, macht nix falsch). Das, was man zusätzlich schreiben muss, ist immer identisch und kann per Copy&Paste jeweils mit sehr wenig Schreibarbeit (eimal Strg+C und dann Strg+V) wiederholt eingefügt werden.

Meine Erfahrung mit with ist eigentlich: Insbesondere in fremden Code kann es sehr verwirrend sein, wenn der verbleibende Quelltext zwar kompilierbar und sogar korrekt ausführbar ist, aber Zusammenhänge nicht mehr zwingend erkennbar sind.

jaenicke 2. Mär 2018 17:56

AW: Guter Code
 
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... :roll: Und dann auch noch erst einmal herausfinden wie genau ich das korrigieren muss... :roll:

Delphi-Laie 2. Mär 2018 18:30

AW: Guter Code
 
Zitat:

Zitat von jaenicke (Beitrag 1395077)
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... :roll: Und dann auch noch erst einmal herausfinden wie genau ich das korrigieren muss... :roll:

"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.

dummzeuch 2. Mär 2018 18:41

AW: Guter Code
 
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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:08 Uhr.
Seite 4 von 5   « Erste     234 5      

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