Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
Solid.Sn
Založen: 08. 08. 2009 Příspěvky: 55
|
Zaslal: 18. leden 2011, 17:42:26 Předmět: |
|
|
rezna napsal: |
a testujes to doufam v releasu a se zapnutyma optimalizacema na max? |
Aha... no jo tak v releasu jsou všechny tři způsoby defakto identické a to i při milardě iterací. |
|
Návrat nahoru |
|
 |
Pavel
Založen: 29. 07. 2007 Příspěvky: 54 Bydliště: Litovel
|
Zaslal: 18. leden 2011, 18:56:33 Předmět: |
|
|
rezna napsal: |
samozrejme ze prime prirazeni hodnoty je vzdycky rychlejsi, ale setter by nemel byt o tolik pomalejsi ... |
Tak pokud se setter a getter definuje primo v hlavicce, pak se inlinuje a melo by to byt uplne jedno.
Jinak k tvemu tematu - podle me, je chyba psat si do C++ properties, kdyz v C++ nejsou. V C++ mame settey a gettery. Ma se programovat v jazyce a ne do jazyka. Viz ty hruzy typu:
kód: |
#define begin {
#define end } |
No a jeste si rypnu, ze public promenna do tridy nepatri, ta patri do struktury. |
|
Návrat nahoru |
|
 |
if.then
Založen: 13. 04. 2008 Příspěvky: 579
|
Zaslal: 18. leden 2011, 19:07:01 Předmět: |
|
|
V čem je problém public proměnných ve třídě? Vždyť to odvádí stejnou práci jako kombinace normálního getteru/setteru, ne?
EDIT: Ty define jsou fakt prasárna. _________________ For guns and glory, go to www.ceske-hry.cz.
For work and worry, execute VC++. |
|
Návrat nahoru |
|
 |
igor

Založen: 28. 07. 2007 Příspěvky: 196
|
Zaslal: 18. leden 2011, 19:35:37 Předmět: |
|
|
Protože ideologie. Prý je to vždy součástí vnitřního stavu objektu a ne jeho rozhraní a gettery a settery jsou tak super, že za cenu neskutečného zasviňování kódu získáš boží výhodu v tom, že pokud trochu změníš implementaci a tu proměnnou budeš muset po těch úpravách ještě nějak zpracovávat, tak to nemusíš měnit v kódu používajícím danou třídu. Samozřejmě je přece úplně jasné, že pokud potřebuješ dělat změny, tak to budou právě jen blbůstky co jdou vyřešit v těch getterech a setterech, ehm.
(ale jo, já to chápu u nějakého enterprise programování, ale slepě se toho držet i např. v soukromých herních projektech v C++ je imho fakt hovadina) |
|
Návrat nahoru |
|
 |
rezna
Založen: 27. 07. 2007 Příspěvky: 2156
|
Zaslal: 18. leden 2011, 20:06:43 Předmět: |
|
|
je to treba o validaci tech hodnot - tam s public promennou neuspejes -> pokud to neosetris na vsech mistech, kde s ni pracujes, ...
to jsou proste ty dobre programatorske navyky, ktere ale vic jako 80 % programatoru nema a proto pak do noci ladi, ladi a ladi a nevi, kde je problem
pritom staci tak malo ... |
|
Návrat nahoru |
|
 |
igor

Založen: 28. 07. 2007 Příspěvky: 196
|
Zaslal: 18. leden 2011, 21:56:07 Předmět: |
|
|
Jasně, ale často jsou prostě případy, kdy tu validaci nepotřebuju, nemá tam smysl a ani prostě nikdy nebude mít (a už vůbec ne tak, že by mě při nějaké modifikaci gettery a settery zachránily) - hlavně se bavím o situaci, kde je nějaká proměnná dost low-level záležitostí a nemá smysl kolem toho dělat nějakou omáčku, třeba u těch her se to myslím stává často, např. různé pozice a jiné vektorové hodnoty - ostatně četl jsem už dost článků od profi vývojářů, kteří se k tomu taky staví podobně.
Bavím se teda spíše o tom C++ a uvědomuji si, že je to nečisté podle zásad, které samy o sobě jsou rozumné. Z pohledu toho, co se hlavně dělá v nějakých modernějších jazycích, kde se vše odehrává trochu víc hi-level a jde o nějaké velké udržovatelné systémy, to prasárna bude. |
|
Návrat nahoru |
|
 |
Ladis

Založen: 18. 09. 2007 Příspěvky: 1537 Bydliště: u Prahy
|
Zaslal: 18. leden 2011, 22:53:12 Předmět: |
|
|
Pavel napsal: |
No a jeste si rypnu, ze public promenna do tridy nepatri, ta patri do struktury. |
A čím se liší struktura od třídy kromě výchozího oprávnění? _________________ Award-winning game developer |
|
Návrat nahoru |
|
 |
Tringi

Založen: 28. 07. 2007 Příspěvky: 290
|
Zaslal: 18. leden 2011, 23:05:54 Předmět: |
|
|
Pakliže je potřeba validace, určitě se nějaký setter hodit může, ale pak je třeba domýšlet další větev programu: proč může něco nastavit špatnou hodnotu, a co by se mělo stát když se tak stane.
Nebo použít takový datový typ, aby možnost neplatného zadání prostě vylučoval, např. bool pro příznaky, unsigned pokud nechci záporné hodnoty, enum pro výčet rozumného množství možných hodnot. Zde pak pomůže i překladač.
Ap ropo, podobné "properties" jsem si implementoval několikrát taky (viz ext::vartor), v důsledku snaha o maximálně obecnou šablonu asi ani nestojí za to, protože pokaždé chceš nebo potřebuješ něco trochu jiného, a každá varianta má své zápory. _________________ WWW | GitHub | TW |
|
Návrat nahoru |
|
 |
rezna
Založen: 27. 07. 2007 Příspěvky: 2156
|
Zaslal: 18. leden 2011, 23:24:44 Předmět: |
|
|
@igor: az ukaze cas a profiler ze dana property je opravdu ten bottleneck v programu, ktery tak usilovne hledas, pro me za me se treba zacni modlit k Alahovi aby ti pomohl a nebo predelej property na public membera
do te doby proste ne. techto premature optimizations vidam v kodech tuny a jenom to prinasi bolest.
treba nemoznost zmenit jednoduse implementaci problemu, bez toho aniz bych zasahnul na tisici ruznych mistech ...
navic v debugu je proste zahodno testovat vsechno mozny - nas kod treba bezi s ASSERTAMA tak 5-6x pomaleji nez bez nich ... |
|
Návrat nahoru |
|
 |
Pavel
Založen: 29. 07. 2007 Příspěvky: 54 Bydliště: Litovel
|
Zaslal: 18. leden 2011, 23:37:40 Předmět: |
|
|
Ladis napsal: |
Pavel napsal: |
No a jeste si rypnu, ze public promenna do tridy nepatri, ta patri do struktury. |
A čím se liší struktura od třídy kromě výchozího oprávnění? |
To je jen rozdil z pohledu kompilatoru. Je fajn pokud si clovek udela jasno k cemu bude pouzivat struktury a k cemu tridy. |
|
Návrat nahoru |
|
 |
Pavel
Založen: 29. 07. 2007 Příspěvky: 54 Bydliště: Litovel
|
Zaslal: 18. leden 2011, 23:53:17 Předmět: |
|
|
if.then napsal: |
V čem je problém public proměnných ve třídě? Vždyť to odvádí stejnou práci jako kombinace normálního getteru/setteru, ne? |
Ani ty settery a gettery nejsou nic pekneho. Pokud jich pribyva ve tride nejak vice, tak to nevesti nic pekneho.
Tohle je docela ozehave tema...ale ja to zkusim...
Trida by mela ziskat svuj stav v konstuktoru a mel by se menit na zaklade predanych zprav a zmena stavu by se mela projevit zmenou chovani. Kdyz menis stav objektu explicitne setterem, tak muzes narusovat zapouzdreni...proste vnejsek muze vedet prilis mnoho o vnitrku objektu.
Stejne tak pokud explicitne ziskavas stav objektu, tak ho pravdepodobne chces pouzit pro nejake vetveni kodu pomoci ifu a switchu apod. no tim se vyhybas polymorfizmu.
Jasne, ze existuji vyjimky, nebo spise cele tridy ukolu, kde je tomu jinak...jako treba implementace vektoru apod. |
|
Návrat nahoru |
|
 |
igor

Založen: 28. 07. 2007 Příspěvky: 196
|
Zaslal: 19. leden 2011, 01:10:37 Předmět: |
|
|
@rezna:
Já jsem právě nepsal nic o výkonu. Já jen psal, že pro některé problémy mi to přijde jako přehlednější a jasnější přístup, protože v daném případě getter/setter/property nemá absolutně žádnou výhodu a jenom dělá bordel v kódu (aspoň v C++). Jedná se fakt spíše o lowlevel záležitosti (jo, můžeme z toho udělat struktury, ale ta hranice nemusí být až tak jasná), kde chci mít pocit, že sahám přímo do míst v paměti a ne že volám nějaké metody, i když kompilátor to může nakonec udělat stejně. Je prostě jednodušší a rychlejší napsat to "OOP špinavě", protože vím, co chci přesně udělat - ty věci se fakt určitě nebudou nikdy měnit nebo jestli jo, tak určitě víc než tak, že budu moci použit to původní rozhraní - např. ty vektory nebo ze složitějších třeba nějaké "syrové" enginové objekty, které chci umět bleskově alokovat a dealokovat v paměti nějakým stack alokátorem, chci mít s nimi možnost zacházet jako s kusy paměti a je mi předem (nebo klidně nepředem, ale najednou narazím na to, že je to bottleneck) jasné, že to tak prostě musím udělat.
Právě si myslím, že pro věci popsaného typu takto jde možná překvapivě udělat přehlednější kód méně náchylný k chybám, než nějakým zamořováním gettery/settery/properties, ten kód může být krásně čitelný.
Vím o těch zmíněných OOP zásadách a jejich výhodách, ale nějak nevěřím, že to fakt je the silver bullet pro každou situaci. Jasně, že to tak nebudu dělat třeba v nějakém typickém velkém javovém projektu.
Tímto s tím končím, protože si myslím, že si vůbec neodporujeme a už k tomu nemám co říct, klidně to samozřejmě můžu vidět celé blbě. |
|
Návrat nahoru |
|
 |
|