Delphi 2009 - změny v kompilátoru a RTL (část 1)

vložil Radek Červinka 31. prosince 2009 02:37

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:

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;

rozšíření Deprecared

Direktiva deprecated (označující zastaralý kód) byla rozšířena o volitelný text.

  procedure TestOld; deprecated 'pouzijte TestNew';
  begin

  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)

  Result := 10;
  Exit;
// nyni mozno
  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ě.

{$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;

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

System.TMonitor.Enter (myList);
try
  xxxx

finally
  System.TMonitor.Exit (myList)
end;

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í

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

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;

Tagy: , , ,

Recenze

Komentování ukončeno

Naše nabídka

MVP
Ing. Radek Červinka - Embarcadero MVP
profil na linkedin, Twitter:@delphicz

Nabízím placené poradenství a konzultace v oblasti programování a vývoje SW.
Dále nabízíme i vývoj speciálního software na zakázku.

Neváhejte nás kontaktovat (i ohledně reklamy).

love Delphi

O Delphi.cz

Delphi je moderní RAD nástroj podporující tvorbu nativních aplikací pro platformu Win32, Win64, Mac OSX, Linux a na iPhone a Android.

Delphi.cz je nezávislý portál pro uživatele Delphi. Portál není koncipován pro úplné začátečníky, i když i ti se zde nebudou nudit, ale spíše na programátory, kteří již něco znají a chtějí své znalosti dále rozvíjet a sledovat novinky.

Poslední komentáře

Comment RSS

Dle měsíců