-
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
Następne wpisy z tego wątku
- 28.01.13 18:45 darekm
- 29.01.13 02:59 Roman W
- 29.01.13 09:44 Maciej Sobczak
- 29.01.13 10:38 M.M.
- 29.01.13 19:41 Andrzej Jarzabek
- 29.01.13 19:42 Andrzej Jarzabek
- 30.01.13 10:12 Maciej Sobczak
- 30.01.13 19:58 Andrzej Jarzabek
- 31.01.13 00:14 M.M.
- 31.01.13 10:14 Maciej Sobczak
- 31.01.13 21:29 Marek Borowski
- 01.02.13 09:47 Maciej Sobczak
- 01.02.13 11:50 M.M.
- 01.02.13 14:17 Bastion
- 01.02.13 22:59 Andrzej Jarzabek
Najnowsze wątki z tej grupy
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
- CfC 28th Ada-Europe Int. Conf. Reliable Software Technologies
- Młodzi programiści i tajna policja
- Ada 2022 Language Reference Manual to be Published by Springer
- Press Release - AEiC 2023, Ada-Europe Reliable Softw. Technol.
- Ada-Europe - AEiC 2023 early registration deadline approaching
- Ada-Europe Int.Conf. Reliable Software Technologies, AEiC 2023
- Ile cykli zajmuje mnożenie liczb 64-bitowych?
Najnowsze wątki
- 2024-06-27 Re: Prywatny parking? Pierwsze 10 minut bezplatnie
- 2024-06-27 A co mnie to koooorwa obchodzi?
- 2024-06-28 nawigacja satelitarna
- 2024-06-28 SmartLife/Tuya i osuszanie -- mordowanie z zimną krwią...
- 2024-06-27 położyłem kafelki
- 2024-06-28 Łódź => International Freight Forwarder <=
- 2024-06-28 Łódź => Spedytor Międzynarodowy <=
- 2024-06-28 Gdańsk => Head of International Freight Forwarding Department <=
- 2024-06-28 Sopot => Team Leader E-Commerce for Foreign Markets <=
- 2024-06-28 Warszawa => Senior React Native Developer <=
- 2024-06-28 Warszawa => Frontend Developer (React) <=
- 2024-06-28 Warszawa => Software .Net Developer <=
- 2024-06-28 Warszawa => Frontend Developer (React) <=
- 2024-06-28 Warszawa => Programista Full Stack .Net <=
- 2024-06-28 Warszawa => Frontend Developer (React) <=