With
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:
Prawidłowe wypełnienie rekordu jest przedstawione poniżej:
Dzięki zastosowaniu instrukcji wiążącej with kod ten można skrócić do następującej postaci:
Instrukcja with jest bardzo często używana przy tworzeniu dynamicznych obiektów, głównie okien. Zamiast pisać:
można napisać:
NP :
Zobacz też:
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ż:
Kategoria: Delphi
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