Programowanie w języku Delphi

With

  • 2008-04-02 19:17
  • 1 komentarz
  • 3856 odsłon
  • Oceń ten tekst jako pierwszy
With - instrukcja wiążąca

Instrukcja with jest przeważnie używana wraz z rekordami lub obiektami. Nie pełni ona żadnej znaczącej roli ? uwalnia za to programistę od pisania zbędnego kodu. Załóżmy, że program zawiera następujący rekord:

var
  Rec : packed record
  X, Y : Integer;
  Imię : String[20];
  Nazwisko : String[20];
  Wiek : Byte;
end;


Prawidłowe wypełnienie rekordu jest przedstawione poniżej:

 
Rec.X := 12;
Rec.Y := 24;
Rec.Imię := 'Jan';
Rec.Nazwisko := 'Kowalski';
Rec.Wiek := 20;


Dzięki zastosowaniu instrukcji wiążącej with kod ten można skrócić do następującej postaci:

 
with Rec do
begin
  X := 12;
  Y := 24;
  Imię := 'Jan';
  Nazwisko := 'Kowalski';
  Wiek := 20;
end;


Instrukcja with jest bardzo często używana przy tworzeniu dynamicznych obiektów, głównie okien. Zamiast pisać:

procedure Foo;
var 
  F: TForm;
begin
  F := TForm.Create(Self);
  F.Top := 40;
  F.Left := 57;
  (...)
  F.Show;
end; 


można napisać:

procedure Foo;
begin
  with TForm.Create(Self) do 
  begin
    Top := 40;
    Left := 57;
    (...)
    Show;
  end;
end; 

Uwaga


Użycie "with" przysłania funkcje o identycznych nazwach w danym module, przez co dostęp do formularza i innych obiektów nadrzędnych jest tylko przez nazwę bądź self..
NP :
var
Obszar : Trect;
.....
With Obszar do
 Left := 20; // Ustala left zmiennej "Obszar" a nie np Formy
 Top := 10;
end;



Zobacz też:

1 komentarz

szopenfx 2008-10-28 17:11

Przy użyciu with można dokonać pewnych optymalizacji np. jeśli wywołujemy metodę z tym samym parametrem kilka razy zamiast pisać

Dokument.Szukaj('<jakis tag>').Szukaj('<inny tag>').SzukajAtrybutu('atrubut1').WyswietlZawartosc;
Dokument.Szukaj('<jakis tag>').Szukaj('<inny tag>').SzukajAtrybutu(' atrubut2').WyswietlZawartosc;
Dokument.Szukaj('<jakis tag>').Szukaj('<inny tag>').SzukajAtrybutu(' atrubut3').WyswietlZawartosc;
Dokument.Szukaj('<jakis tag>').Szukaj('<inny tag>').SzukajAtrybutu(' atrubut4').WyswietlZawartosc;

można to samo zapisać tak:
with Dokument.Szukaj('<jakis tag>').Szukaj('<inny tag>') do
begin
  SzukajAtrybutu('atrubut1').WyswietlZawartosc;
  SzukajAtrybutu('atrubut2').WyswietlZawartosc;
  SzukajAtrybutu('atrubut3').WyswietlZawartosc;
  SzukajAtrybutu('atrubut4').WyswietlZawartosc;
end;

w ten sposób nie musimy czekać na kilkukrotne przetworzenie metody Szukaj tylko operujemy na wcześniej zwróconym rezultacie