Autor Téma: Dynamická událost  (Přečteno 8036 krát)

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 1764
  • Karma: 77
    • Verze Delphi: D2007, XE3, DX10
Re:Dynamická událost
« Odpověď #15 kdy: 11-03-2014, 14:23:28 »
Mimochodem během beta testu XE2 se uvažovalo zda má být Tag jen 32bit nebo NativeInt (tj. že pro 64bit by byl 64bit) a v podstatě valná většina testerů tlačila na to, aby byl nativeInt - a já s tím souhlasím :-). To jen pro zajímavost.
Me to prijde politovani hodne... Kdyz uz mermomoci chteji dat kladecum komponent  nejaky privesek, tak by to IMHO meli udelat v Delphi konzistetnim zpusobem a jako vsude ho udelat typu TObject, podobne jako to maji treba ve WinForms v .NET
« Poslední změna: 11-03-2014, 14:26:07 od pf1957 »

Offline Mi.Chal.

  • Guru
  • *****
  • Příspěvků: 567
  • Karma: 23
Re:Dynamická událost
« Odpověď #16 kdy: 11-03-2014, 14:47:35 »
Mimochodem během beta testu XE2 se uvažovalo zda má být Tag jen 32bit nebo NativeInt (tj. že pro 64bit by byl 64bit) a v podstatě valná většina testerů tlačila na to, aby byl nativeInt - a já s tím souhlasím :-). To jen pro zajímavost.

Je otázka, proč je to zrovna int, občas to pak lidi vede ještě k tomu, že se tam dávají objekty přetypované na int a pak se to přetypovává zpátky. Třeba v .Net jsou tagy taky, ale je to object, takže tam jde dát všechno přímo. Ale prakticky to taky nepoužívám.

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 1692
  • Karma: 69
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Re:Dynamická událost
« Odpověď #17 kdy: 11-03-2014, 15:04:34 »
Mimochodem během beta testu XE2 se uvažovalo zda má být Tag jen 32bit nebo NativeInt (tj. že pro 64bit by byl 64bit) a v podstatě valná většina testerů tlačila na to, aby byl nativeInt - a já s tím souhlasím :-). To jen pro zajímavost.
Me to prijde politovani hodne... Kdyz uz mermomoci chteji dat kladecum komponent  nejaky privesek, tak by to IMHO meli udelat v Delphi konzistetnim zpusobem a jako vsude ho udelat typu TObject, podobne jako to maji treba ve WinForms v .NET

Ano souhlasím, že by to bylo čisté. Víš kolik lidí by ale řvalo, že jim nejde přeložit kód z XE2 v Delphi 7? Pořád to tady poslouchám jak je nutná zpětná kompatibilita.

Pokud si pamatuji na jednu stranu sis tady nedávno stěžoval jak těch pár změn v XE3 v RTL byl pro tebe problém, na druhou stranu navrhovaná taková zásadní změna.

Chmm, Chmm
Embarcadero MVP - Czech republic

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 1692
  • Karma: 69
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Re:Dynamická událost
« Odpověď #18 kdy: 11-03-2014, 15:07:12 »
Mimochodem během beta testu XE2 se uvažovalo zda má být Tag jen 32bit nebo NativeInt (tj. že pro 64bit by byl 64bit) a v podstatě valná většina testerů tlačila na to, aby byl nativeInt - a já s tím souhlasím :-). To jen pro zajímavost.

Je otázka, proč je to zrovna int, občas to pak lidi vede ještě k tomu, že se tam dávají objekty přetypované na int a pak se to přetypovává zpátky. Třeba v .Net jsou tagy taky, ale je to object, takže tam jde dát všechno přímo. Ale prakticky to taky nepoužívám.

Proto taky NativeInt - aby to byla relativně bezpečná operace - pokud jsi to nepochopil.
Embarcadero MVP - Czech republic

Offline TLama

  • Guru
  • *****
  • Příspěvků: 597
  • Karma: 30
    • Verze Delphi: 7, 2009, XE3
Re:Dynamická událost
« Odpověď #19 kdy: 11-03-2014, 15:11:32 »
Víš kolik lidí by ale řvalo, že jim nejde přeložit kód z Delphi 7 v XE2?

Tak přesně těm bych řekl, že neměli používat Tag ;D

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 1692
  • Karma: 69
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Re:Dynamická událost
« Odpověď #20 kdy: 11-03-2014, 15:20:16 »
Víš kolik lidí by ale řvalo, že jim nejde přeložit kód z Delphi 7 v XE2?

Tak přesně těm bych řekl, že neměli používat Tag ;D

Kecy a to je tvůj názor.  V době Delphi 1 prostě nebylo tolik paměti a programátoři všude nervali objekty a mně taky nepřijde vhodné pokaždé tam cpát nějakou instanci - to je zhovadilost z .NETu a javy, kde je programátorům jedno kolik jejich program bere paměti.

Bohužel doba pokročila a v FMX je krome Tag:NativeInt z TComponent v následnících přidáno

    property TagObject: TObject read FTagObject write FTagObject;
    property TagFloat: Single read FTagFloat write FTagFloat;
    property TagString: string read FTagString write FTagString;


Embarcadero MVP - Czech republic

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 1764
  • Karma: 77
    • Verze Delphi: D2007, XE3, DX10
Re:Dynamická událost
« Odpověď #21 kdy: 11-03-2014, 15:25:26 »
Kecy a to je tvůj názor.  V době Delphi 1 prostě nebylo tolik paměti a programátoři všude nervali objekty a mně taky nepřijde vhodné pokaždé tam cpát nějakou instanci
Muj nazore je to taky. A uz  D1 mel privesky v podobe TObject, protoze to nejspis videli na WinAPI, akorat se jim nezdal typ void pointer dost nobl, tak z toho udelali TObject. Ale proc zavedli integer tak, to cert vi...

Jinak ta predchozi poznamka byla myslena, ze zadnu Tag:integer nemel nikdy exitovat a pokud uz to nekdo natolik potreboval, mel tam dat property Object jako vsude jinde...

Offline oxo

  • Guru
  • *****
  • Příspěvků: 690
  • Karma: 40
    • Verze Delphi: Primárně Lazarus, jinak D7 až aktuální
    • Kluug.net
Re:Dynamická událost
« Odpověď #22 kdy: 11-03-2014, 15:53:38 »
Kecy a to je tvůj názor.

Trochu se nám to tu přiostřuje. Ano, Tag musí zůstat, protože zpětná kompatibilita musí být zachována. Co se dá dělat. A ano, Tag je blbost (což ovšem nikdo ze zaujatých samozřejmě nemůže veřejně přiznat ;)).

[...] a zvláště u dynamických komponent je to zajímavá možnost.

Hmmm, tak to právě že určitě ne. Když to je dynamicky vytvořená komponenta, tak si můžu vždycky vytvořit potomka s potřebnou vlastností a nějakým normálním jménem:

Kód: [Vybrat]
type
TCodeButton = class(TButton)
private
  FSomeObject: TMyObject;
public
  property SomeObject: TMyObject read FSomeObject write FSomeObject;
end;

Nehledě na to, že NextGen za přetypovávání NativeInt <-> TObject klepe přes prsty...
Embarcadero Technology Partner, juj. Člen Lazarus týmu, oj.

Offline TLama

  • Guru
  • *****
  • Příspěvků: 597
  • Karma: 30
    • Verze Delphi: 7, 2009, XE3
Re:Dynamická událost
« Odpověď #23 kdy: 11-03-2014, 15:58:08 »
Kecy a to je tvůj názor.  V době Delphi 1 prostě nebylo tolik paměti a programátoři všude nervali objekty a mně taky nepřijde vhodné pokaždé tam cpát nějakou instanci - to je zhovadilost z .NETu a javy, kde je programátorům jedno kolik jejich program bere paměti.

Tak jsou to kecy nebo názor ? Vyber si. Obojí to být nemůže ::) Názor mám takový, že není třeba mít univerzální property Tag a že její použití akorát zhoršuje čitelnost kódu.
Jak říkám, viděl jsem "ukázkové" využití v akci a není to dvakrát příjemné počtení - natož pak procházet formem a hledat hodnoty Tagů (a pak se taky při jejich zadávání nesplést).

Jinak jistě, existovat musí, protože ji lidé ve 20. století doporučovali používat.
« Poslední změna: 11-03-2014, 16:13:38 od TLama »

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 1692
  • Karma: 69
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Re:Dynamická událost
« Odpověď #24 kdy: 11-03-2014, 16:10:42 »
Kecy bylo na to "Tak přesně těm bych řekl, že neměli používat Tag",  proste to tak musí být z hlediska kompatibility - to mne nastvalo.
Ne na to, že by se kdybych to ted delal neudelal jako TObject.

Musím vzdycky pocitat do deseti kdyz komunikuji s TLamou :-). Omlouvam se.
Embarcadero MVP - Czech republic

Offline Mi.Chal.

  • Guru
  • *****
  • Příspěvků: 567
  • Karma: 23
Re:Dynamická událost
« Odpověď #25 kdy: 11-03-2014, 16:47:55 »

[...] a zvláště u dynamických komponent je to zajímavá možnost.

Hmmm, tak to právě že určitě ne. Když to je dynamicky vytvořená komponenta, tak si můžu vždycky vytvořit potomka s potřebnou vlastností a nějakým normálním jménem:


To je otázka, jestli si kvůli tomu bude muset člověk definovat hromadu vlastních potomků tlačítek, to taky nevypadá na správnou cestu. A z každé třídy nemusí jít dědit (ale nejsem si jistý, jestli to v Delphi šlo říct).

Offline oxo

  • Guru
  • *****
  • Příspěvků: 690
  • Karma: 40
    • Verze Delphi: Primárně Lazarus, jinak D7 až aktuální
    • Kluug.net
Re:Dynamická událost
« Odpověď #26 kdy: 11-03-2014, 17:48:30 »

[...] a zvláště u dynamických komponent je to zajímavá možnost.

Hmmm, tak to právě že určitě ne. Když to je dynamicky vytvořená komponenta, tak si můžu vždycky vytvořit potomka s potřebnou vlastností a nějakým normálním jménem:


To je otázka, jestli si kvůli tomu bude muset člověk definovat hromadu vlastních potomků tlačítek, to taky nevypadá na správnou cestu. A z každé třídy nemusí jít dědit (ale nejsem si jistý, jestli to v Delphi šlo říct).

U dynamických komponent není problém si je zadefinovat. Kód se dá redukovat až na 3 řádky:
Kód: [Vybrat]
TCodeButton = class(TButton)
  SomeObject: TMyObject;
end;

A protože se vytváří dynamicky, není je třeba registrovat do IDE. Když si dám na jednu stranu pomyslných vah mé 3 řádky kódu a na druhou stranu stálé přetypovávání Tagu, tak ten Tag prohrává dost silně.

Dědit jde ode všeho, k čemu má člověk přístup (to je taky nutná podmínka k vytvoření objektu). Nebo se pletu ???
Embarcadero Technology Partner, juj. Člen Lazarus týmu, oj.

Offline Mi.Chal.

  • Guru
  • *****
  • Příspěvků: 567
  • Karma: 23
Re:Dynamická událost
« Odpověď #27 kdy: 11-03-2014, 19:01:09 »
Dědit jde ode všeho, k čemu má člověk přístup (to je taky nutná podmínka k vytvoření objektu). Nebo se pletu ???

V některých jazycích můžeš třídy označit, aby z nich dědit nešlo (sealed, final). Pak od nich potomky neuděláš.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 1764
  • Karma: 77
    • Verze Delphi: D2007, XE3, DX10
Re:Dynamická událost
« Odpověď #28 kdy: 11-03-2014, 19:04:40 »
V některých jazycích můžeš třídy označit, aby z nich dědit nešlo (sealed, final). Pak od nich potomky neuděláš.
V Delphi to jde taky viz treba http://edn.embarcadero.com/article/34324

Offline oxo

  • Guru
  • *****
  • Příspěvků: 690
  • Karma: 40
    • Verze Delphi: Primárně Lazarus, jinak D7 až aktuální
    • Kluug.net
Re:Dynamická událost
« Odpověď #29 kdy: 11-03-2014, 20:01:36 »
Že to je v C# a pod., jsem věděl, ale že je sealed i v Delphi, tak na to jsem už zapomněl. No nic, díky za upřesnění.

Dovoluji si ale tvrdit, že žádná komponenta, která připadá v úvahu na takové použití, sealed není. Trochu mi taková diskuze připomíná konspirační teorie :)
Embarcadero Technology Partner, juj. Člen Lazarus týmu, oj.

 

S rychlou odpovědí můžete používat BB kódy a emotikony jako v běžném okně pro odpověď, ale daleko rychleji.

Upozornění: do tohoto tématu bylo naposledy přispěno před 120 dny.
Zvažte prosím založení nového tématu.

Jméno: E-mail:
Ověření:
Křestní jméno zpěváka Gotta: