Function references in Kotlin
Hàm tham chiếu Hàm tham chiếu là một trong những cải tiến tuyệt vời mà chúng ta có được với Kotlin. Bạn đã biết rằng Kotlin hỗ trợ các chức năng như là một type, có nghĩa là bạn có thể lưu một hàm trong một biến, sử dụng nó như là một đối số chức năng, hoặc thậm chí làm cho một hàm trả về một hàm ...
Hàm tham chiếu
Hàm tham chiếu là một trong những cải tiến tuyệt vời mà chúng ta có được với Kotlin. Bạn đã biết rằng Kotlin hỗ trợ các chức năng như là một type, có nghĩa là bạn có thể lưu một hàm trong một biến, sử dụng nó như là một đối số chức năng, hoặc thậm chí làm cho một hàm trả về một hàm khác. Bạn có thể khai báo một hàm cho một biến như sau: val sum: (Int, Int) -> Int = { x, y -> x + y } Đây là một hàm có tham số là 2 số nguyên và trả về một số nguyên. Trong ví dụ này, lambda đang áp dụng một hoạt động bổ sung. Sau đó bạn có thể có một chức năng chấp nhận một lambda của loại này như một đối số: fun applyOp(x: Int, y: Int, op: (Int, Int) -> Int): Int = op(x, y)
Đây là lấy hai số nguyên và áp dụng chức năng cho cả hai, vì vậy bạn có thể sử dụng sự kết hợp của cả hai cách này: applyOp(2, 3, sum)
Bất kỳ hàm nào cũng có thể là một lambda
Vì vậy, cùng với cách mà lambda có thể được truyền như là một đối số hoặc được lưu vào một biến, chúng ta có thể làm tương tự với các chức năng thông thường. Trước tiên tôi sẽ giải thích nó với ví dụ trên. Thay vì một lambda, bạn có một chức năng đơn giản: fun sum(x: Int, y: Int) = x + y Hàm này so với hàm trên là như nhau, nhưng thay vì có một biến gán cho một hàm, chúng ta có một hàm. Bây giờ, nếu bạn gọi hàm theo cách gọi ở trên, nó sẽ lỗi applyOp(2, 3, sum) sum ko được xem như 1 lambda, nó chỉ đc định nghĩa để gọi như 1 hàm thông thường và bây giờ nếu ban muốn gọi với cách như trên chỉ việc thêm :: và trước tên hàm applyOp (2, 3, :: sum) bạn có thể gán sự tham chiếu này cho một biến có cùng cấu trúc: val sumLambda: (Int, Int) -> Int = ::sum cũng thú vị phải không