I, Scope function
- Recommend: trước khi đọc bài này, mình khuyên các bạn đọc về high-order function trước.
- Kotlin cung cấp
scope function
với mục đích là xử lý code trong context của object. - Scope function có parameter có kiểu dữ liệu là function type. Chúng ta thường khởi tạo nó bằng lambada expression.
- Scope function không phải là kiến thức mới mà nó được tạo ra để code ngắn gọn và đễ đọc hơn.
- Chú ý: Scope function có thể làm cho code khó đọc và dẫn tới error. Do đó chúng ta nên tránh lồng các scope function vâo nhau và cẩn thận khi nối chúng.
II, Phân biệt
- Kotlin cung cấp cho 5 loại scope function là
let
,run
,with
,apply
vàalso
. - Các loại scope function khác nhau ở 2 điểm chính:
- Object reference:
this
(lambada receiver) hoặcit
(lambada argument). - Return type: context object hoặc lambada result.
- Object reference:
- Bảng phân biệt các scope function:
Scope function | Object reference | Return value | is extension function ? |
---|---|---|---|
apply | this | context object | Yes |
also | it | context object | Yes |
let | it | lambada result | Yes |
run | this | lambada result | Yes |
run | No this or it |
lambada result | No: called without the context object. |
with | this | lambada result | No: take context object as an argument |
- Ví dụ 1: sử dụng
apply
,also
vàlet
1 | // `apply` use `this` as object reference |
- Ví dụ 2: sử dụng
run
(run
có 2 version)
1 | // `run` version 1: use `this` as object reference |
- Ví dụ 3: sử dụng
with
1 | val numbers = mutableListOf("one", "two", "three") |