Autor Téma: Nějaké info o nové verzi Delphi  (Přečteno 2119 krát)

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1381
  • Karma: 33
    • Pepak.net
Re:Nějaké info o nové verzi Delphi
« Odpověď #45 kdy: 09-11-2018, 09:06:20 »
Jen pro jistotu: rozumíš, že nemusíš to Create používat, že?
Jenže až od Delphi 10.3. V současných Delphi musíš - a ještě to nesmí být konstruktor, protože jinak ti to Delphi nezkompilují:

Kód: Delphi [Vybrat]
  1. {$apptype console}
  2. type
  3.   TTestRecord = record
  4.     Value: string;
  5.     constructor Create;
  6.   end;
  7.  
  8. constructor TTestRecord.Create;
  9. begin
  10.   Value := 'Ahoj';
  11. end;
  12.  
  13. var
  14.   Rec: TTestRecord;
  15.  
  16. begin
  17.   Writeln(Rec.Value);
  18.   Rec.Create;
  19.   Writeln(Rec.Value);
  20. end.
Testováno na 10.2: "Error: E2394 Parameterless constructors not allowed on record types"

Offline zdenek

  • Plnoletý
  • ***
  • Příspěvků: 131
  • Karma: 8
Re:Nějaké info o nové verzi Delphi
« Odpověď #46 kdy: 09-11-2018, 09:46:15 »
On to taky není úplně konstruktor.

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1381
  • Karma: 33
    • Pepak.net
Re:Nějaké info o nové verzi Delphi
« Odpověď #47 kdy: 09-11-2018, 10:11:32 »
On to taky není úplně konstruktor.
Jaký jiný název navrhuješ pro funkci, která se zavolá na začátku života datového bloku a nastaví ho do nějakého výchozího stavu?

Nebo jinak, v čem se podle tebe liší konstruktor v tvém pojetí od "konstruktoru" recordu?

Offline zdenek

  • Plnoletý
  • ***
  • Příspěvků: 131
  • Karma: 8
Re:Nějaké info o nové verzi Delphi
« Odpověď #48 kdy: 09-11-2018, 10:39:25 »
Konstruktor je součástí alokace objektu dané třídy. Je kolem něho nabalena další funkcionalita. Mně je celkem jedno jak tomu říkat, ale tady u recordu je to trochu něco jiného. Ten record existuje sám  o sobě a toto je vlastně jenom procedura, která s ním pracuje. Mulvím o 10.2 a starší.

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1381
  • Karma: 33
    • Pepak.net
Re:Nějaké info o nové verzi Delphi
« Odpověď #49 kdy: 09-11-2018, 10:56:18 »
Konstruktor je součástí alokace objektu dané třídy.
Ne, to není.

Citace
Ten record existuje sám  o sobě
To také není pravda. I u recordu proběhne alokace, akorát jiným mechanismem, a udělá ji kód dodaný kompilátorem, ne explicitně programátor.

Pochop, že se nebavím o tom, jak to vypadá na úrovni zdrojového kódu. Bavím se o tom, jak to je udělané uvnitř.

Offline Delfin

  • Guru
  • *****
  • Příspěvků: 1285
  • Karma: 56
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
Re:Nějaké info o nové verzi Delphi
« Odpověď #50 kdy: 09-11-2018, 12:00:31 »
Jaký jiný název navrhuješ pro funkci, která se zavolá na začátku života datového bloku a nastaví ho do nějakého výchozího stavu?

Napr. Initialize. V kodu je pak lepe videt ze se jedna o inicializaci struktury, ne o tvorbu instance. Samozrejme se nebavim o nejake migraci datovych typu z datove struktury na tridu a opacne, kdybys tim chtel argumentovat :).

I u recordu proběhne alokace, akorát jiným mechanismem, a udělá ji kód dodaný kompilátorem, ne explicitně programátor.

Deje se to prave tim doted zapovezenym bezparametrickym konstruktorem.
« Poslední změna: 09-11-2018, 12:07:31 od Delfin »
I'm a soldier, so don't panic! I know the underground! I like WTFPL license! No more Google, go duck, go!

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1381
  • Karma: 33
    • Pepak.net
Re:Nějaké info o nové verzi Delphi
« Odpověď #51 kdy: 09-11-2018, 14:34:05 »
Aha. Zjevně je tu zásadní neporozumění mezi tím, co je to alokace, co je to inicializace, a co z toho dělá konstruktor. No nic, tak já už mlčím.

Offline Slappy

  • Plnoletý
  • ***
  • Příspěvků: 147
  • Karma: 9
  • Slappy
    • Verze Delphi: 10.2 Tokyo + Vsetky :)
    • unSigned
Moje projekty: http://www.unsigned.sk Tvorba cool dizajnovych instalatorov v NSIS a Inno Setup. Rozsirenie pre Visual Studio a RAD Studio pre tvorbu NSIS a Inno Setup instalatorov.

Offline vandrovnik

  • Guru
  • *****
  • Příspěvků: 507
  • Karma: 36
    • Verze Delphi: 10.2
Re:Nějaké info o nové verzi Delphi
« Odpověď #53 kdy: 09-11-2018, 18:47:20 »
Jen pro jistotu: rozumíš, že nemusíš to Create používat, že?

Jo, rozumím, měl jsem do příkladu napsat to tFormatSettings, u něj v helpu je přímo:
1. Declare a variable of type TFormatSettings.
2. Call TFormatSettings.Create to populate the TFormatSettings variable with locale information (FS := TFormatSettings.Create('en-US'); ).
Což mě pak vždycky znejistí, jestli jsem ho náhodou taky neměl uvolnit, pokud si nedám do komentáře, že uvolňovat nemusím.

Offline Delfin

  • Guru
  • *****
  • Příspěvků: 1285
  • Karma: 56
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
Re:Nějaké info o nové verzi Delphi
« Odpověď #54 kdy: 09-11-2018, 19:05:00 »
Aha. Zjevně je tu zásadní neporozumění mezi tím, co je to alokace, co je to inicializace, a co z toho dělá konstruktor. No nic, tak já už mlčím.

Za me ne. Alokace recordu nezajisti jeho inicialiaci (v zavislosti na scope). V pripade lokalni promenne jde jen o kus pameti o jehoz stavu muze rozhodnout programator nastavenim hodnot nebo inicialiaci pomoci funkce Default. Konstruktor v pripade trid zarizuje jak alokaci, tak v zavislosti na implementaci i inicializaci vychozich hodnot.
« Poslední změna: 09-11-2018, 19:33:48 od Delfin »
I'm a soldier, so don't panic! I know the underground! I like WTFPL license! No more Google, go duck, go!

 

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

Jméno: E-mail:
Ověření:
Kolik je šest plus čtyři (slovem):