Callback In Kotlin




















1. Khái niệm về callback


  • Trong lập trình máy tính, callback là khi ta truyền một đoạn code (một hàm A) vào hàm B như một tham số đầu vào. Hàm A sẽ được gọi bên trong hàm B.
  •     Có 2 loại callback là:
    • Đồng bộ: được gọi trước khi hàm trả về. Thường không được dùng cho việc đồng bộ dữ liệu giữa các thread.
    • Bất đồng bộ: có thể được gọi sau khi hàm trả về. Thường được sử dụng trong các thao tác vào ra hoặc trong các sự kiện. và được gọi bằng lệnh ngắt hoặc từ các thread.

  • Các ngôn ngữ lập trình khác nhau sẽ hỗ trợ callback theo các cách khác nhau.
  • Trong Kotlin hỗ trợ callback bằng cách sử dụng interface hoặc lambda function. Ở bài viết này mình sẽ dùng lambda function (thường sẽ dùng lambda để tiết kiệm code và dễ hiểu).

2. Callback trong Kotlin

  • Như đã nói trên mình sẽ chủ yếu sử dụng lambda để thực thi callback trong Kotlin vì vậy để thực sự hiểu bài này các bạn cần tìm hiểu về lambda function. 
  • Dưới đây là 1 ví dụ mình dùng callback đơn giản chỉ là print 1 số.

  • Mình khai báo 1 hàm sum nhận 3 tham số đầu vào bao gồm 2 số nguyên a, b và 1 hàm lambda. Hàm myPrint là hàm lambda nhận tham số truyền vào là 1 số Int và đầu ra là Unit.
  • Ở main mình gọi hàm sum truyền vào 2 số nguyên là 10, 20 và 1 hàm lambda mình định nghĩa tại thời điểm gọi hàm. Hàm lambda sẽ thực hiện in 2 dòng. Dòng đầu tiên là in số number (100) và dòng thứ 2 in giá trị biến it.

  •  Sau khi được gọi ở main hàm sum tiến hành thực thi gán res = a *10 +b. Rồi gọi hàm myPrint cái mà được thực thi ở main (callback).
  • Kết quả của trương trình là :
            Number in Main 100
            From sum function 120
  • Vì hàm myPrint được thực thi ở main nên nó có thể truy cập được biến number trong main và in ra.
=> Trên đây là 1 ví dụ đơn giản để thực hiện việc callback. Các bạn có thể nhớ cách thức hoạt động của callback là dạng gọi hàm ở một nơi nhưng thực thi hàm đó ở một nơi khác.

3. Tác dụng của callback

  • Thực hiện các tác vụ bất đồng bộ.

  • Cho những tác vụ event

  • Viết nhiều đoạn code dễ đọc hơn

  • Tăng khả năng bảo trì.


Để các bạn có thể hiểu sâu hơn về callback mình sẽ đưa ra 1 ví dụ nữa như sau: Mình có 2 class, 1 class chịu trách nhiệm nhận input từ người dùng, 1 class có nhiệm vụ ghi các thông tin xuống database. 2 class này sẽ giao tiếp với nhau thông qua callback.

  • data class Person lưu giữ thông tin của 1 Person gồm tên và tuổi.
  • class Database có 1 function update có đầu vào là 1 object Person: Thực hiện thao tác lưu dữ liệu của person vào database.


  • class UI có 1 function getInput tham số đầu vào là 1 hàm lambda updateDatabase. Sau khi nhận input từ người dùng và xử lý các ngoại lệ sẽ thực hiện gọi hàm updateDatabase để ghi dữ liệu vào database (callback).
  • Phần thực thi của trương trình.
Cảm ơn các bạn đã đọc, có ý kiến hay nhận xét gì về bài viết xin hãy để lại phần comment mình sẽ tiếp nhận ý kiến của các bạn để bài viết sau được hoàn thiện hơn.

                                                                                                                                                       DươngLH



Nhận xét

Bài đăng phổ biến từ blog này

Nested and Inner Class in Kotlin

Class and Data Class in Kotlin