I, DSL là gì
- Wikipedia định nghĩa DSL như sau:
A domain-specific language (DSL) is a computer language specialized to a particular application domain. This is in contrast to a general-purpose language (GPL), which is broadly applicable across domains
- Đói với các developer, DSL cung cấp các tool để đơn giản hoá việc thực hiện các cấu trúc phức tạp bằng cách tận dụng các tool sẵn có của ngôn ngữ lập trình.
- Trong Kotlin, chúng ta cũng đã sử dụng rất nhiều kotlin DSL. Hàm
forEach()
cũng là 1 Kotlin DSL:
1 | listOf(1, 2, 3).forEach { |
II, Kotlin DSL
- Trước khi tìm hiểu về Kotlin DSL, bạn nên biết trước về
high-order function
vàfunction literal với receiver
. Nếu bạn đã sẵn sàng thì chúng ta bắt đầu tìm hiểu vềkotlin DSL
1, Tạo Kotlin DSL
- Để hiểu rõ hơn, chúng ta sẽ đi xem xét ví dụ sau:
1 | fun getResult(a: Int, b: Int, action: Int.(Int) -> Int): Int { |
- Function
getResult()
có 3 parameter, trong đóaction
có kiểu là function type với receiver. Do đóaction
cần được khởi tạo bởifunction literal với receiver
như ởmain()
. - Trên đây là ví dụ để xây dựng nên Kotlin DSL.
- Kotlin xây dựng sẵn cho chúng ta một số library sử dụng Kotlin DSL:
2, Sử dụng infix keyword
Chúng ta có thể thêm
infix
keyword cho function.Khi đó tên của function được gọi là
infix notation
, chúng ta có thể gọi function sử dụng infix notion (bỏ qua.
và()
).Các infix function cần tuân thủ:
- Chúng phải là member function hoặc extension function.
- Chúng chỉ có 1 paramter không có default value (
vararg
không được chấp nhận ).
Ví dụ 1: sử dụng
infix
với extension function
1 | infix fun Int.plus(other: Int): Int = this + other |
- Ví dụ 2: sử dụng
infix
với member function, khi sử dụng infix notation bắt buộc phải cóthis
keyword.
1 | class MyStringCollection { |