04/11/2018, 17:14

KOTLIN – Top 10 tính năng bạn sẽ yêu

Chúng ta rất dễ rơi vào tình yêu với Kotlin khi chúng ta muốn thử học nó. Tôi sẽ chia sẻ về 10 tính năng tôi cho là tốt nhất của Kotlin. Null safety Kotlin là ngôn ngữ null safety. class Owner { var adress: String = "" var telephone: String = "" ...

Chúng ta rất dễ rơi vào tình yêu với Kotlin khi chúng ta muốn thử học nó. Tôi sẽ chia sẻ về 10 tính năng tôi cho là tốt nhất của Kotlin.

Null safety

Kotlin là ngôn ngữ null safety.

Adress và telephone không phải là null – một lỗi xảy ra lúc biên dịch nếu bạn muốn đặt giá trị của chúng là null

Bạn cần explicity rằng một biến là nulable để có thể gán null cho nó. Điều này được thể hiện thông qua ? được chèn ngay sau kiểu (xem ví dụ về biến email ở trên).

Code của bạn có thể fail tại complie-time bất cứ khi nào một NPE – 1 trong những Exception phổ biến nhất trong Java, được ném vào run-time.

Để giả quyết lỗi biên dịch của x.length bạn có thể sử dụng if-statement:

Một cách tốt hơn là thông qua “safe calls in Kotlin” trả về giá trị của biến x nếu x không phải là null, nếu không sẽ trả về null.

Data Class

Khi bạn tạo ra những class không làm gì ngoài việc chứa data. Những class này được Kotlin thể hiện bằng data class. Ví dụ bạn tạo lớp khách hàng chứa dữ liệu về id, name, email của khách hàng Trong Java:

Trong Kotlin:

Trình biên dịch của Kotlin sẽ làm tất cả những điều trên cho bạn:

  • generate functions: hasCode(), equals(), toString()
  • Thêm copy() function: Đôi khi bạn cần phải sao chép một đối tượng sang một đối tượng mới với các giá trị khác nhau của biến
  • ComponentN() functions

Extension Functions

Kotlin cho phép chúng ta mở rộng chức năng của các lớp hiện có mà không cần thừa kế từ chúng.

Hàm capitalize() là một hàm mở rộng của class String. Bêm trong hàm này, bạn truy cập đối tượng mà nó được gọi bằng cách sử dụng từ khóa this.

Extensions không sửa đổi các lớp mà nó mở rộng và được giải quyết tĩnh.

Nhờ extensions mà các function clean hơn nhiều. Chúng ra ko cần các lớp xxUtils.(.java) nữa. Chuyển đổi sang JSON có thể là một ví dụ cho việc sử dụng các hàm mở rộng. Hãy minh họa nó trên một ví dụ rất đơn giản để bổ sung chức năng mở rộng cho tất cả “đối tượng” trong Kotlin. (kotlin.Any và java.lang.Object là các kiểu khác nhau, nhưng trong run-time, chúng được biểu diễn với cùng lớp java.lang.Object).

Smart Cast

Đây là một trong những tính năng yêu thích của mình. Bao lâu tthì bạn catsted các đối tượng một lần? Bạn thường phát hiện ra sau bao lâu thì nó thực sự bị dư thừa? Ví dụ nếu bạn muốn kiểm tra Object là một thể hiện của java.lang.String, để in ra length của chuỗi text bạn cần phải kiểm tra kiểu đầu tiên và sau đó đưa đối tượng vào String trước khi truy cập vào phương thức cụ thể từ đối tượng String.

Trình biên dịch của Kotlin thật sự thông minh khi nói đến việc truyền. Nó sẽ xử lý tất cả các redundant casts cho bạn. Toán tử instanceof của Java trong Kotlin được gọi là is. Bạn có thể thấy trong ví dụ mà trong Kotlin bạn không cần phải cast đối tượng bên trong câu lệnh nếu bạn kiểm tra nó với toán tử is. Biểu thức đại diện cho một ví dụ khác của smart casts:

Tập hợp smart cast cùng với biểu thức làm cho code có thể readble:

Trong ví dụ trên bạn có thể xem cách thể hiện trong Java nhưng trong Kotlin bạn có thể tóm tắt nó trong mã này

Singleton(Object)

Một tính năng khác đó là sự đơn giản của việc xác định singleton. Xem xét ví dụ sau về cách singleton có thể được tạo ra trong Java.

Kotlin có một cách để xác định singleton một cách rất thông minh. Bạn có thể sử dụng từ khóa có phép bạn xác định một đối tượng chỉ tồn tại dưới dạng một single instance.

Functional Programming

Sự kết hợp giữa biểu thức lambda và thư viện Kotlin giúp chúng ta dễ dàng hơn khi làm việc với các collections

hoặc

Type Inference

Trong Kotlin, bạn không cần phải chỉ định kiểu của từng biến một cách rõ ràng:

DEFAULT ARGUMENTS

Trong Java, bạn thường duplicate code để xác định các biến khác nhau của một phuơng thức hoặc một hàm khởi tạo: