Update: 12/04/2007 21:04
Do pierwszej części moich wczorajszych, a dokładniej nocnych ;-) dywagacji wkradł się dość poważny błąd. W obliczeniach dotyczących typów obiektów przyjąłem, że pozycja AnyObject opisuje wszystkie tworzenia nowych obiektów typów innych niż wrappery, Object, String, wątki lub wyjątki. W rzeczywistości była to liczba wszystkich miejsc tworzenia nowych obiektów dla dowolnego typu. Poniżej tekst wpisu z poprawionymi wartościami.Pozwoliłem sobie dziś dokonać analizy indeksowanego przez Google kodu w Java'ie. Jako źródło wiedzy posłużyło mi
Google Code Search.Wyniki są dość ciekawe ;-) Np. okazuje się, że ponad 60% tworzonych w kodzie w Java'ie obiektów to wrappery na typy proste (18.67%, z czego prawie 55.77% to Integer), sam Object (około 2.39% ogółu wszystkich), String (6.22% z wszystkich). Wyjątki stanowią zaś łącznie ponad 31.13% wszystkich tworzonych obiektów, z czego przeważająca większość bo 95% to wyjątki bardziej szczegółowe niż Exception ;-).
tworzenie obiektów prostychtworzenie obiektówCiekawie przedstawiają się też obserwacje dotyczące deklaracji wyrzucanych wyjątków. W ponad 22% przypadków ograniczono się do deklaracji wyjątku ogólnego - Exception - nie zawężając deklaracji do bardziej szczegółowego typu. Zła praktyka ;-)Co gorsza w sekcjach try... catch aż w 39% łapane są wyjątki "jak leci", czyli Exception.Jedna z bardziej pomocnych cech Java'y jest więc nie używana przez 39% programistów ;-)
Podobne postybetaPatrzajcie w kod a znajdziecie ;)Sudoku - atak pierwszy ;-)W jakiej firmie warto pracować?ePubGenerator v0.0.2"Na kogo oddasz głos w wyborach prezydenckich i dlaczego będzie to ..." ;-)
Ha! A przy zliczaniu tworzonych obiektow typu prostych (Number i pochodne) patrzyles tylko na konstrukcje typu "new" czy tez TypeName.valueOf(xxx)? Chociaz to drugie to pewnie za trudne dla wiekszosci koderow... ;-)
OdpowiedzUsuńJedynie new Typ(), dokładniej wg. wyrażenia regularnego [tutaj dla Integer'a] "new\s+Integer(.*)" z zawężeniem do wyników w Java'ie
OdpowiedzUsuńDla Integer'a Integer.valueOf() użyte jest 7 tysięcy razy, new Integer() prawie 70 tysięcy razy ;-)
Czyli zmiany tu są o jakieś 10 do 20%, co zwiększyłoby jeszcze udział wrapperów.
A co do używania TypeName.valueOf() to sam bym na to nie wpadł :-)