Dobry den,

tohle je typicke pro privandrovalce z jazyka C (nic ve zlem, C je super
jazyk). Tito programatori chteji u kazdeho prikazu vedet, jak se prelozi a
jak se provadi (to samo o sobe samozrejme neni spatne, spis naopak) a pak
se snazi pouzivat ty "nejefektivnejsi" konstrukce.
Jakkoliv se to muze zdat prinosne ci alespon neskodne, vetsinou to vede k
tomu, ze kod je zaplevelen temito "efektivnimi" konstrukcemi, ktere
obvykle snizuji citelnost a jen malokdy vedou k tomu, ze program je
skutecne rychlejsi. Proto by mel kazdy rozumny vedouci projektu takoveho
"optimalizatora" vytahat za usi.
Pokud chcete optimalizovat, pustte profiler na funkcni program, najdete
misto, kde program travi vetsinu casu ("measure, don't guess") a pak
optimalizujte. Snazit se odhadnout, kde bude potreba optimalizace, je
hadani a i ti, kteri rozumeli mailu Ladi Thona v tomto vlaknu, by meli
uspesnost takoveho hadani pravdepodobne nizkou. Navic, dokud neni potreba
optimalizovat, nema smysl nejakou optimalizaci delat.

Takze: 1) zamerte se na spravny navrh (jak tu psal Dagi),
 2) piste srozumitelny kod,
 3) pokud je vysledny program pomaly, pouzijte profiler a pak pripadne
optimalizujte. Ne vsak drive!

Jinak potreba instanceof by vas mela vest k zamysleni, zda je vas navrh
optimalni a zda by misto instanceof nebylo lepsi pouzit virtualni metodu.

Z.T.
-- 
Zdenek Tronicek
FIT CTU in Prague


Pavel Nemec napsal(a):
> Dobry den,
> resim takovy maly problem toho co je lepsi pouzivat  pro rozliseni
> typu objektu.
>
> Ja jsem zastance pouzivat interface a nechat compilator/runtime aby si
> vybral, kterou metodu zavola. Muj oponent pochazi vice z Ccka a je mu
> blizsi pouzivat klice, pripadne instanceof.
>
> Ja jsem mel vzdy za to ze instanceof je velmi pomale a nedoporucuje
> se, nicmene jsem se docetl, ze to jiz davno neplati.
>
> Udelal jsem si maly test, kdy zjistuji zda je objekt daneho typu na
> zaklade volani
> instanceof
> interface - nezjistuji, pouze volam interface metodu
> na zaklade objekt.getID()  + pretypovani.
>
> Myslel jsem ze interface bude s prehledem nejrychlejsi, nicmene tomu
> odpovida jen maly pocet volani (volam v cyklu a zjistuji jestli objekt
> v listu je daneho typu)
>
> pro 20 000 polozekinstanceof: 20000 item took 25milsec, and result is
> 0 (should be 0)
> interface: 20000 item took 4milsec, and result is 0 (should be 0)
> id:       20000 item took 23milsec, and result is 0 (should be 0)
>
> pro vysi pocet pak rychlost interface jiz kleas a napriklad pro 20M
> instanceof: 20000000 item took 284milsec, and result is 0 (should be 0)
> interface: 20000000 item took 380milsec, and result is 0 (should be 0)
> id:       20000000 item took 188milsec, and result is 0 (should be 0)
>
>
> Zdrojak je nejednodusi mozny, viz: http://pastebin.ca/1909107
>
> je tohle znama vec, a je tedy skutecne jedno zda(co se tyce rychlosti)
> pouziji instance of misto interface?
>
>
> Diky,
> Pavel
>

Odpovedet emailem