Neues in Delphi 2010

Seit Embarcadero die Geschicke von Delphi leitet, tut sich wieder einiges in der Entwicklung von Delphi. Keine Revolutionen, aber stetige Weiterentwicklung. Die kochen natürlich auch nur mit Wasser, aber das, was ich bisher von Delphi 2010 gesehen hab, sieht schonmal gut aus.

Als Student und (naja… doch etwas mehr als) Freizeit-Delphianer hab ich natürlich bisher nur kleinere Anwendungen von wenigen tausend Zeilen geschrieben und so kann ich über die ganzen Features wie DataSnap oder das ganze DB-Zeug nicht viel sagen (wenngleich sich auch diese Features interessant anhören). Das wird wohl eher für größere Systeme interessant. Also stürze ich mich hauptsächlich auf die Sprachfeatures, die ich eh für am interessantesten halte.

Attribute

Das in meinen Augen interessanteste neue Feature von Delphi 2010 sind „Attribute“. Der Name ist etwas unglücklich, weil Attribute in der OOP ja normalerweise Felder sind, aber MS hat die Dinger in .NET so genannt und da springt CodeGear eben hinterher. Java nennt sie Annotations, was IMHO der bessere Name ist. Aber so ist es eben.

Wie schon angedeutet sind die Dinger keine Neuerfindung, sondern existieren zumindest in .NET und Java. Man kann damit beliebige Metadaten an Methoden, Properties, Klassen, etc. anhängen und das natürlich dann auch wieder auslesen. Dafür wurde die RTTI aufgebohrt, was ebenfalls nicht geschadet hat. Das sieht dann etwa so aus:

1
2
3
4
5
6
7
8
[Foo(42)] // Attribut mit Parameter 42
TBar = class
private
  FFooBar: Integer;
public
  [Test] // Parameterloses Attribut
  property FooBar: Integer read FFooBar write FFooBar;
end;

Das sieht erstmal ziemlich unspektakulär aus, aber man kann damit interessante Sachen machen. Beispielsweise kann man die Infos zum Serialisieren benutzen (Attribute geben an, was serialisiert wird und was nicht) oder zur Validierung von Code. Malcolm Groves von Embarcadero zeigt in seinem Blog ein paar Interessante Beispiele:

Insbesondere das mit der Validierung lässt sich aber noch ausbauen. Beispielsweise könnte eine Funktion folgendermaßen annotiert… äh… attributiert werden:

1
2
3
4
5
6
7
8
9
10
11
[Range(0, 45)]
function Fibonacci(n: Integer): Integer;
begin
  if (n < 0) or (n > 45) then
    raise EInvalidArgument.Create('Only values between 0 and 45 are allowed.');

  if n < 2 then
    Result := 1
  else
    Result := Fibonacci(n-2) + Fibonacci(n-1);
end;

Die Funktion soll die Fibonaccizahlen berechnen. Diese sind nur auf den Natürlichen Zahlen definiert (deshalb untere Grenze 0) und wachsen so schnell, dass schon die Fibonacci-Zahl mit der Nummer 46 (Das wäre 2.971.215.073) nicht mehr in einen Integer passt (deshalb obere Grenze 45).

Ein Unit-Test könnte sich nun diesen Range auslesen und beispielsweise automatisch eine Äquivalenzklassenanalyse mit Grenzwertuntersuchung machen. Das könnte dann z.B. so aussehen:

1
2
3
4
5
6
[Test] // Attribut spezifiziert Test-Methoden
procedure TTest.FibonacciTest;
begin
  AssertRange(Fibonacci); // prüft automatisch -1, 0, 45 und 46
  AssertEquals(89, Fibonacci(10)); // Funktionaler Test
end;

Bei -1 und 46 muss ne Exception auftreten, bei 0 und 45 darf keine Exception auftreten. Das könnte die eine Zeile alles automatisch testen. Rein Aufgrund der Infos im Attribut. Sowas würde sich in dUnit ganz gut machen, denke ich.

IOUtils.pas

Delphi wird mit Version 2010 auch wieder ein Stück objektorientierter. Beispielsweise waren ja bisher die ganzen Datei-Operationen(auf Existenz Prüfen, Suchen, Löschen, etc.) noch prozedural. IOUtils.pas wird das wohl ändern. Ein Schritt in die richtige Richtung, wie ich denke.

Aspektorientierte Programmierung

AOP wurde ja mal für Weaver angekündigt. Ich fänds Klasse, wenn Delphi die erste wirklich verwendete Sprache wäre, die das nativ unterstützt. Leider hab ich seit dem nichts mehr davon gehört. Sieht für mich so aus, als wäre das rausgeflogen. Schade. Das hätte Delphi technisch zumindest in einem kleinen Teilbereich über seine Konkurrenten hinausgehoben. So beschränkt sich die Innovation auf das Nachrüsten von Features, die andere Sprachen schon haben. Aber die Hoffnung stirbt zuletzt. Mal sehen, was uns noch erwartet.

IDE-Insight

Kommen wir nun zu den neuen Features der IDE. Da ist wohl ganz klar „IDE Insight“ zu nennen. Genial einfach und wohl überuas praktisch. Daniel hat dazu ein schönes Video gemacht. Einfach mal angucken.

Apropos Videos…

Im „RAD Studio 2010 Preview Center“ gibts ein paar interessante Videos von David I zu Delphi 2010. Da werden u.a. IDE-Insight und die Gestenerkennung in der VCL vorgestellt.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert