- vừa được xem lúc

Kotlin Extension Function ! Điểm chấm phá của Kotlin so với Java

0 0 20

Người đăng: ChungHA

Theo Viblo Asia

Xin chào các bạn , mình là 1 moblie developer , lần đầu viết bài có gì sai sót mong các bạn thông cảm nhé !!!

Trong quá trình code moblie, mình thấy các bạn mới phải viết đi viết lại 1 function dùng nhiều lần ví dụ đơn giản như ẩn hiện view bên Android, hay 1 cái Alert bên iOS

Khi các bạn cần các bạn phải viết đi viết lại nhiều lần rất tốn time, nhìn code thì rối.

Nhưng với Extension các bạn chỉ cần viết 1 lần rồi gọi đi gọi lại ở class nào cũng được.

Ví dụ Extension Kotlin Function về ẩn hiện 1 view.

fun View.gone() { visibility = View.GONE
} fun View.visible() { visibility = View.VISIBLE
} fun View.invisible() { visibility = View.INVISIBLE
}

Ví dụ Extension Swift về Alert ở iOS

extension UIAlertController { static func showAlert( title: String? = nil, message: String? = nil, cancelTitle: String? = nil, actionTitle: String? = nil, action: HandlerActionAlert? = nil, vc: UIViewController? = nil ) { let alert = UIAlertController(title: title, message: message, preferredStyle: .alert) let actionOk = UIAlertAction(title: actionTitle, style: .default, handler: action) alert.addAction(actionOk) if cancelTitle != nil { let cancel = UIAlertAction(title: cancelTitle, style: .default, handler: nil) alert.addAction(cancel) } let _vc = vc != nil ? vc : UIApplication.topViewController() _vc?.present(alert, animated: true, completion: nil) }
}

Quay lại chủ đề chính nhé. Tại sao nói là điểm chấm phá của Kotlin so với Java ????? .

Khả năng mở rộng

Tại sao lại là khả năng mở rộng .

Chúng ta đều biết rằng một lớp được khai báo là final thì không thể nào extends được đúng không? Ví dụ chúng ta muốn thừa kế lớp Integer để có thêm hàm toBigInteger() chúng ta sẽ làm thế này:

class IntegerExension extends Integer { public BigInteger toBigInteger() { return BigInteger.valueOf(this); }
}

Rất tiếc : Là không thể, vì lớp Integer là một lớp final, với Java thì hiện tại là bó tay, nhưng với Kotlin, mọi việc dễ dàng hơn rất nhiều:

Tada Nào vào việc luông thoaii:

Cú pháp nhé :

Để tạo được các hàm mở rộng chúng ta cần tạo ra một file .kt và viết hàm mở rộng vào file đó với cú pháp như sau:

Còn bên iOS thì extension rồi tên lớp extends là xong, cái này nếu được mình nói sau nhé.

fun <tên class cần mở rộng>.<hàm cần mở rộng>( [các tham số]
): [kiểu dữ liệu trả về] = <Nội dung hàm>

Với cú pháp khó hơn chút sẽ như này:

fun <tên class cần mở rộng>.<hàm cần mở rộng>( [các tham số]
): [kiểu dữ liệu trả về] { <Nội dung hàm>
}

Cách sử dụng :

<đối tượng>.<tên hàm>([các tham số])

Áp dụng:

Nào bây giờ chúng ta hãy quay trở lại với ví dụ thêm hàm toBigInteger trên nhé :

fun Integer.toBigInteger(): BigInteger = BigInteger.valueOf(this.toLong())

Sử dụng :

val intValue = Integer.valueOf(1000)
val bigIntegerValue = value.toBigInteger()

Kết luận :

Bạn còn nhớ nguyên tắc Open/Close (đóng với việc thay đổi, mở với việc mở rộng) chứ? Với sự xuất hiện của Kotlin đã giúp chúng ta giải được một bài toán vô cùng nan giải, đây là một điểm rất mạnh của Kotlin với các hàm extenstion. Nếu bạn đang dùng kotlin hãy tận dụng triệt để sức mạnh này nhé.

Link tham khảo : https://kotlinlang.org/docs/extensions.html Mình sẽ làm thêm 1 series Rx và Coroutines mức độ đủ dùng nếu được 10 star bài này ?. Cảm ơn các bạn đã đọc ❤️. Mình viết bài này nhờ động lực của ông anh cùng công ty. Thanks Bro !!!

Bình luận

Bài viết tương tự

- vừa được xem lúc

Kotlin Colletion và Sequences sự khác biệt là gì ? (Phần 1)

**Xin chào các bạn, hôm nay mình xin chia sẻ các bạn về collections và sequences trong kotlin . **.

0 0 30

- vừa được xem lúc

SOLID Principles

What is SOLID principles. Let's have a look at each principle one by one. SOLID is the acronym of:. .

0 0 30

- vừa được xem lúc

Làm lập trình viên tại các công ty nước ngoài có gì giống và khác các công ty tại Việt Nam?

Sau 1-2 năm làm việc tại Việt Nam, các lập trình viên thường có xu hướng ứng tuyển làm onsite/remote cho các công ty công nghệ nước ngoài. Một số quốc gia mà người Việt thường hay hướng tới như Úc, Si

0 0 18

- vừa được xem lúc

Hỗ trợ xây dựng web bằng Wordpress

WordPress là một hệ thống quản lý nội dung (CMS) miễn phí và mã nguồn mở được phát triển bằng ngôn ngữ lập trình PHP và sử dụng cơ sở dữ liệu MySQL. Nó được sử dụng rộng rãi như một nền tảng để xây dự

0 0 74

- vừa được xem lúc

HTML là gì? Kiến thức Tổng quan Về HTML

Tổng quam về HTML Tmarketing. .

0 0 14

- vừa được xem lúc

[Android] Setup CI-CD for Android app using Fastlane and GitHub Actions

GitHub Actions là 1 nền tảng miễn phí do GitHub cung cấp để giúp chúng ta tự động hoá quá trình CI/CD, cho phép người dùng định nghĩa các workflow tự động hoá các hoạt động trong phát triển phần mềm.

0 0 13