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 functionvà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 đóactioncó kiểu là function type với receiver. Do đóactioncần được khởi tạo bởifunction literal với receivernhư ở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
infixkeyword 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 (
varargkhông được chấp nhận ).
Ví dụ 1: sử dụng
infixvới extension function
1 | infix fun Int.plus(other: Int): Int = this + other |
- Ví dụ 2: sử dụng
infixvới member function, khi sử dụng infix notation bắt buộc phải cóthiskeyword.
1 | class MyStringCollection { |