Jeśli pochodzisz z języka podobnego do języka C (C, C++, Java itp.), Możesz myśleć o jednostce jako o void
. Jest to typ, który powracasz, gdy nie chcesz niczego zwracać.
Teoretycy typu będą wskazywać, że jednostka nie jest pusta, ponieważ jednostka ma dokładnie jedną wartość, podczas gdy void ma 0 wartości.
W praktyce ilość informacji, które można przechowywać w obu typach, jest taka sama (0 bitów), chociaż języki, w których używa się jednostki, wydają się być przyjemniejsze w obsłudze, ponieważ można traktować je tak samo, jak każdą inną wartość.
Możesz przechowywać go w zmiennej, strukturze, kolekcji lub gdziekolwiek indziej, gdzie możesz zapisać wartość. Możesz przekazać jako argument lub zwrócić go w wyniku. Możesz utworzyć odniesienie do niego. Itd.
Kiedy jest to przydatne? Głównie wtedy, gdy nie obchodzi cię, z jakim typem wartości masz do czynienia. Oznacza to, że można pisać kod polimorficzny/ogólny, nie martwiąc się o to, czy wartość, z którą mamy do czynienia, faktycznie zawiera jakąkolwiek informację. Tj. Nie ma potrzeby specjalnego przypadku, jeśli przechowujesz aktualne dane lub ()
.
Jednym z przykładów użycia tej opcji jest HashSet
. A HashSet<T>
jest faktycznie zaimplementowany jako a thin wrapper around HashMap<T,()>
. (Mapa typu ogólnego: T
do ()
)
To bardziej przypomina 'void' w językach podobnych do C. O ile mi wiadomo, wszystko jest wyrazem rdzy, więc '()' jest wartością zwracaną przez coś, co jest wykonywane tylko dla jej efektów. – Lee
Możesz tworzyć własne typy o zerowym rozmiarze, podobnie jak '()', wypowiadając 'struct MyNewZeroSizeType;' Może być użyteczne ("typy znaczników"!) – bluss
To nie wygląda na 'null' w java, ponieważ jeśli powiedz, że zwracasz 'int', którego nie możesz zwrócić'() 'zamiast tego. – JustGage