eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingJakie typowanie jest najlepsze i dlaczego statyczne?Re: Jakie typowanie jest najlepsze i dlaczego statyczne?
  • Data: 2013-01-28 13:08:11
    Temat: Re: Jakie typowanie jest najlepsze i dlaczego statyczne?
    Od: Michoo <m...@v...pl> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    On 28.01.2013 08:38, M.M. wrote:
    > W dniu niedziela, 27 stycznia 2013 22:55:54 UTC+1 użytkownik Przemek O napisał:
    >
    >> A ja mam wrażenie, że gdyby nie wynaleziono komputerów, to ilość błędów
    >> oprogramowania też drastycznie by spadła, a wręcz nigdy by nie powstała...
    >> MSPANC
    > Ehhh
    >
    >>> Ale jak napisałem, to tylko wrażenie. Czy znacie publikacje
    >>> analizujące zależność defektów programów od języka?
    > Masę przypadkowej lektury przeczytałem na temat tego, jak to mało
    > błędów popełnia się w javie. Czy to prawda?

    Java też bywa błędogenna przez skopany projekt:
    1. Niektóre wyjątki są checked (czyli trzeba je "gdzieś" obsłużyć) ale
    inne nie. Unchecked jest np "NumberFormatException" co oznacza, że łatwo
    zrobić kod, który w momencie otrzymania nieprawidłowego numerka poleci
    aż do dołu.

    2. Operatory i metody.
    Gdy mamy dowolną mieszankę int i Integer to operatory >,<,>=,<= działają
    jak trzeba, ale operatory == i != działają dla dwóch Integerów zależnie
    od tego jak duża wartość jest w nich trzymana ;)

    equals jest zdefiniowane w Object, więc:
    String s="";Integer i=1;
    if(s.equals(i)
    jest całkowicie poprawną konstrukcją tożsamą z if(false)

    3. Operowanie na haszach.
    Większość kontenerów pracuje na bazie hashCode() używając equals w
    przypadku kolizji. Trzeba trzymać te dwie metody "zsynchronizowane" albo
    można uzyskać bardzo subtelne błędy.

    4. Parsowanie.
    Zagadka - czym się różnią:

    try{
    Integer i = Integer.valueOf(str);
    return i;
    }catch(Exception ex){
    return null;
    }

    try{
    Boolean i = Boolean.parseBoolean(str);
    return i;
    }catch(Exception ex){
    return null;
    }

    4. Dalsza zabawa z equals. Kontenery używają equals, które jest z
    "Object", więc można robić klasy "selektorow". Powoduje to niestety, że:

    Map<String,String> map = new HashMap<String,String>();
    Integer i=1;
    //...
    map.get(i);

    Jest poprawnym składniowo sposobem pobrania nulla z kolekcji.
    map.put(i,"aaa");
    jest oczywiście niepoprawne z powodu niegodności typów.

    Istnieje przy tym interface Comparable, ale służy właściwie tyko do
    sortowania, więc 0 bezpieczeństwa typów.


    etc.


    --
    Pozdrawiam
    Michoo

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: