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.
Kompilátor rozeznává symbol VER200.
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:
function TObject.ToString: string;
begin
Result := ClassName;
end;
function TObject.Equals(Obj: TObject): Boolean;
begin
Result := Obj = Self;
end;
function TObject.GetHashCode: Integer;
begin
Result := Integer(Self);
end;
Direktiva deprecated (označující zastaralý kód) byla rozšířena o volitelný text.
procedure TestOld; deprecated 'pouzijte TestNew';
begin
end;
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)
Result := 10;
Exit;
// nyni mozno
Exit (10);
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ě.
{$VARPROPSETTER ON} // nejdrive povolit
type
TMyIntegerClass = class
private
fNumber: Integer;
function GetNumber: Integer;
procedure SetNumber(var Value: Integer);
public
property Number: Integer
read GetNumber write SetNumber;
end;
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).
System.TMonitor.Enter (myList);
try
xxxx
finally
System.TMonitor.Exit (myList)
end;
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í
oBuilder.Append(234).AppendLine.Append('s pozdravem');
Přidány třídy (classes.pas)
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í).
var
sw: TStreamWriter;
begin
sw := TStreamWriter.Create('test.txt', False, TEncoding.UTF8);
try
sw.WriteLine ('Delphi 2009');
sw.WriteLine ('první unicode Delphi');
finally
sw.Free;
end;
var
sr: TStreamReader;
begin
sr := TStreamReader.Create('test.txt', True); // detect BOM
try
while not sr.EndOfStream do
Memo1.Lines.Add (sr.ReadLine);
finally
sr.Free;
end;
end;
Datum: 2009-12-31 01:37:00 Tagy: Delphi 2009, RTL, kompilátor, unicode