Autor Téma: MyError s variants record - nedokážem ho naplniť hodnotami  (Přečteno 1262 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4455
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:MyError s variants record - nedokážem ho naplniť hodnotami
« Odpověď #15 kdy: 17-07-2019, 15:26:22 »
Citace
Zblaznil ses? Vsechny rady v diskuzich jsou z principu zdarma.
Nie, ešte som sa nezbláznil. Viem, že rady sú zadarmo. Len tu je akosi ťažšie vyjadriť vďaku. To je všetko.
Ja mám akurát obavu, že o tých asi 20 dní tu už nebudeš chodiť a to bude pre nás citeľná strata. Doteraz tak urobili všetci, ktorí odišli do dôchodku.
« Poslední změna: 17-07-2019, 15:28:05 od Stanislav Hruška »
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Jirka

  • Plnoletý
  • ***
  • Příspěvků: 150
  • Karma: 8
    • Verze Delphi: XE2
Re:MyError s variants record - nedokážem ho naplniť hodnotami
« Odpověď #16 kdy: 17-07-2019, 15:36:57 »
Jen s tim, jak se blizi dopíčment, moje ochota resit v podstate cokoli z oblasti IT silne klesa  ;D

Doufám že tomuto fóru přízeň zachováš  -aspoň do 70   ;)

Online pf1957

  • Padawan
  • ******
  • Příspěvků: 2594
  • Karma: 133
    • Verze Delphi: D2007, XE3, DX10
Re:MyError s variants record - nedokážem ho naplniť hodnotami
« Odpověď #17 kdy: 17-07-2019, 15:53:16 »
Doufám že tomuto fóru přízeň zachováš  -aspoň do 70   ;)
Zrejme jen do te doby, co po me stavajici zamestnavatel bude loudit nejakou praci souvisejici s Delphi, abych byl v obraze, co se ve svete Delphi deje.

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1436
  • Karma: 34
    • Pepak.net
Re:MyError s variants record - nedokážem ho naplniť hodnotami
« Odpověď #18 kdy: 17-07-2019, 17:55:27 »
Je pravda, že stále neviem na čo mi je dobrý variant record. Viem/pochopil, že všetky hodnoty ukladá na jedno miesto pamäte. Ale tá variantnosť mi stále uniká :'(
Až na vysloveně speciální případy to nepotřebuješ a potřebovat nebudeš. Jako samozřejmě, má to využití, ale typicky jen pro low-level operace, kdy se buď snažíš maximálně efektivně využít paměť, nebo musíš spolupracovat s kódem, který to dělá (*). Nebo oboje. "Normální" člověk to s výjimkou * výše nepotřebuje takřka nikdy, už proto, že přínosy (úspora paměti, v některých případech i výkon) takřka nikdy nepřeváží náklady (komplikovanější, hůře srozumitelný kód, který je kvůli tomu těžší udržovat). Toť můj názor - názor člověka, který ještě předloni, když aktivně vyvíjel YTD, koukal víc na to, aby výsledný kód byl krátký, než na to, aby se to dobře programovalo...

Online pf1957

  • Padawan
  • ******
  • Příspěvků: 2594
  • Karma: 133
    • Verze Delphi: D2007, XE3, DX10
Re:MyError s variants record - nedokážem ho naplniť hodnotami
« Odpověď #19 kdy: 17-07-2019, 19:14:27 »
Ale tá variantnosť mi stále uniká :'(
Myslenka variantosti spociva v tom, ze chces do pameti o velikosti nejvetsi varianty alternativne ukladat data v ruzne strukture. Obecne muze existovat cast spolecna vsem variantam, ktera typicky obsahuje diskriminator a spolecne hodnoty, pak v podstate libovolne mnozstvi variant o libovolne strukture - ovsem ta uz nesmi byt variantni. Predstavi si, ze chces do recordu nacpat informace o osobe, takze udelas neco takoveho (schematicky):
Kód: Delphi [Vybrat]
  1. TPersonInfo = record
  2.   DatumNarozeni: TDate;
  3.   DatumUmrti: TDate;
  4.   ...
  5.   Pohlavi: ESex;  //Unknown, Male, Female, SheMale, ....
  6.  
  7.   case ESex of
  8.     Unknown: ;
  9.     Male: (DelkaPtaka: integer; ObvodBicepsu:integer);
  10.     Female: (KozyVelikost: integer; ObvodPresBoky:integer);
  11.     SheMale: (DelkaPtaka: integer; ObvodBicepsu:integer; KozyVelikost: integer; ObvodPresBoky:integer);
  12.     ...
  13. end;
  14.  
Clenove pred a vcetne Pohlavi jsou spolecne, Pohlavi je diskriminator, abys vedel, jake polozky z variantni casti mas pouzivat. Ovsem pokud to umis urcit jinak nez zkoumanim obsahu spolecne casti recordu, tak muzes diskriminator vypustit, stejne jako spolecna cast muze byt prazdna a pak mas spolecnou pamet, ktera muze mit pro kazdou variantu jinou strukturu (jiny pocet a velikost polozek) bez spolecne casti. Celkova pamet bude odpovidat nejvetsi variante, u mensich variant zustane zbytek nedefinovany

A ta variantnost ti byla doporucovana proto, ze jsi nechapal, jak spravne sestavit bitiky uvnitr treba 32bitove hodnoty, takze v jedne variante bys tam nastrkal n ruznym enumu klidne v n-ruznych variantach a z druhe varianty si vyzvedl jednu hodnotu spolecneho chyboveho kodu chyboveho kodu, ve ktere je tech ruznych enumu zakodovano. A Vice versa. Ovsem za predpokladu, ze jsi dospel k nazoru, ze tvoje aplikace potrebuje jeden chybovy kod.  Pokud ho nepotrebuje, nemusis zadny variantni record pouzivat.
« Poslední změna: 17-07-2019, 19:28:40 od pf1957 »