._. napisał(a):
No ale w dotnecie mogę sobie zwrócić default(int) to po co mi jakiś ekstra typ jak optional ?
Jak chce mieć readera to robie sobie klasę z generycznym typem i wewnątrz klasy tworzę instancje z tego typ'a po refleksji.
Zamiast nulowych ifów mogę użyć znaku zapytania.To tak dla zasady mam używać, chain'nowych odpowiedników.?
No nie wiem czy to takie przydatne jest.
Ale zwrócenie default(int) też nic nie mówi. Żyjemy w takich czasach, że nie trzeba zwracać nic nie mówiących liczb, a można wykorzystywać system typów i struktury danych. Jeśli funkcja może zwrócić wartość ale nie musi, to Optional wprost o tym mówi - w przeciwieństwie do jakiejś domyślnej wartości typu 0. Patrząc na sygnaturę def blabla(...): Option[Int]
oraz na def blabla(...): Int
, w której z nich możesz mieć od razu pewność, że funkcja nie musi zwrócić wyniku? Dodatkowo, czemu akurat default(int) ma być jakąś magiczną wartością zwracaną z funkcji? A co jeśli wartość default(int) znajduje się w dziedzinie możliwych do zwrócenia wartości przez funkcję?
Nie wiem jak w dotnecie, ale przykładowo w Javie refleksji powinno się unikać na tyle na ile to jest możliwe, a używać jej jak już nie ma na nic innego ratunku. Domyślam się, że w dotnecie jest podobnie aczkolwiek mogę się tu mylić. Sam Reader służy do tego, aby móc skomponować kilka "klocków" (funkcji) jednocześnie abstrahując od tego, że każda z nich wymaga tych samych zależności.
Nie znam się na dotnecie, ale zgodnie z tym co znalazłem '?.' wykonuje operacje jeśli coś nie jest nullem, w innym przypadku zwraca nulla. To nie jest to samo co robi Option. Jeśli jakaś wartość jest zawarta wewnątrz kontekstu Option, to możesz używać 'map', 'flatMap' czy innych operacji tak, aby operować na wartości wewnątrz. Po wykonaniu wszystkich operacji koniec końców zwracany jest i tak Option (kontekst się nie zmienia) i potencjalny brak wyniku musisz jakoś obsłużyć. W przeciwieństwie do zwracania nulli znacznie to eliminuje możliwość (a praktycznie niweluje do 0) wystąpienia NPE.