![]() |
Delphi Kurzreferenz
Hallo,
ich habe meine Delphi Kurzreferenz fertig. Ich würde euch bitte mal drüber zu gucken, ob sie inhaltlich korrekt ist oder ob sich grobe Schnitzer eingeschlichen habe. Beim Lesen bitte ich folgendes im Hinterkopf zu behalten: Es handelt sich um eine Kurzreferenz. Angefangen habe ich mit einer Kurzreferenz für HTML, PHP und Java. Gedacht waren sie für mich als Gedankenstütze oder als Wissensspeicher geadcht, so zum Nachschlagen, weil ich mit den oben genannten Programmiersprachen nur hin und wieder zu tun habe und ich dann mal schnell nachschlagen können wollte, wie jetzt die Syntax für eine Schleife, Verzweigung lautet oder wie Exceptions funktionieren. Der Vollständigkeit halber habe ich das ganze jetzt noch um Delphi ergänzt. Nützlich könnten die Kurzreferenzen also für Leute sein, die schon Programmieren können und umsteigen oder die schon mit der Programmiersprache länger nicht gearbeitet haben. Für Anfänger oder Einsteiger halte ich sie eher ungeeignet, weil ich schon Erfahrung im Programmieren voraussetze bzw. Eigeninitiative erwarte, um tiefer gehende Informationen selbstständig zu suchen. Sie sollen auch eventuell nur einen Anstoß geben für einen Suchbegriff. Denn ausführliche Delphi Tutorials gibt es schon genug. Ausnahmen bilden die Kapitel Klassen und Threads, da ich diese Kapitel vollständig aus meinen schon vorhandenen Tutorials entnommen habe. Ich überlege, ob ich meine Tutorials zu COM und Listen auch noch in den Delphi Teil übernehme. Alle Kurzreferenzen, einzeln in den Unterordnern und als gesammelt im PDF Format (DIN-A4 einseitig, DIN-A5 beidseitig (war als Buchvorlage gedacht wird aber wieder einseitig zum handlichen spiralisieren)): ![]() Kurzreferenz Delphi, HTML zum online Lesen (Mit Latex aus dem PDF-Quelltext generiert): ![]() Kurzreferenz Delphi, PDF (DIN-A4 einseitig, DIN-A5 einseitig): ![]() |
AW: Delphi Kurzreferenz
Was mir zuerst auffällt:
1.1.1 Kommentare •Einzeilige Kommentare: // •Blockkommentare: oder (* *) Hast du da was vergessen? |
AW: Delphi Kurzreferenz
Hi,
ich habe nur beim Überfliegen gesehen, dass du Char noch mit der Länge 1 angibst. Vielleicht sollte man da noch darauf hinweisen, das ab D2009 Char ein WideChar ist. Ich finde es echt Klasse, das du dir die Mühe machst und dein Wissen zur Verfügung stellst. Frank |
AW: Delphi Kurzreferenz
Wer braucht schon { }, wenn er (* *) hat.
Luckie mit seinem TDE stört das ja noch nicht :lol:, aber er lernt ja eh grade Unicode. Ich dachte ja die Mods bekommen die neusten Delphis gestellt, damit sie hier perfekt mitwirken können :stupid: Daß z.B. "Tab. 3.2: Gleitkommazahlen" unter/nach der zugehörigen Tabelle steht, finde ich (zumindestens in der HTML-Version) etwas unpraktisch. Was z.B. Präzision zu bedeuten hat, sollte man vielleicht noch erklären. Die Zeichenketten kenn nun noch den UnicodeString (praktisch der WideString, nur als delphieigenen Typen, mit Referenzzählung und im Selphi-Soeichermanager), sowie den UTF8String (spezieller AnsiString, mit UTF-8-Kodierung drin) und RawByteString (ebenfalls ein spezieller AnsiString, aber ohne Kodierungsinformation). In D2009 gibt es ein String-Checking und damit verbundenen automatischen Stringumwandlungen, da ist sowas schon wichtig. Und wenn dann alle Fehler/Unklarheiten beseitigt sind, dann könnte man die PDF-Version noch anpassen, so daß dort nicht soviele halblehre Seiten und unschön getrennte Artikel vorkommen. |
AW: Delphi Kurzreferenz
Hallo,
Sieht schon sehr schön aus. Hab nen kleinen Fehler in der Einleitung des Thread-Kapitels gefunden: Zitat:
|
AW: Delphi Kurzreferenz
Danke schon mal fürs Drübergucken. Was das Layout angeht habe ich keinen großen Einfluss, da das Latex übernimmt. Von welcher Version ist denn die Rede? DIN-A4 oder DIN-A5?
Das mit den Gleitkommazahlen und dem Unicode kann ich noch ergänzen. Da ich nur D7 und D2006 habe, hatte ich bisher mit dem Unicode-Problem noch nichts zu tun. Und leider bekommen wir Moderatoren nicht die aktuellste Version gestellt. Schön wäre es. Der Fehler im Thread-Kapitel wird natürlich auch korrigiert, obwohl das mit dem saufenden System auch nicht schlecht ist. ;) |
AW: Delphi Kurzreferenz
Du gehst nicht auf das For <x> in <y> ein.
Oberthema Enumeratoren/Iteratoren Da ist übrigens in nächsten Entwickler Magazin ein schöner Artikel drüber drin (2/2011). |
AW: Delphi Kurzreferenz
Ich habe leider nur Delphi 2006, da gab es noch keine Iteratoren. Aber Enum könnte ich noch aufnehmen, da hast du recht.
|
AW: Delphi Kurzreferenz
Zitat:
Wobei dazu dann auch noch die neuen Enumeratoren mit behandelt werden sollten. Nja, was aber wirklich noch mit rein sollten (ganz weit oben), das wäre eine Kurzanleitung zum Thema Debuggen und eine kleine Liste der Wichtigsten Compilerschalter (im Quellcode und via Projektoptionen, falls vorhanden) |
AW: Delphi Kurzreferenz
Bei der HTML Version fehlen alle Bilder, da steht immer nur "PIC" bei den Abbildungen.
Interessant wäre es auch zu wissen, für welche Delphi Version die Kurzreferenz gilt. Bzw. bei entsprechenden Punkten dazu zuschreiben ab welcher Version das gilt. Z.B. bei Operatoren überladen, Konstanten in Klassen, ... sofern so etwas in deiner Kurzreferenz behandelt wird. |
AW: Delphi Kurzreferenz
Argh, ich habe vergessen die Bilder hochzuladen.
Danke himitsu: Kommt noch mit rein. Aber nicht mehr heute. ;) |
AW: Delphi Kurzreferenz
Sie der Aufzählungsdatentyp ist jetzt auch aufgenommen. Fehlt sonst noch etwas oder ist etwas fehlerhaft? (Die HTML.Version ist noch nicht aktuell, aber das PDF.)
|
AW: Delphi Kurzreferenz
Kurzreferenz mit 85 Seiten? :shock: Alle Achtung ....
|
AW: Delphi Kurzreferenz
Nun ja, die Kapitel zu Klasse und Threads sind sehr ausführlich, weil ich einfach meine umfangreichen Tutorials übernommen habe, weil ich sie nicht neu schreiben wollte. Alle anderen Themen sind entsprechend knapp gehalten.
|
AW: Delphi Kurzreferenz
In Abschnitt 6.3.2 Destruktor steht:
* inherited sollte im Konstruktor immer aufgerufen werden richtig wäre aber: * inherited muss im Destruktur immer als letzte Anweisung aufgerufen werden Das Wort "sollte" ist zu schwach, deshalb habe ich es nach "muss" geändert. Und der Zusatz "als letzte Anweisung" ist wohl auch nötig.
Delphi-Quellcode:
PS: es fehlen auch noch folgende Sätze
// Beispiel falsche Reihenfolge, inherited ist nicht letzte Anweisung
destructor TMeineKlasse.Destroy; begin inherited; FListe.Free; end; * der Destruktor muss grundsätzlich immer Destroy heisen * es gibt nur einen Destruktor; Konstruktoren darf es dagegen auch mehrere geben |
AW: Delphi Kurzreferenz
Notiert. Danke für den Hinweis.
|
AW: Delphi Kurzreferenz
Hallo Luckie,
was ich mir häufig nicht merken kann (und deshalb in einer Kurzreferenz gerne enthalten sehen würde) ist die Frage, ob über eine einfache Zuweisung Strukturen kopiert werden oder ggf. nur eine Referenz. (Arrays, Records, Objekte, etc.) |
AW: Delphi Kurzreferenz
Ich hab's nur kurz überflogen,
das ist SAHNE! Gruß K-H |
AW: Delphi Kurzreferenz
Zitat:
|
AW: Delphi Kurzreferenz
leider wurde schon seit ewigen Zeiten und immernoch in XE ein bissl was vergessen.
Delphi-Quellcode:
beim Schreibzugriff sollte ja, sobald mehrere Referenzen auf die selben Array-Daten zeigen, das zu beschreibende Array kopiert werden, bevor der Schreibzugriff startet.
var
s, t: String; a, b: array of Byte; s := '12345'; t := s; t[3] := '-'; // s = '12345' // t = '12-45' a := (1, 2, 3, 4, 5); b := a; b[3] := 888; // a := (1, 2, 888, 4, 5) // b := (1, 2, 888, 4, 5) PS: String entspricht einem quasi einem aufgemotzten array of Char |
AW: Delphi Kurzreferenz
Zitat:
|
AW: Delphi Kurzreferenz
Zitat:
Delphi-Quellcode:
Das wären jetzt ein paar Beispiele.
type
TMyArray = array[1..5] of Integer; TMyRec = record intVal: Integer; eVal: Extended; end; var a1, a2: TMyArray; rec1, rec2 : TMyRec; ... begin for i := 1 to 5 do a1[i] := i; a2 := a1; // enthält jetzt a2 eine komplette Kopie for a1 oder ist es nur eine Referenez auf a1? a1[3] := 12; // was ist jetzt a2[3] ? rec1.intVal := 4; rec1.eVal := 3.1415; rec2 := rec1; // was enthält jetzt rec2 ? // und wie sieht es bei 2 Objekten derselben Klasse aus? |
AW: Delphi Kurzreferenz
Ui, das müsste ich auch ausprobieren. Wie verhält es sich denn? Und wo kann man das Thema am besten in der Kurzreferenz unterbringen?
|
AW: Delphi Kurzreferenz
Zitat:
|
AW: Delphi Kurzreferenz
@himitsu:
Dafür gibt es ja die Funktion Copy.
Delphi-Quellcode:
b := Copy(a);
Allgemein: Es muss eig. nicht immer inherited aufgerufen werden. Bei Konstruktoren schon gar nicht und bei Destruktoren kann man es weg lassen, wenn man von TObject ableitet :-D Auch dass inherited als letzte Anweisung im Destruktor stehen muss finde ich so nicht richtig. In den meisten Fällen wir dies wohl stimmen, aber es gibt auch Szenarien, wo es so nicht geht. |
AW: Delphi Kurzreferenz
Die Kurzreferenzen noch mal überarbeitet nach Vorschlägen von Dezipaitor. Allerdings alle habe ich nicht noch umgesetzt.
@Dezipaitor: Was das Datum angeht, das ist das ISO-Datumsformat, welches auch offiziell in Deutschland gültig ist. |
AW: Delphi Kurzreferenz
Zitat:
Das kann zu Zugriffsfehlern führen, wenn dadurch z.B. in der Basisklasse eingebettete Objekte nicht angelegt werden. Beim Destruktor kann ein fehlendes inherited zu Speicherlecks und Resourcenverlust führen. Man ist nur dann auf der sicheren Seite wenn man grundsätzlich immer inherited verwendet. Der Name der Basisklasse ist ja ganz leicht von TObject auf eine andere Klasse geändert; wenn man im Konstruktor oder Destruktor schlampig war können leicht (sehr heimtückische) Probleme auftreten. Zitat:
Oftmals bleibt der Zugriff auf den freigegebenen Speicher folgenlos, aber man hat eine tickende Zeitbombe im Sourcecode!
Delphi-Quellcode:
Also ich kenne kein Szenario in dem es nötig wäre nach den Aufruf von inherited noch etwas anderes zu tun.
destructor TKlasseXY.Destroy; // Beispiel für potentiell gefährlichen Code
begin inherited; // Ab diesem Zeitpunkt ist "FHandle" ungültiger Speicher CloseHandle(FHandle); // dieser Aufruf kann zu einer Zugriffsverletzung führen end; |
AW: Delphi Kurzreferenz
War ja klar das meine Worte wieder mal angezweifelt werden und ich als doof abgestempelt werde :stupid:
Beispiel aus der Classes.pas, wo KEIN inherited stehen sollte:
Delphi-Quellcode:
Solche Konstrukte gibt es zu tausenden. Es zu einem Dogma zu machen, dass in einem Konstruktor inherited vorkommen muss, ist somit einfach nicht richtig.
constructor TStringStream.Create;
begin Create('', TEncoding.Default, False); end; Beispiel, wo der geerbte Konstruktor und Destruktor nicht in der dogmatisch genannten Reihenfolge aufgerufen werden:
Delphi-Quellcode:
Ich kenne auch niemanden, der jüdischen Glaubens wäre. Und trotzdem gibt es Juden :roll:
constructor TAbgeleiteteKlasse.Create;
begin FStream := TMemoryStream.Create; inherited Create(FStream); end; destructor TAbgeleiteteKlasse.Destroy; begin inherited; // Könnte ja auf den übergebenen Stream noch zugreifen. FStream.Free; end; |
AW: Delphi Kurzreferenz
Zitat:
Auf den ersten Blick frage ich mich "wo ist das Create was hier aufgerufen wird". Zitat:
(zumindestens in TObject.Create sollte es kein inherited geben) Zitat:
Gruß K-H |
AW: Delphi Kurzreferenz
Zitat:
Zitat:
Zitat:
|
AW: Delphi Kurzreferenz
Stopp, stopp, stopp. Eure Diskussion ist ja durch aus interessant und nützlich, aber ich glaube, das bringt mich hier nicht unbedingt weiter.
Also ich rufe generell inherited im Konstruktor auf, auch wenn ich die Klasse von TObject ableite. Auch wenn da noch nichts passiert, kann sich das in zukünftigen Delphi Versionen durchaus ändern. Genauso sehe ich es im Destruktor. Das Borland das damals nicht konsequent gemacht hat, sehe ich deshalb als Fehler an. Aber die damaligen Borland Programmierer waren auch keine Götter und haben auch Fehler gemacht. Wer weiß, heute würden sie das eventuell auch anders machen. |
AW: Delphi Kurzreferenz
Mache ich auch so. Zudem stört ein leerer Aufruf ja auch nicht.
|
AW: Delphi Kurzreferenz
Ich habe das Thema Destruktor in den Thread
![]() |
AW: Delphi Kurzreferenz
Danke. Themen zu trennen ist immer etwas umständlich.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:22 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 by Thomas Breitkreuz