2016-07-07 20 views
15

Từ khóa 'by' làm gì ở Kotlin? Đôi khi tôi thấy một số thứ trông như thế này khi đang phát triển cho android:Từ khóa 'by' làm gì ở Kotlin?

var someModel: someViewModel by notNullAndObservable { vm -> 
    ... 
} 

Tôi không hiểu ý nghĩa của từ khóa 'theo' là gì.

+5

https://kotlinlang.org/docs/reference/delegated-properties.html –

Trả lời

29

Trong Kotlin reference bạn sẽ tìm thấy hai sử dụng cho by, đầu tiên là Delegated Properties đó là việc sử dụng bạn có trên:

Có một số loại phổ biến của tài sản, rằng, mặc dù chúng ta có thể thực hiện chúng bằng tay mỗi thời gian chúng ta cần chúng, sẽ rất tốt đẹp để thực hiện một lần và cho tất cả, và đưa vào một thư viện. Ví dụ bao gồm các thuộc tính lười biếng: giá trị được tính chỉ khi truy cập lần đầu tiên, các thuộc tính quan sát được: người nghe được thông báo về các thay đổi đối với thuộc tính này, lưu trữ các thuộc tính trong bản đồ chứ không phải trong từng trường riêng biệt.

Tại đây, bạn ủy quyền bộ thu thập/đặt cho lớp khác thực hiện công việc và có thể chứa mã chung. Một ví dụ khác, một số bộ phận phụ thuộc cho Kotlin hỗ trợ mô hình này bằng cách ủy nhiệm getter để nhận một giá trị từ một cơ quan đăng ký các trường hợp được quản lý bởi công cụ tiêm phụ thuộc.

Interface/Class delegation là việc sử dụng khác:

Các mô hình Phái đoàn đã được chứng minh là một lựa chọn tốt để thực hiện quyền thừa kế, và Kotlin hỗ trợ nó natively đòi hỏi zero mã boilerplate. Một lớp Có nguồn gốc có thể kế thừa từ một giao diện Cơ sở và ủy nhiệm tất cả các phương thức công khai của nó cho một đối tượng cụ thể

Ở đây bạn có thể ủy quyền một giao diện khác. phần còn lại của các phương thức ủy nhiệm trở lại thực hiện đầy đủ hơn.

Ví dụ trực tiếp là Klutter Readonly/Immutable collections nơi chúng thực sự chỉ ủy quyền giao diện bộ sưu tập cụ thể cho một lớp khác và sau đó ghi đè mọi thứ cần phải khác trong triển khai chỉ đọc. Tiết kiệm rất nhiều công việc không phải ủy thác tất cả các phương pháp khác theo cách thủ công.

Cả hai loại này đều được bao gồm bởi Kotlin language reference, bắt đầu ở đó cho các chủ đề cơ sở của ngôn ngữ.