Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Tutorials und Kurse (https://www.delphipraxis.net/36-tutorials-und-kurse/)
-   -   Delphi Kurzreferenz (https://www.delphipraxis.net/156897-delphi-kurzreferenz.html)

Luckie 20. Dez 2010 03:40

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)):
http://www.michael-puff.de/Programmi...urzreferenzen/

Kurzreferenz Delphi, HTML zum online Lesen (Mit Latex aus dem PDF-Quelltext generiert):
http://www.michael-puff.de/Programmi...n/Delphi/HTML/

Kurzreferenz Delphi, PDF (DIN-A4 einseitig, DIN-A5 einseitig):
http://www.michael-puff.de/Programmi...en/Delphi/PDF/

Morphie 20. Dez 2010 07:11

AW: Delphi Kurzreferenz
 
Was mir zuerst auffällt:
1.1.1 Kommentare

•Einzeilige Kommentare: //
•Blockkommentare: oder (* *)

Hast du da was vergessen?

dataspider 20. Dez 2010 07:32

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

himitsu 20. Dez 2010 07:54

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.

Neutral General 20. Dez 2010 08:46

AW: Delphi Kurzreferenz
 
Hallo,

Sieht schon sehr schön aus. Hab nen kleinen Fehler in der Einleitung des Thread-Kapitels gefunden:

Zitat:

Aber die Dinge haben sich weiterentwickelt. Das erste Konzept, bei dem
mehrere Threads parallel ausgeführt wurden, tauchte bei den so genannten
ttime sharing systemsäuf

Luckie 20. Dez 2010 10:12

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. ;)

generic 20. Dez 2010 19:35

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

Luckie 20. Dez 2010 19:46

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.

himitsu 20. Dez 2010 19:49

AW: Delphi Kurzreferenz
 
Zitat:

Zitat von generic (Beitrag 1069648)
Du gehst nicht auf das For <x> in <y> ein.

Das kennt sein Delphi doch noch garnicht :wink:

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)

Gargoyl 20. Dez 2010 19:58

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.

Luckie 20. Dez 2010 20:01

AW: Delphi Kurzreferenz
 
Argh, ich habe vergessen die Bilder hochzuladen.

Danke himitsu: Kommt noch mit rein. Aber nicht mehr heute. ;)

Luckie 5. Jan 2011 16:32

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

Deep-Sea 5. Jan 2011 16:36

AW: Delphi Kurzreferenz
 
Kurzreferenz mit 85 Seiten? :shock: Alle Achtung ....

Luckie 5. Jan 2011 16:39

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.

sx2008 5. Jan 2011 16:48

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:
// Beispiel falsche Reihenfolge, inherited ist nicht letzte Anweisung
destructor TMeineKlasse.Destroy;
begin
  inherited;
  FListe.Free;
end;
PS: es fehlen auch noch folgende Sätze
* der Destruktor muss grundsätzlich immer Destroy heisen
* es gibt nur einen Destruktor; Konstruktoren darf es dagegen auch mehrere geben

Luckie 5. Jan 2011 16:50

AW: Delphi Kurzreferenz
 
Notiert. Danke für den Hinweis.

MrSpock 5. Jan 2011 16:53

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

p80286 5. Jan 2011 17:47

AW: Delphi Kurzreferenz
 
Ich hab's nur kurz überflogen,

das ist SAHNE!

Gruß
K-H

Luckie 5. Jan 2011 20:00

AW: Delphi Kurzreferenz
 
Zitat:

Zitat von MrSpock (Beitrag 1072462)
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.)

Könntest du mal bitte ein Beispiel machen?

himitsu 5. Jan 2011 21:37

AW: Delphi Kurzreferenz
 
leider wurde schon seit ewigen Zeiten und immernoch in XE ein bissl was vergessen.
Delphi-Quellcode:
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)
beim Schreibzugriff sollte ja, sobald mehrere Referenzen auf die selben Array-Daten zeigen, das zu beschreibende Array kopiert werden, bevor der Schreibzugriff startet.

PS: String entspricht einem quasi einem aufgemotzten array of Char

gammatester 5. Jan 2011 21:53

AW: Delphi Kurzreferenz
 
Zitat:

Zitat von himitsu (Beitrag 1072495)
leider wurde schon seit ewigen Zeiten und immernoch in XE ein bissl was vergessen.
Delphi-Quellcode:
var
  a, b: array of Byte;

a := (1, 2, 3, 4, 5);
b := a;
b[3] := 888;
// a := (1, 2, 888, 4, 5)
// b := (1, 2, 888, 4, 5)
beim Schreibzugriff sollte ja, sobald mehrere Referenzen auf die selben Array-Daten zeigen, das zu beschreibende Array kopiert werden, bevor der Schreibzugriff startet.

PS: String entspricht einem quasi einem aufgemotzten array of Char

Jetzt mußt Du nu nur noch verraten, wie Du 888 in ein Byte unterbringen kannst, und es offensichtlich wieder auslesen kannst! Oder hast Du etwas geschummelt ohne nachzudenken?

MrSpock 5. Jan 2011 21:57

AW: Delphi Kurzreferenz
 
Zitat:

Zitat von Luckie (Beitrag 1072480)
Zitat:

Zitat von MrSpock (Beitrag 1072462)
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.)

Könntest du mal bitte ein Beispiel machen?

Ja:

Delphi-Quellcode:
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?
Das wären jetzt ein paar Beispiele.

Luckie 6. Jan 2011 02:24

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?

pertzschc 6. Jan 2011 07:55

AW: Delphi Kurzreferenz
 
Zitat:

Zitat von Luckie (Beitrag 1072515)
Heute, 03:24 by Luckie

Was machst Du so in der Nacht??? Auch mal schlafen?

Deep-Sea 6. Jan 2011 08:45

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.

Luckie 6. Jan 2011 16:21

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.

sx2008 6. Jan 2011 16:50

AW: Delphi Kurzreferenz
 
Zitat:

Zitat von Deep-Sea (Beitrag 1072524)
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

Wenn man im Konstruktor das inherited nicht aufruft, dann wird keiner der ererbten Konstruktoren aufgerufen.
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:

Zitat von Deep-Sea (Beitrag 1072524)
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.

Nach dem Aufruf von inherited ist das Objekt freigegeben, jeder Zugriff auf ein Feld des Objekt ist also ein Zugriff auf ungültigen Speicher.
Oftmals bleibt der Zugriff auf den freigegebenen Speicher folgenlos, aber man hat eine tickende Zeitbombe im Sourcecode!
Delphi-Quellcode:
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;
Also ich kenne kein Szenario in dem es nötig wäre nach den Aufruf von inherited noch etwas anderes zu tun.

Deep-Sea 6. Jan 2011 17:07

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:
constructor TStringStream.Create;
begin
  Create('', TEncoding.Default, False);
end;
Solche Konstrukte gibt es zu tausenden. Es zu einem Dogma zu machen, dass in einem Konstruktor inherited vorkommen muss, ist somit einfach nicht richtig.

Beispiel, wo der geerbte Konstruktor und Destruktor nicht in der dogmatisch genannten Reihenfolge aufgerufen werden:
Delphi-Quellcode:
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;
Ich kenne auch niemanden, der jüdischen Glaubens wäre. Und trotzdem gibt es Juden :roll:

p80286 6. Jan 2011 17:27

AW: Delphi Kurzreferenz
 
Zitat:

Zitat von Deep-Sea (Beitrag 1072691)
Delphi-Quellcode:
constructor TStringStream.Create;
begin
  Create('', TEncoding.Default, False);
end;
Solche Konstrukte gibt es zu tausenden.

Darum müssen sie ja noch längst nicht richtig sein.
Auf den ersten Blick frage ich mich "wo ist das Create was hier aufgerufen wird".

Zitat:

Zitat von Deep-Sea (Beitrag 1072691)
Es zu einem Dogma zu machen, dass in einem Konstruktor inherited vorkommen muss, ist somit einfach nicht richtig.

Aber vielleicht zur Regel? Und da kann es Ausnahmen geben.
(zumindestens in TObject.Create sollte es kein inherited geben)

Zitat:

Zitat von Deep-Sea (Beitrag 1072691)
Ich kenne auch niemanden, der jüdischen Glaubens wäre. Und trotzdem gibt es Juden :roll:

Eben. Aber Deine Aussagen könnten leicht so interpretiert werden, als wäre die halbe Bevölkerung jüdischen Glaubens, und das ist glaube ich, nicht richtig.

Gruß
K-H

Deep-Sea 6. Jan 2011 18:01

AW: Delphi Kurzreferenz
 
Zitat:

Zitat von p80286 (Beitrag 1072694)
Darum müssen sie ja noch längst nicht richtig sein.

Sind sie aber. Richtig, weit verbreitet und nicht mal schlechter Programmierstil.

Zitat:

Zitat von p80286 (Beitrag 1072694)
Auf den ersten Blick frage ich mich "wo ist das Create was hier aufgerufen wird".

Schau doch in deine eigene Classes.pas?! Klar wird in dem aufgerufenen Konstruktor inherited aufgerufen. Aber zum 3. mal: Es muss somit nicht in jeden! In jedem 2. Thread im Forum wird gesagt, dass die Fragesteller nicht einfach Copy-und-Paste nutzen sollen, sondern den Code verstehen sollten. Wie kann man dann hier meinen, dass man Anfängern einfach sagt, dass inherited am Anfang eines jeden Konstruktors zu stehen hat, ohne ihm zu erklären warum man das (fälschlicher weise) meint.


Zitat:

Zitat von p80286 (Beitrag 1072694)
Eben. Aber Deine Aussagen könnten leicht so interpretiert werden, als wäre die halbe Bevölkerung jüdischen Glaubens, und das ist glaube ich, nicht richtig.

Dann nimm halt Inder. Davon gibt es ein paar mehr. Erbsenzähler -.-

Luckie 6. Jan 2011 19:15

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.

mkinzler 6. Jan 2011 20:33

AW: Delphi Kurzreferenz
 
Mache ich auch so. Zudem stört ein leerer Aufruf ja auch nicht.

sx2008 7. Jan 2011 07:17

AW: Delphi Kurzreferenz
 
Ich habe das Thema Destruktor in den Thread Interessantes Destruktor Problem ausgelagert. :angel:

Luckie 7. Jan 2011 11:26

AW: Delphi Kurzreferenz
 
Danke. Themen zu trennen ist immer etwas umständlich.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:03 Uhr.

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