Nie trzeba obsługiwać nulli w metodach bo jak cały kod opatrzysz ifami żeby nie mieć nigdzie nulla to null nie przyjdzie do metody i nie musisz sie nim martwić.
Brawo! Nie trzeba obsługiwać nulli w metodach bo jak cały kod opatrzysz ifami
. Nie trzeba być wegetarianinem, wystarczy nie jeść mięsa. Nie trzeba być martwym, wystarczy nie umierać.
Przyjacielu, @AbcDefGhi to "opatrywanie ifami" to jest właśnie ta obsługa o której mówiłem. Typy w językach programowania są właśnie po to żebyś nie musiał robić takich checków sam.
Wiadomo, że można przypisać nulla do List<int>
, tylko wtedy dostaniesz ostrzeżenie o tym, że takie coś wystąpiło i jak to zignorujesz to sam sobie jesteś winny. To sprawdzanie robisz tylko tam gdzie napiszesz np List<int>?
, jak napiszesz samo List<int>
to nie musisz sprawdzać bo jak nigdzie nie masz ostrzeżeń to znaczy, że nulla tam nie ma.
Cały czas mówię to samo.
Po to masz system typów, żebyś nie musiał sam tego robić.
tylko wtedy dostaniesz ostrzeżenie o tym, że takie coś wystąpiło i jak to zignorujesz to sam sobie jesteś winny
Jak masz normalny system typów, jak np w Kotlinie, i przekażesz nulla w miejscu które go nie przyjmuje to nie dostajesz jakiegoś głupiego ostrzeżenia, tylko błąd kompilacji po prostu. To jest normalny system typów.
Cel tego jest taki, aby dać możliwość uniknięcia niespodziewanego nulla. Owszem czasami trzeba sie naprodukować, żeby to osiągnąć, ale da się. A dodatkowo przez znak ?
masz szybką możliwość określenia czy oczekujesz nulla czy nie, bez potrzeby tworzenia nowego typu specjalnie przeznaczonego do trzymania wartosci domyslnej.
Domyślam się. W normalnych jezykach, jak np Kotlin masz: List<int>
nie przyjmuje null
, List<int>?
przyjmuje.
W C# jest inaczej. w List<int>?
możesz wsadzić null
, ale w List<int>
(bez ?
) też możesz. Owszem, dostaniesz ostrzeżenie, ale nadal możesz. System typów tego nie odrzuci, mimo że powinien.
Dlatego powiedziałem ze to jest zepsute. Jeśli wsadzasz do języka "nullable types", czyli np. List<int>?
to normalną konsekwencją tego jest to, że jak typ nie ma tego ?
, to wsadzenie null
jest traktowany jako błąd typów - w c# nie jest, mimo że powinien. Podobnie jest w PHP ?array
przyjmuje null
, ale jak masz array
to wsadzenie null
kończy się błędem.
Można dyskutować czy lepszy jest twardy zakaz przypisania nulla do typu nienullowalnego czy samo ostrzeżenie wystarczy,
No oczywiście że lepsze byłoby zakaz wsadzenia null
do typu nienulowalnego bez dwóch zdań.
tylko dużej różnicy nie ma skoro w obu przypadkach można wszystko osiągnąć, kwestia tylko upodobania.
Jeśli taki argument wyciągasz, to równie dobrze możnaby się w ogóle pozbyć sprawdzania typów - wtedy też dałoby się wszystko osiągnąć.