2017-06-01 12 views
7

Tôi bắt đầu học Kotlin và chỉ nhận thấy rằng Collections.isEmpty là một hàm chứ không phải thuộc tính. Tuy nhiên, Collections.size là thuộc tính và không phải là chức năng.Tại sao không phải là isEmpty trong Kotlin Bộ sưu tập một tài sản?

Trong hầu hết (tất cả?) Bộ sưu tập, tôi mong đợi hai tệp này có liên quan ngữ nghĩa và việc triển khai isEmpty có thể chỉ đơn giản là size === 0.

Vậy ... tại sao không phải là isEmpty thuộc tính? Nó chỉ đơn giản là một lỗi thiết kế?

+0

Có thể làm gì đó với thực tế là có một hàm mở rộng 'isNotEmpty()' cho 'Bộ sưu tập' trả về'! IsEmpty() '? – rozina

Trả lời

6

Khi quyết định phương pháp java.util.Collection sẽ tài sản trong kotlin.collections.Collection những cân nhắc sau đây đã được đưa vào tài khoản:

  • cả sizeisEmpty có thể bị coi là tài sản theo Kotlin coding conventions, tuy nhiên size thái gắn kết với việc thu thập và isEmpty chỉ là một đạo hàm của thuộc tính size.
  • khi thực hiện một bộ sưu tập người ta có thể ghi đè lên sizeval tài sản với một var tài sản (có thể với một setter tư nhân), tuy nhiên cùng là hầu như không bao giờ cần thiết cho isEmpty.
  • để lộ phương thức là thuộc tính yêu cầu các phương thức bổ sung được tạo trong các lớp dẫn xuất, tốt hơn nên giữ số của chúng càng nhỏ càng tốt.
+0

Cảm ơn câu trả lời. Tôi không hiểu điểm thứ hai của bạn mặc dù. Một phương pháp có thể dễ dàng được overriden cũng có thể không? – Ginandi

+0

@Ginandi một phương thức 'size()' rõ ràng có thể được ghi đè lên, tuy nhiên để triển khai nó, bạn có thể phải giới thiệu thuộc tính sao lưu, '_size'. Bằng cách ghi đè 'val size' với' var size' (với setter riêng), bạn nhận được cả override của getter và một trường sao lưu để lưu trữ giá trị. – Ilya

0

Trong java, bạn có phương thức list.isEmpty()List#isEmpty(). Có tài sản list.isNotEmpty trong kotlin sẽ gây nhầm lẫn cho mọi người.

IMHO lý do tại sao Kotlin-Dev chọn chọn làm cho phương thức isNotEmpty thay vì thuộc tính là nhất quán với java.

Các vấn đề liên quan