Delphi 2009 přináší několik novinek kompilátoru a RTL z nichž nejzásadnější je podpora Unicode, Generika (generics), anonymní metody a pak zbytek.
Začneme od konce - dnes tedy ten zbytek.
Delphi 2009 je následníkem Delphi 2007 a proto je vhodné začít čtení se shrnutím předchozí verze Delphi 2007.
Změny v RTL a kompilátoru v Delphi 2009
Kompilátor rozeznává symbol VER200.
Rozšíření TObject
Bázová třída byla rozšířena o velmi užitečné virtuální metody ToString, Equals a GetHashCode. Nejsem si úplně jist, ale podle mne to značí, že musela
být změněna tabulka virtuálních metod, tj. v některých opravdu speciálních případech to může znamenat problém (ale ten kdo to potřebuje tak
ví co má změnit, 99% ostatních programátorů se to netýká).
Takto vypadají základní implementace:
1function TObject.ToString: string;
2begin
3 Result := ClassName;
4end;
5
6function TObject.Equals(Obj: TObject): Boolean;
7begin
8 Result := Obj = Self;
9end;
10
11function TObject.GetHashCode: Integer;
12begin
13 Result := Integer(Self);
14end;
rozšíření Deprecared
Direktiva deprecated (označující zastaralý kód) byla rozšířena o volitelný text.
1procedure TestOld; deprecated 'pouzijte TestNew';
2 begin
3
4 end;
Exit s hodnotou
Exit byl rozšířen o možnost přímo nastavení hodnoty. Tato konstrukce je velmi užitečná protože někdy bylo třeba napsat dva řádky (což je stále možno)
1Result := 10;
2 Exit;
3
4 Exit (10);
Nastavení property přes referenci
Z důvodu kompatibility s COM byla přidána možnost u property použít var parametr. Pozor, může to mít vedlejší účinky při neopatrném použití - takže opatrně.
1
2type
3 TMyIntegerClass = class
4 private
5 fNumber: Integer;
6 function GetNumber: Integer;
7 procedure SetNumber(var Value: Integer);
8 public
9 property Number: Integer
10 read GetNumber write SetNumber;
11 end;
Změny u vláken
TThread byl rozšířen o podporu anonymních metod a unit System obsahuje record Monitor, který umožňuje globální zamykání (a jiné věci) i pro konkrétní objekt (a jelikož je globální lze na něj přistupovat ze všech vláken).
1System.TMonitor.Enter (myList);
2try
3 xxxx
4
5finally
6 System.TMonitor.Exit (myList)
7end;
TStringBuilder
Byla přidána třída TStringBuilder, jako v .NET. Data se přidávají (většinou přes Appendxxxx), ale zvláštností je, že většina metod
vrací referenci na sebe, tj. umožňuje to zřetězení volání
1oBuilder.Append(234).AppendLine.Append('s pozdravem');
Readers a Writers
Přidány třídy (classes.pas)
- TStringReader a TStringWriter (pracují v paměti)
- TStreamReader a TStreamWriter
- TBytesStream
Jsou následníkem TTextReader a TTextWriter a umožňují specifikovat kódování přes třídu TEncoding (a umožňují zpracovávat BOM - tj. binární značku na začátku
souboru určující kódování).
1var
2 sw: TStreamWriter;
3begin
4 sw := TStreamWriter.Create('test.txt', False, TEncoding.UTF8);
5 try
6 sw.WriteLine ('Delphi 2009');
7 sw.WriteLine ('první unicode Delphi');
8 finally
9 sw.Free;
10 end;
11
12var
13 sr: TStreamReader;
14begin
15 sr := TStreamReader.Create('test.txt', True);
16 try
17 while not sr.EndOfStream do
18 Memo1.Lines.Add (sr.ReadLine);
19 finally
20 sr.Free;
21 end;
22end;