czwartek, kwietnia 12, 2007

Jak używamy Java'y ;-)

Update: 12/04/2007 21:04Do 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 prostych
tworzenie obiektów
Ciekawie 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 postybeta
Patrzajcie 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 ..." ;-)

2 komentarze:

  1. 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ń
  2. 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
    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ł :-)

    OdpowiedzUsuń