![]() |
Allgemeine Delphisyntax
Hallo zusammen,
mir ist bisher noch kein Delphibuch bzw. kein Tutorial über den Weg gelaufen, dass eine allgemein gültige, anerkannte und übersichtliche Delphisyntax verwendet und diese einem nahe bringt. Nun, ich will aber eine solche verwenden... Und hier sollt ihr mir weiterhelfen. :-D Wer also denkt, er verwende eine Syntax, die obig genannte Bedingungen erfüllt, bitte ich hier zu posten... Danke für euer Verständnis für eine so exotische Frage - und natürlich eure Antworten. :mrgreen: Gruß, Marco P.S.: Ich mach mal den Anfang...
Delphi-Quellcode:
unit SyntaxExample;
// USES uses Windows, SysUtils; // ... // PROTOTYPEN procedure MyPublicProc(); type // TYPENDEKLARATION (RECORDS) TMyRecord = record Membr1, // Member-Reihenfolge: Membr2: Integer; // siehe "Globale Variablendeklarartion" Membr3: String; end; // TYPENDEKLARATION (KLASSEN) TMyClass = class private FMyProp: Integer; FSomewhat: Cardinal; procedure MyProcedure(AParam1, AParam2: String; AInt: Integer); function MyFunc(): Integer; function GetMyProp(): Integer; procedure SetMyProp(AValue: Integer); protected // ... public property MyProp: Integer read GetMyProp write SetMyProp; property Somewhat: Cardinal read FSomewhat write FSomewhat; published // ... end; // GLOBALE VARIABLENDEKLARATION var Obj1: TBitmap; // 1. Objekte Obj2: TStringList; hHandle: THandle; // 2. Handles pPtr: Pointer; // 3. Pointer Int: Integer; // 4. Ganzzahl-Variablen Dbl: Double; // 5. Gleitpunkt-Variablen Str: String; // 6. Strings implementation // IMPLEMENTATION procedure MyPublicProc(); // Private Variablendeklaration var Obj: TBitmap; // 1. Objekte hHandle2: THandle; // 2. Handles pPtr: Pointer; // 3. Pointer Int2: Integer; // 4. Ganzzahl-Variablen Dbl2: Double; // 5. Gleitpunkt-Variablen Str2: String; // 6. Strings begin end; procedure MyPrivateProc(); begin end; // Parameter procedure TMyClass.MyProcedure(AParam1, AParam2: String; AInt: Integer); begin function TMyClass.MyFunc(): Integer; begin Result := 100; end; function TMyClass.GetMyProp(): Integer; begin // ... Result := FMyProp; end; procedure TMyClass.SetMyProp(AValue: Integer); // ... FMyProp := AValue; end; |
Re: Allgemeine Delphisyntax
Ich habe noch nie gesehen, dass bei Pascal/Delphi parameterlose Prozeduren mit leeren Klammern benutzt werden. Das kenne ich von JavaScript, C, usw. Aber nicht von Delphi.
Ansonsten gibt´s doch IMHO eine gültige, vorgeschriebene Syntax, an die man sich halten sollte. |
Re: Allgemeine Delphisyntax
|
Re: Allgemeine Delphisyntax
Hallo,
danke, habe mir den Guide runtergeladen... Das war's eigentlich, was ich gesucht habe. :-D Gruß, Marco |
Re: Allgemeine Delphisyntax
Zitat:
Zitat:
Bis auf Spaces und ein paar anderen Kleinigkeiten halte ich mich auch an den Pascal guide. Zum Beispiel find ich das hier...
Delphi-Quellcode:
lesbarer als das:
type
TMiep = class private fSomeField :TSomeType; public DoSomething(aSomeParameter :TSomeType); end;
Delphi-Quellcode:
Gegen das große T kann man wohl nichts machen, aber ich sehe absolut keinen rationalen Grund, warum ich den Lesefluss durch A und F kaputtmachen sollte.
type
TMiep = class private FSomeField :TSomeType; public DoSomething(ASomeParameter :TSomeType); end; Der erste große Buchstabe springt nunmal ins Auge, da ist es einfach nur ärgerlich wenn einem ein großes A oder F reinpfuschen. Nach einer Weile mit C# habe ich es mir auch angewohnt parameterlose Funktionen mit () zu verwenden. Das unterscheidet sie sofort von Properties. ;) Mag sein, dass ich da ein wenig strenge Vorstellungen habe, ich hasse es einfach, wenn ich fremden Code nicht so schnell überfliegen kann, wie es möglich wäre... ;) Aber das sind nur meine 2 cents.. ;) btw: Sollte man hier dringend die Tab size einstellen. Im Quellcode sind es 3 Zeichen und im Beitragseditor sind's 8. :shock: Als Pascalisti sollten es 2 oder 4 sein. ;) |
Re: Allgemeine Delphisyntax
Hi Robert,
Delphi-Quellcode:
Ich finde, dass die großen Buchstaben schon ok sind. Dadurch kann man direkt sehen "ah "F", das ist ein Feld". Genauso bei Parametern. Ich kann den Namen dahinter noch genauso gut lesen. Das ist auch wohl der Grund wieso ich diese Schreibweise bevorzuge und auch verwende - wobei ich manchmal das "A" vor den Argumenten weglasse. ;)
type
TMiep = class private FSomeField :TSomeType; public DoSomething(ASomeParameter :TSomeType); end; mfG mirage228 |
Re: Allgemeine Delphisyntax
Zitat:
Code:
und seit JavaScript und PHP klammere ich auch in Delphi wie ein Bekloppter. :wall:
MessageBox.Show("Huhu", "Hihi");
Delphi-Quellcode:
Aber trotz all dem finde ich solche leeren Klammern
if(IrgendeineSimpleBedingung) then
begin end;
Delphi-Quellcode:
irgendwie immer noch unpassend für Delphi. :stupid:
function Miep(): boolean;
|
Re: Allgemeine Delphisyntax
Zitat:
Jupp sowas rutscht mir oft reflexartig raus. In der Deklaration it es natürlich total Bohne, schließlich steht ja method/function/procedure davor. ;) Zitat:
Was wenn sich der Leser an deinen Stil gewöhnt und sich dann ärgert wenn die vermeintliche Property ein Parameter ist? :zwinker: [edit=alcaeus]Doppelpost geloescht. Mfg, alcaeus[/edit] |
Re: Allgemeine Delphisyntax
Zitat:
mfG mirage228 |
Re: Allgemeine Delphisyntax
Hallo zusammen,
Zitat:
Zitat:
Was ich allerdings auf gut Deutsch gesagt eine Schweinerei finde, ist, dass selbst der Style Guide und auch viele Delphi-Programmierer das Parameter-A nicht oder nur mal und mal nicht benutzen... Ich jedenfalls setzte vor jeden Parameter ein A. Zitat:
So, nun zu meinen :wall: beim Lesen des Style Guides: Zitat:
Zitat:
Delphi-Quellcode:
ist doch tausend mal besser (und im Code schneller zu erkennen) als
var
oForm: TForm; hForm: THandle pData: Pointer; aData: array of Byte;
Delphi-Quellcode:
var
Form: TForm; FormHandle: THandle; DataPtr: Pointer; Data: array of Byte; Zitat:
Zitat:
Zitat:
Soweit meine Meinung(en). Was meint ihr dazu? Gruß, Marco |
Re: Allgemeine Delphisyntax
Hi,
in vielen Punkten gebe ich Dir recht, jedoch mache ich einige Dinge anders. Unter anderem rücke ich immer mit zwei Zeichen (bzw. je nach tiefe mit 4, 6, ...) ein. Habe das in der Schule so gelernt. Echte Tabs sind für mich zu viel Leerraum. Ich schreibe reservierte Wörter grundsätzlich klein, dazu gehört für mich auch string (Habe das zuerst in der Schule mit TurboPascal so gelernt).
Delphi-Quellcode:
Das halte ich auch viel übersichtlicher, wobei ich auch mal die andere Schreibweise verwende.
var
oForm: TForm; hForm: THandle pData: Pointer; aData: array of Byte;
Delphi-Quellcode:
Ich verwende hier aus Gewohnheit die zweite Variante. IMHO übersieht man es leichter, wenn man es nur in eine Zeile schreibt.
// FALSCH
if A < B then DoSomething; // RICHTIG if A < B then DoSomething; Bei der Sache mit den IF-THEN-ELSE Blöcken halte ich auch die "richtige" Variante mit 3 Zeilen für zu lang und überflüssig, andererseits finde ich die erste Variante auch nicht so gut. Ich mache das so:
Delphi-Quellcode:
mfG
if A < B then
begin DoSomething; DoSomethingElse; end else begin DoThis; DoThat; end; mirage228 |
Re: Allgemeine Delphisyntax
Also ich mach immer ein Mittelding von den beiden :
Delphi-Quellcode:
:mrgreen:
// FALSCH
if A < B then begin DoSomething; DoSomethingElse; end else begin DoThis; DoThat; end; // RICHTIG if A < B then begin DoSomething; DoSomethingElse; end else begin DoThis; DoThat; end; // So mach ichs ^^ if A < B then begin DoSomething; DoSomethingElse; end // manchmal das else auch schon hier hinter else begin DoThis; DoThat; end; Das mit den for Schleifen mache ich auch "falsch" :
Delphi-Quellcode:
Meine "begin"s sind immer direkt in der gleichen Zeile wie das "then" oder das "do" usw... hab ich mir so angewöhnt und find ich übersichtlicher..
// FALSCH ... So mach ichs aber
for i := 0 to 10 do begin DoSomething; DoSomethingElse; end; |
Re: Allgemeine Delphisyntax
Moin Zusammen,
also ich denke mal "den" Styleguide gibt es nicht. Solange man alleine arbeitet sollte man es so machen, wie es der eigenen Übersicht dienlich ist. Diesen Stil sollte man dann aber auch durchhalten, wobei natürlich nichts dagegen spricht den eigenen Stil weiterzuentwickeln, wenn man merkt dass es noch besser geht. Sobald man allerdings im Team arbeitet, wird man nicht umhinkommen einen einheitlichen Stil zu verwenden. Ob der jetzt vorgegeben wird, oder gemeinsam entwickelt werden kann ist dann wieder eine zweite Sache. Eine Zeitlang habe ich, z.B., mit Parameter mit p_ eingeleitet. Es hat sich allerdings herausgestellt, dass diese Schreibweise dann doch nicht so ideal war, und ich habe das auf A geändert. @Marco: Warum nun integer kein reserviertes Wort ist kann ich Dir auch nicht sagen, aber es die Auswirkung, dass Du den Bezeichner auch anders verwenden kannst:
Delphi-Quellcode:
Ob das jetzt Sinn macht sei einmal dahingestellt.
// Zulässig
procedure integer; begin end; // Nicht zulässig procedure string; begin end; |
Re: Allgemeine Delphisyntax
Bei größeren Projekten würde ich empfehlen die Proceduren und funktionen Alphabetich zu ordnen. Anfangs hab ich immer Get und Set Methode über einander geschrieben aber irgendwann verliert man da die Übersicht.
Delphi-Quellcode:
setweiteren würde ich empfehlen für private, protected, global, local, Übergabeparameter verschiedene Buchstaben voranzustellen um beim überliegen des Quelltextes sofort zu wissen ob es sich bei einer Variablen um eine lokale, globale etc. handelt. Eigentlich gibt es da bei Delphi nur das vorrangstellte F bei private-Variablen. Inzwischen hab ich mir jedoch angewöhnt private-Variablen mit einem kleinen "f" zu beginnen und Proceduren mit einem großen "F". Somit weiß ich wenn ich im Quelltexte
private
function FGetAbc: Integer; function FGetDef: Integer; function FGetGhi: Integer; procedure FSetAbc(AValue: Integer); procedure FSetDef(AValue: Integer); procedure FSetGhi(AValue: Integer);
Delphi-Quellcode:
lese sofort das "FMainID" eine funktion ist und keine Variable da eine Variable bei mir mit einen kleinen "f" beginnt. Bei Lokalen Variablen/Funktionen verhält es sich genau so. Ist zwar alles kein Standard aber selbst die Kollegen bei Gemeinschaftsprojekten wissen es zu schäzen weil sie sofort wissen worum es sich beim überfliegen vom Quelltext handelt.
lTmpInt := FMainID;
folgende Variante halte ich für völlig unübersichtlich Zitat:
Die Variante
Delphi-Quellcode:
finde ich persönlich auch nicht sehr ansehnlich aber man sieht auf den ersten blick ob es sich um ein "else if" handelt oder nur um eine "end" oder eben um ein "end else". würde alles auf einer Zeile stehen müsste man erst in die Zeile reinlesen und es würde nicht ausreichen nur den Zeilenanfang anzusehen. Im großen und ganzen finde ich die Standards schon recht sinnvoll auch wenn ich davon ab und zu abweische. Dies liegt allerdings daran das ich meist zu faul bin 3 mal enter zu tippen etc..
[...]
end else begin [...] |
Re: Allgemeine Delphisyntax
Zitat:
Und wenn wir schonmal beim Rundumschlag sind.... :mrgreen: hungarian Notation und Unterstriche sollten verboten werden :P Ich verwende Unterstriche nur in diesen Pseudo templates. Warum? Weil's so hässlich aussieht, dass diese Platzhalter niemals mit richtigen Bezeichnern kollidieren könnten. ;) Und diese Präfixe. Die erinnern mich irgendwie immer an die Bezeichner in einer DB, angelegt von jemanden, der nicht mit der DB arbeiten muss. Ihr wisst schon, solch kryptischer Käse wie: Emp_FK_XYZ_tblFünfte_dirLinks_procErste. :? Jupp ist klar, verständliche lesbare Namen wären ja zu einfach. :mrgreen: Aber eigentlich kann's mir ziemlich egal sein, was ihr wie tippt. Hässlichen Code schaue ich mir eigentlich nur an, wenn ich besonders gute Laune habe. Ob ich danach immer noch die Lust verspüre eine Antwort zu schreiben ist wieder eine ganz andere Frage. ;) Fließt einfach zuviel böses Blut wenn man ständig wegen hässlichem Code rumheult. ;) Aber einer der Vorteile von Pascal ist, dass "Pascalies" zu einem hohen Anteil ziemlich nah nach an einem Standard bleiben. Wenn ich mir manchen C# Code ansehe wo private Felder mit einem Unterstrich begonnen werden, öffentliche proeprties mit einem kleinen Buchstaben beginnnen oder was weiß ich für kranke Sachen... Ich glaube da wäre es mir lieber den hässlichsten Delphi code durchzulesen, den ich mir vorstellen kann. ;) |
Re: Allgemeine Delphisyntax
Hallo zusammen!
Zitat:
Delphi-Quellcode:
:warn: Ich finde das irgendwie eine Art "Stilbruch" (obwohl es ja genau genommen gerade das Gegenteil ist :nerd: ): Wenn ich alle Datentypen zu Beginn groß schreibe, dann tu ich das auch mit String, da kann es ein reserviertes Wort oder auch irgendwas anderes sein (aber eben trotzdem ein Datentyp).
Ich schreibe reservierte Wörter grundsätzlich klein, dazu gehört für mich auch string (Habe das zuerst in der Schule mit TurboPascal so gelernt).
Zitat:
Und wann ist es angebracht, des Dingens mal so und mal anders zu schreiben? Zitat:
Delphi-Quellcode:
:mrgreen:
end
else begin ---- Zitat:
Zitat:
---- Zitat:
Zitat:
Zitat:
Gruß, Marco |
Re: Allgemeine Delphisyntax
Zitat:
oh, so mache ich das natürlich nicht :mrgreen:
Delphi-Quellcode:
So ists besser ;)
if A < B then
begin DoSomething; DoSomethingElse; end else begin DoThis; DoThat; end; Zitat:
mfG mirage228 |
Re: Allgemeine Delphisyntax
[Senf]
Zitat:
Nene, für solche Dinge sind Source-Formatter da ^^ Bis auf Spaces und ein paar anderen Kleinigkeiten halte ich mich auch an den Pascal guide. [/Senf] |
Re: Allgemeine Delphisyntax
Zitat:
Ich habe folgendes geschrieben Euch ist schon klar, dass Tabs die Möglichkeit geben, die Breite der Einrückung selbst zu bestimmen OHNE dass es beim nächsten zu Übelkeit führt? Der stellt sich nämlich seine Breite so ein wie er es will. ;) Interessanterweise kommt dieses Argument immer wieder von diesen "Tab-Tipper-aber-Space-Einfüger", man _könnte_ also argumentieren, dass diese Spezies nicht sehr weit denkt. Ohne eine unabhängig durchgeführte Studie dazu würde ich mich da aber offiziell nicht festlegen wollen... :mrgreen: |
Re: Allgemeine Delphisyntax
Zitat:
Natürlich nur wenn man das System dahinter richtig versteht. Leider tun das die wenigsten. |
Re: Allgemeine Delphisyntax
Ich kann Robert da nur zustimmen. Spaces fuer Einrueckungen zu verwenden ist wirklich schlimm.
Ein Beispiel: bei meinem ehemaligen Arbeitgeber war alles vorhanden: 8 Zeichen Einrueckung, 4 Zeichen, 3 Zeichen 2 Zeichen. Natuerlich wurden die Codes ins CVS eingecheckt, und der naechste der was bearbeiten durfte hatte dann seine Probleme am Hals. Ich finde es ausserdem schon mal eine dumme Idee die Einrueckungsweite in einen Styleguide aufzunehmen. Sorry, aber es wird wohl meine Sache sein, wie weit ich es einruecke? Vor allem wenn ich dafuer Tabs verwende, dass der Leser den Code so sieht, wie er ihn geschrieben haette. Ich seh 2 Zeichen, der andere 4 Zeichen. Gespeichert wird ein Zeichen, also sparst du dir bei einigen Grossprojekten Unmengen an Speicherplatz (ich denke da an das 600000-Zeilen-Projekt das mit 4 Spaces eingerueckt war :roll:) Greetz alcaeus |
Re: Allgemeine Delphisyntax
Übrigens wegen den Tabs: Ich red da aus Erfahrung, da ich selber mal eine Zeit lang heftig davon gebrauch gemacht habe.
Aufgehört hat es dann damit, dass besagte Sourcen aufm CVS gelandet sind. Probleme gabt es nur eben immer dann, wenn dort aus Versehen Tabs in ASM-Bölöcken (ja, ich bin so lebensmüde und programmier Teile unter Delphi IMMERNOCH mit ASM) auf anderen Breiten angezeigt wurden. Beispiel (Tabs durch Punkte ersetzt): Tab=4
Delphi-Quellcode:
Gleicher Source mit Tab=8
MOV EAX, $00000001
PUSH EAX CALL Sleep
Delphi-Quellcode:
HTH ...
MOV EAX, $00000001
PUSH EAX CALL Sleep Zur Lösung dieses Problems ist bei Projekt Omorphia daher ein SourceFormatter vorgeschrieben und im CVS die Breite für Einrückungen (auf 4 Leerzeichen) festgelegt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:21 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