![]() |
AW: Die "richtige" Sourcecode Formatierung?
Zitat:
|
AW: Die "richtige" Sourcecode Formatierung?
Zitat:
Den Debugger brauche ich fast nur, um bei einem Fehler, den ich nicht finde, die IDE beim Auftreten des Fehlers mir die Stelle zeigen zu lassen, an der der Fehler auftritt. Keine Ahnung, was ich "falsch" mache, aber der Debugger ist bei mir das Teil, dass ich am wenigsten nutze ;-) Eventuell liegt es auch daran, dass ich Programme immer mit Debuginfos und Map-Datei erstelle, die Fehlerbehandlung der Jedis nutze und von daher in der Fehlermeldung immer angezeigt bekomme, in welcher Unit und in welcher Quelltextzeile der Fehler aufgetreten ist. Daher brauche ich (kaum) mal den Debugger, um fündig zu werden. Abgesehen davon sind die Kombination von If-Then-Befehl nur selten kürzer als ca. 80 Zeichen und ich schrieb ja, dass ich bei "langen" If-Anweisungen ein Begin-End folgen lasse und somit der Dreizeiler der Normalfall ist. |
AW: Die "richtige" Sourcecode Formatierung?
Zitat:
Case geht da nicht? :cry: [Edit] Okay..Ich hab Zeilen gelesen..Sorry :) |
AW: Die "richtige" Sourcecode Formatierung?
Zitat:
Oder sagen wir mal so: Ich schreibe Quelltext so wie ich Denke, der Quelltext bildet (meist) die Struktur meiner Gedankengänge (sofern ich denn mal welche habe ;-)) wieder. Wer anders an eine Problemlösung herangeht, schreibt den Quelltext auch entsprechend. Und das finde ich absolut korrekt. Es ist nicht hilfreich, wenn ich von anderen erwarte, dass sie ihren Quelltext so schreiben, dass er meiner Denkweise entspricht. Das wird (fast) immer schiefgehen, so wie ich Quelltexte nicht in der Denkstruktur anderer schreiben kann, da scheitere ich auch immer. Pascal/Delphi ist die Sprache, in der es mir am Einfachsten fällt, logische Gedanken "zu Papier" zu bringen. Bei C++ /Java ... hab' ich immer den Eindruck, um das zu verstehen, muss ich rückwärts denken. Kollegen, die eher und lieber in C++, Java ... programmieren, sagten mir mal, dass es ihnen bei Pascal/Delphi genauso geht. Für mich ist bei der Quelltextformatierung wesentlich, dass sie mit der logischen Struktur des Programmierten "zusammenpasst". Der Rest ist eher "Beiwerk". In größeren Projekten und / oder Teams, sollten sich aber alle Beteiligten an eine einheitliche Form der Quelltextformatierung (aber auch der Vergabe von Variabel-, Funktions- ... und Sonstigesnamen) halten. Dadurch erscheint mir die Verständlichkeit von Quelltexten zu steigen. |
AW: Die "richtige" Sourcecode Formatierung?
[HUMOR]
Auf die ursprünglich Frage - Die "richtige" Sourcecocde Formatierung - kann es NUR eine Antwort geben -----> 42 [/HUMOR] Greez, Chris |
AW: Die "richtige" Sourcecode Formatierung?
Wenn man sich an Clean Code hält (was primär eigentlich nix mit der Formatierung des Codes zu tun hat), ergeben sich viele hier gezeigte Fälle erst gar nicht, weil Methoden nicht über zig if Bedingungen oder Verschachtelungen verfügen (z.B. Hallo Polymorphie und Strategie Pattern).
Auch so manch "cleveres" Code Konstrukt ließe sich weitaus einfacher schreiben, wenn man z.B. das Null Objekt Pattern anwenden würde. Was die restliche Formatierung angeht, halte ich mich weitgehend an den Borland Guide und versuche so zu formatieren, dass ich den von der IDE generierten Code nicht noch ändern muss. |
AW: Die "richtige" Sourcecode Formatierung?
Zitat:
Delphi-Quellcode:
:zwinker:
case NeutralGeneral.isright of
true : begin end; false : NeutralGeneral.isright:=true; end; Gruß K-H |
AW: Die "richtige" Sourcecode Formatierung?
Delphi-Quellcode:
wobei jeder Case bei mir ein ELSE haben muss :lol:
case NeutralGeneral.isright of
true: begin end; false: begin NeutralGeneral.isright := true; end; end;
Delphi-Quellcode:
case NeutralGeneral.isright of
false: begin NeutralGeneral.isright := true; end; else begin end; end; |
AW: Die "richtige" Sourcecode Formatierung?
Zitat:
|
AW: Die "richtige" Sourcecode Formatierung?
Zitat:
Delphi-Quellcode:
Um jetzt festzustellen, dass es nicht mehr klappt, wenn da irgend etwas sinnvolles steht - cooles Feature ~.~
if 1=1 then
Exit; |
AW: Die "richtige" Sourcecode Formatierung?
Zitat:
|
AW: Die "richtige" Sourcecode Formatierung?
Zitat:
(könnte man uU auch bei der Formatierung so sehen; aber ein paar andere Sichtweisen können ja nicht schaden) Gruß K-H |
AW: Die "richtige" Sourcecode Formatierung?
Zitat:
Eine Code-Zeile wir i.d.R. 1x geschrieben 10x gelesen Also ist ganz klar, ich muss mich entlasten... Das geht natürlich über die Formatierung hinaus... Dafür braucht es Regeln (Ganz alleine für mich) Argumente haben ein A-davor... Also
Delphi-Quellcode:
Setter haben immer eine AValue egal von welchen typen.
Procedure (Const AValue : String);
begin end; Array Getter und Setter haben immer INDEX <- auch in Capslock geschrieben damit es auffällt. Type immer ein T Interfaces immer ein I Lokale Variablen immer ein L... (Außer unsere geliebte For-Schleifen-Variable (i) ) Früher hatten Records immer ein Typ dahinter Datum : DatumsTyp; Zeit : ZeitTyp; (Aus UCSD-Pascal Zeiten) Bei einer Zeile Wert := Werte; Was ist da Werte? Wert := Werte(); // Klar Wert := IWerte; // Klar; Wert := AValue; // Auch klar Generische Parameter heißen Arg1 Arg2 Arg3 Generische Record Bestandteile heißen Item1, Item2, Item3 Generische Typen heißen <T> oder es wird die Funktionalität bezeichnet <TResult>, <TArg>, <TSource>, <TDestination> usw... vor und nach einem " := " kommt eine Leertaste Das letzte end; <- hat auch ein ";" auch wenn es nicht gebraucht wird. Von Oliver übernommen "( Parameter : Integer )" vor und nach den () von Parametern eine Leertaste. "{}" Als Augenpunkt: Hier geht es weiter und damit der Autoformatter die Zeile nicht ändert. Dann noch die praktischen Sachen..
Delphi-Quellcode:
Einfacher um mal eben eine Unit mit // aus zu schalten...
Uses
System.SysUtils ,Unit1 ,Unit2 ; Ich könnte noch ewig so weiter machen - stelle ich gerade fest... Mavarik :coder: |
AW: Die "richtige" Sourcecode Formatierung?
Zitat:
Das mit dem ELSE war kein Spaß. |
AW: Die "richtige" Sourcecode Formatierung?
Spaß bezog sich auch eher auf NeutralGeneral.IsRight
Gruß K-H |
AW: Die "richtige" Sourcecode Formatierung?
Zitat:
Delphi-Quellcode:
so schnell wird Spaß zum Ernst des Lebens ;-)
case NeutralGeneral.isright of
false: begin NeutralGeneral.isright := true; end; true: begin end else begin raise Exception.Create(); end; end; Zitat:
|
AW: Die "richtige" Sourcecode Formatierung?
Zitat:
Welche Information bringt es mir, zu sehen, von welcher Art der rechte Ausdruck ist - imo ist diese Information unnötig und in der Regel nicht notwendig. Da man normalerweise seine Elemente vernünftig benennt (und ich meine nicht mit nem Prefix, obs ein Parameter, lokale Variable oder sonst was ist, sondern das, was dieses Element an Daten enthält), ergibt sich die Frage, ob ich eine Funktion aufrufe oder aus einer lokalen Variable oder einem Parameter den Wert hole, beim Lesen nicht. Zitat:
Delphi-Quellcode:
Bei deiner kannst du SysUtils nicht einfach rausnehmen, da dann das Komma vor Unit1 stört, bei meiner nicht Unit2, da dann das Semikolon fehlt. In beiden Fällen gibt es eine Zeile, die nicht funktioniert. Und in beiden Fällen kann man die Units ein einer solchen Reihenfolge schreiben, dass die problematische Zeile eine ist, die man in den meisten Fällen nicht auskommentieren möchte (ok, wenn nun in Unit1 oder Unit2 Symbole aus SysUtils verdeckt werden, dann hat man bei einer Umordnung natürlich gelitten, aber wer macht sowas schon :roll:).
uses
System.SysUtils, Unit1, Unit2; |
AW: Die "richtige" Sourcecode Formatierung?
Zitat:
1. Ich weiß sofort worum es geht ohne zu scrollen... 2. Wenn ich einen Funktionsaufruf sehe... Ist es eben keine einfache Zuweisung... Bedeutet bei einem Refactoring nach:
Delphi-Quellcode:
Muss ich nachsehen, ob darin nicht etwas steht wie:
begin
TTask.Run(Procedure begin Wert := Werte(); // Zugriff auf VCL??? end; end;
Delphi-Quellcode:
Function Werte : Integer;
begin Caption := 'Wert geholt'; Result := 42; end; Zitat:
Wenn ich also eine Liste habe kann ich einfach "meine" Units raus nehmen...
Delphi-Quellcode:
Uses
System.SysUtils // ,Unit1 ,Unit2 ;
Delphi-Quellcode:
Uses
System.SysUtils ,Unit1 // ,Unit2 ;
Delphi-Quellcode:
Klasse oder?
Uses
System.SysUtils // ,Unit1 // ,Unit2 ; Mavarik :coder: |
AW: Die "richtige" Sourcecode Formatierung?
Zitat:
1. unpassender Name, der nämlich genau dazu führt, dass ich nachschauen muss, was sie macht -> sowieso schlecht 2. Funktion macht mehr als eine Sache (was wiederum dazu verleitet ihr einen prägnanten/unaussagekräftigen Namen zu geben) Zitat:
|
AW: Die "richtige" Sourcecode Formatierung?
Das mit den Units, mache ich genauso wie Mavarik, wobei man bei der ersten Unit natürlich gekniffen ist.
Man kann halt nicht alles haben. Zitat:
Gruß K-H |
AW: Die "richtige" Sourcecode Formatierung?
Zitat:
|
AW: Die "richtige" Sourcecode Formatierung?
Zitat:
Das sieht visuell zumindest ordentlicher aus in meinen Augen. So ein Komma als Anfang der Zeile vor einem Wort sieht komisch aus. |
AW: Die "richtige" Sourcecode Formatierung?
Zitat:
SQL-Code:
und nach der Syntax gehört das Komma zur zweiten Unit.
select feld1
,feld2 ,feld3 as Umsatz ,feld5 as Rabatt from tabelle1..... Gruß K-H |
AW: Die "richtige" Sourcecode Formatierung?
Zitat:
Delphi-Quellcode:
if (Bedingung) then
Anweisung; if (Bedingung) then begin Anweisung; end; if (Bedingung) then begin Anweisung1; end else begin Anweisung2; end; if (Bedingung1) then begin Anweisung1; end else if (Bedingung2) then begin Anweisung2; end;
Delphi-Quellcode:
usw. usw.
procedure NamenSindGanzWichtig;
begin Anweisung; end; procedure NamenSindGanzWichtig; var blaBla: String; begin Anweisung; end; |
AW: Die "richtige" Sourcecode Formatierung?
Mal ne andere Sache.
Seit in Delphi vermehrt Unit-Scopenames verwendet werden, wird die Units-Deklaration immer größer. Früher sah es so aus:
Delphi-Quellcode:
Jetzt sieht es so aus:
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Dateedit, Buttons, ExtCtrls;
Delphi-Quellcode:
Vorher schon unübersichtlich. Jetzt ganz unübersichtlich.
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, Vcl.Graphics, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Controls, Vcl.Buttons, Vcl.ExtCtrls, System.Classes, Stelle jetzt meine Units auf folgende Schreibweise um.
Delphi-Quellcode:
Sinnvoll oder nicht?
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Classes, Vcl.Graphics, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Controls, Vcl.Buttons, Vcl.ExtCtrls; Wie handhabt Ihr das? |
AW: Die "richtige" Sourcecode Formatierung?
Zitat:
|
AW: Die "richtige" Sourcecode Formatierung?
Bei Forms und allem, wo mir die IDE Units reinkleistert, lass ich es so, in reinen Sourcecode Units untereinander.
|
AW: Die "richtige" Sourcecode Formatierung?
Ich sortiere sie ein wenig, um es übersichtlicher zu gestalten:
Delphi-Quellcode:
Edit: Wie die Sortierung/Gruppierung letztlich aussieht, hängt immer vom Projekt ab. Häufig teile ich Standard noch in System/GUI/Sonstiges oder Eigen ab einer gewissen Unitzahl in Spezifischeres auf.
uses
{ Standard } System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Graphics, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.StdCtrls, { Indy } IdIOHandler, IdIOHandlerSocket, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP, IdCookieManager { Indy SSL } IdIOHandlerStack, IdSSL, IdSSLOpenSSL, { Eigen } Unit_HTTP, Unit_HTTPS, Unit_Modulverarbeitung {}; |
AW: Die "richtige" Sourcecode Formatierung?
Woher kommt eigentlich dieses lästige und überflüssige A am Anfang von Parametern (z.B. "AValue")?
Im Delphi Style Guide ( ![]() Im Delphi Sourcecode - z.B. ![]() Handelt es sich um eine Modeerscheinung? ;) |
AW: Die "richtige" Sourcecode Formatierung?
Im Delphi Source findet man das durchweg an vielen Stellen - wird aber nicht konsequent durchgezogen, aber schau mal in Classes.pas z.B.
Da Delphi nunmal nicht case sensitiv ist, bietet es sich an, Parameter zu prefixen, damit es keine potenziellen Namenskollisionen gibt. |
AW: Die "richtige" Sourcecode Formatierung?
Zitat:
Interfaces liegen in einem Unterordner Interfaces und heißen dann z.B. Common.Interfaces.Utils.StringTools.pas. So findet man zu Klassen und Interfaces schnell den Unitnamen und auch das Verzeichnis, in dem die Unit liegt. Das finde ich sehr viel sinnvoller als ein Unit_ oder ähnliches voranzustellen. Denn dass es eine Unit ist, weiß ich auch so. Durch den Namespace Common weiß ich, dass es eine gemeinsame Unit ist, die nicht in das Projekt eingebunden sein muss um benutzt zu werden. (Die werden bei uns separat kompiliert.) Ich habe also eine Mehrinformation, was bei Unit_ nicht der Fall ist. (Es sei denn du machst das genauso, nur mit Unit_ und Project_, was dann aber erst recht für Namespaces spräche.) Vom Untereinanderschreiben halte ich wenig. Entweder sind es so wenige Units, dass man sie eh überblickt, oder es sind (z.B. in einem Datasnap oder FireDAC Datenmodul) so viele, dass sie untereinander geschrieben auch nicht leichter überschaubarer sind. Dazu kommt, dass Error Insight ja anzeigt, wenn eine Unit fehlt. Leider kommt dazu ein Störrauschen von falschen Meldungen, aber wenn man sich dran gewöhnt hat, lassen sich diese recht gut von echten Meldungen unterscheiden. Wenn es zu viele falsche sind, bringt es natürlich nichts mehr. Zitat:
![]() Ich benutze das A auch, weil Parameter einer Methode so eindeutige Namen bekommen. Denn Test als Name des Paramaters würde zwar funktionieren, wäre aber sehr unsauber, weil die Property auch so heißt:
Delphi-Quellcode:
Und daher finde ich es sehr sinnvoll durchweg das A als Prefix zu verwenden.
type
TExample = class private FTest: Integer; public constructor Create(const ATest: Integer); property Test: Integer read FTest write FTest; end; constructor TTest.Create(const ATest: Integer); begin FTest := ATest; end; |
AW: Die "richtige" Sourcecode Formatierung?
Zitat:
Sherlock |
AW: Die "richtige" Sourcecode Formatierung?
Zitat:
Diese Art der Bezeichnung stammt noch aus meiner ganz frühen Lernphase, und da erschien mir das als Abgrenzung zu den Standardunits (damals unter Delphi 5/7) vernünftig, denn bei all den Komponenten habe ich das ja auch so gemacht :-D (Form_Anmeldung, Button_Ablehnen...). Da ich aber noch nie so viele eigene Units in einem Projekt verwendet habe, dass ich Untergruppen bräuchte, bin ich seitdem auch nie auf Namespaces umgestiegen. Irgendwann, wenn ich mal ein wirklich großes Projekt habe, mache ich das vielleicht (ich habe es überlegt, als ich mir damals XE5 zugelegt hatte). |
AW: Die "richtige" Sourcecode Formatierung?
Zitat:
Zitat:
Gruß K-H |
AW: Die "richtige" Sourcecode Formatierung?
Zitat:
Einen Fall wie den von dir genannten sehe ich hingegen nirgends. Worauf beziehst du dich denn da? Im RTL oder VCL Quelltext meine ich. Zitat:
Das macht auch mehr Sinn als ein deutscher Bezeichner... :kotz: |
AW: Die "richtige" Sourcecode Formatierung?
Zitat:
Sherlock |
AW: Die "richtige" Sourcecode Formatierung?
Zitat:
Delphi-Quellcode:
begin
HöreAufDemEinAusgangsKanal(10230); end; |
AW: Die "richtige" Sourcecode Formatierung?
Zitat:
![]() // EDIT: Zitat:
Das macht den Code nicht übersichtlicher... Beispiel aus freier Wildbahn:
Delphi-Quellcode:
:pale:
if SchnellstartHaken.Checked or ZwangsstartAktiviert then
begin StartenKnopf.Click; Exit; end; |
AW: Die "richtige" Sourcecode Formatierung?
Zitat:
Delphi-Quellcode:
Selbst wenn das funktioniert wäre das aber Programmier-Selbstmord, da sind die Fehler vorprogrammiert. ;)
type
TExample = class private FTest: Integer; public constructor Create(const FTest: Integer); property Test: Integer read FTest write FTest; end; constructor TTest.Create(const FTest: Integer); begin Self.FTest := FTest; end; |
AW: Die "richtige" Sourcecode Formatierung?
Dann doch lieber "neutral":
Delphi-Quellcode:
type
TExample = class private FTest: Integer; public constructor Create(const (A)Value : Integer); property Test: Integer read FTest write FTest; end; constructor TTest.Create(const (A)Value: Integer); begin FTest := (A)Value; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:37 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