Návrhy vylepšení jazyka Delphi

Z ZděchovNET
Skočit na navigaci Skočit na vyhledávání

Nepoužívaní globálních proměnných a funkcí

Přesun k plně objektovému programování. Nepoužívání globálních proměnných jako Application, FormX, Screen, Mouse, aj. Extrémně by byla použita pouze jediná globální proměnná něco jako System.


Namísto klasického

begin
  Application.Initialize;
  Application.CreateForm(TMainForm, MainForm);    
  Application.CreateForm(TSecondForm, SecondForm);    
  Application.Run; 
end.

k objektovému

type
  TMyApplication = class(TApplication)
    MainForm: TMainForm;
    SecondForm: TSecondForm;
    constructor Create; override;
    destructor Destroy; override;
  end;

procedure TMyApplication.Create;
begin
  inherited;
  MainForm := TMainForm.Create(Self);
  SecondForm := TSecondForm.Create(Self);
end;

procedure TMyApplication.Create;
begin
  MainForm.Free;
  SecondForm.Free;
  inherited;
end;


Nabízet čistý typ interface bez počítání referencí

  • V Delphi nelze používat interface bez počítání referencí. Lze pouze nadefinovat vlastní interface, kde funkce _AddRef a _Release nemají žádný účinek. Stále jsou však kompilátorem automaticky volány.
  • Vyžaduje vyšší režii
  • Při počítání referencí může docházek k vzniku uzavřených smyček, které nejsou automaticky uvolněny
  • Vede ke složitějšímu ladění aplikace a vzniku dalších záludných chyb
  • Kombinování tříd bez a s počítáním je jen velmi obtížně udržitelné
type
  TSomeInterface = interface
  end;

Umožnit definici proměnných v interface

  • Použití property je v mnoha případech zbytečné a vede k další režii
  • Použití property a metod Set a Get snižuje čitelnost definice
type
  TSomeInterface = interface
    Value: Byte;
  end;


Přidat do jazyka podporu pro "objektové" elementární typy

Sloučit funkce a základní elementární typy do objektové formy. Základní typy se však kopírují jako přímá data, kdežto objekty jako reference.

type
  TByte = class(IAssignable, IComparable, IOrdinal)
    procedure Assign(Source: IAssignable); operator :=;
    function EqualTo(Source: IComparable): TBoolean; operator =;
    function LessThan(Source: IOrdinal): TBoolean; operator <;
    procedure Inc;
    procedure Dec;
    ...
  end;

  TRefByte = ^TByte;

Definovat společný kořenový typ

Jeho název by byl např. TType nebo prostě type. K němu také definovat typ ordinal jako kořenový pro celočíselné typy. To by mělo využití při použití generických typů při definici omezení constraint.