Nếu bạn đến từ ngôn ngữ giống C (C, C++, Java, v.v.), bạn có thể nghĩ đơn vị giống như void
. Đây là loại bạn trở lại khi bạn không muốn trả lại bất kỳ thứ gì.
Loại nhà lý thuyết sẽ chỉ ra rằng đơn vị không giống như void, bởi vì đơn vị có chính xác 1 giá trị trong khi void có 0 giá trị. Trong thực tế, lượng thông tin bạn có thể lưu trữ trong cả hai loại là giống nhau (0 bit) mặc dù ngôn ngữ sử dụng đơn vị có xu hướng đẹp hơn vì bạn có thể xử lý nó như bất kỳ giá trị nào khác.
Bạn có thể lưu trữ nó trong biến, cấu trúc, bộ sưu tập hoặc bất kỳ nơi nào khác mà bạn có thể lưu trữ giá trị. Bạn có thể chuyển như một đối số hoặc trả lại kết quả. Bạn có thể tạo một tham chiếu đến nó. Vv
Vì vậy, khi nào thì hữu ích? Chủ yếu là khi bạn không quan tâm bạn đang xử lý loại giá trị nào. Nó có nghĩa là bạn có thể viết mã đa hình/chung chung mà không cần phải lo lắng về việc liệu giá trị bạn đang xử lý có chứa bất kỳ thông tin nào không. Tức là, Không cần trường hợp đặc biệt cho dù bạn đang lưu trữ dữ liệu thực tế hay ()
.
Một ví dụ về địa điểm này được sử dụng là trong HashSet
. A HashSet<T>
thực sự được triển khai dưới dạng a thin wrapper around HashMap<T,()>
. (Bản đồ từ loại chung T
đến ()
)
Nó giống như 'void' trong ngôn ngữ giống như C. Theo như tôi biết, mọi thứ đều là một biểu hiện trong rỉ sét, vì vậy '()' là giá trị được trả về bởi cái gì đó chỉ được thực hiện cho các hiệu ứng của nó. – Lee
Bạn có thể tạo các kiểu không có kích thước bằng 0, giống như '()' bằng cách nói 'struct MyNewZeroSizeType;' Nó có thể hữu ích ("loại đánh dấu"!) – bluss
Nó không giống như 'null' trong java vì nếu bạn nói rằng bạn trả về một 'int' bạn không thể trả về'() 'thay cho nó. – JustGage