vložil Radek Červinka
1. května 2013 01:56
S příchodem Delphi XE4 je with pro nové kompilátory (neoficiálně) deprecated. Zajímal by mne Váš názor v anketě (jako vždy vpravo nebo přes hlasov.at/l4ch.
Původně IMHO byl with koncipován jako hint kompilátoru, že by bylo vhodné být trošku efektivnější ohledně použití nějakého záznamu (později objektu). S tím, jak se jazyk rozšiřoval, začínalo docházet k riskantním situacím, viz. dále.
Jak jsem byl dříve velkým zastáncem with, tak se mu nyní snažím vyhýbat, jelikož už několikrát jsem tvrdě narazil. Klasickým případem může být kód kdy "vytknete" nějaký záznam nebo objekt, ale později ten záznam (objekt) někdo rozšíří o nějaký identifikátor, který se jmenuje jako identifikátor nadřízeného objektu (např. formuláře).
Mějme
type
TMyRecord = record
x, y: Integer;
end;
var
r: TMyRecord;
begin
with r do
begin
// bla bla
Caption := IntToStr(x);
end;
end;
Dejme tomu, že uvedený kód je ve formuláři - Caption je TForm.Caption. Prima, za běhu se změní titulek okna.
Nyní do TMyRecord (případně objektu) přidáme property (proměnnou) Caption. Kompilátor to bez problémů schroustne, my v pohodě dáme program zákazníkovi a je hotovo. Přesně stejná situace nastala, když to TRect přibyla (počítaná) property Width a Height. Pokud člověk nebyl opatrný - byl problém na světě.
Takže za sebe mohu říct - ANO.