Khi bạn suy nghĩ về phát triển Android, rất có thể là một ngôn ngữ lập trình ngay lập tức ở trong suy nghĩ của bạn: Java.
Mặc dù đúng là đa số các ứng dụng Android được viết bằng Java, nhưng khi nói đến phát triển Android, Java không phải là lựa chọn duy nhất của bạn.
Bạn có thể viết các ứng dụng Android bằng bất cứ ngôn ngữ nào có thể biên dịch và chạy trên máy ảo Java (JVM), và người dùng cuối của bạn sẽ không hề biết. Và một trong những ngôn ngữ lập trình tương thích với JVM đã thực sự gây sự chú ý cho cộng đồng Android đó là Kotlin, một ngôn ngữ lập trình kiểu tĩnh (static type) từ JetBrains.
Nếu bạn đã nghe những điều tốt đẹp về Kotlin và hứng thú muốn tự mình thử nó, thì bạn đang ở đúng nơi rồi đấy. Trong loạt bài gồm ba phần này, tôi sẽ chia sẻ tất cả mọi thứ bạn cần biết để bắt đầu sử dụng Kotlin cho việc phát triển Android.
Trong phần đầu tiên này, tôi sẽ xem xét lý do tại sao bạn, với tư cách là một nhà phát triển Android, có thể muốn xem xét việc chuyển đổi từ Java, và sau đó tôi sẽ đánh giá các ưu điểm và khuyết điểm của việc lựa chọn Kotlin thay cho Java. Vào cuối của bài viết này, bạn sẽ có được một cái nhìn chính xác về những gì Kotlin cung cấp và nó có phù hợp cho bạn hay không.
Trong phần hai, chúng ta sẽ xem xét cách làm thế nào để thiết lập Android Studio của bạn để nó hỗ trợ Kotlin và tạo ra một ứng dụng Android đơn giản được viết hoàn toàn bằng Kotlin. Với những nền móng này, trong phần thứ ba chúng ta sẽ xem xét cách làm thế nào để nâng cao việc phát triển Android của bạn, bằng cách sử dụng một số tính năng nâng cao của ngôn ngữ Kotlin.
Tại sao nên chuyển từ Java?
Cho dù Java là một trong những ngôn ngữ lập trình được sử dụng rộng rãi và là ngôn ngữ chính thức để phát triển Android, nhưng có rất nhiều lý do tại sao Java có thể không phải lúc nào cũng là sự lựa chọn tốt nhất cho dự án Android của bạn.
Vấn đề lớn nhất là Java không phải là một ngôn ngữ hiện đại, và mặc dù Java 8 là một bước tiến lớn cho nền tảng, giới thiệu nhiều tính năng mà các nhà phát triển đã chờ đợi (bao gồm cả tính năng lambda), tại thời điểm của bài viết Android chỉ hỗ trợ một phần của các tính năng mà Java 8 cung cấp. Có vẻ như các nhà phát triển Android không chắc sẽ sớm được hưởng lợi một cách đầy đủ từ những tính năng của Java 8, do đó, trong tương lai nếu bạn muốn sử dụng Java trong dự án Android của bạn, thì bạn sẽ gặp khá nhiều khó khăn với Java 7.
Java nhìn chung cũng có một số vấn đề về tài liệu hướng dẫn sử dụng, bao gồm các khối try
–catch
, thiếu khả năng mở rộng, null-unsafety (vào đó là NullPointerException), chưa kể thiếu sự hỗ trợ cho các tính năng lập trình hàm. Cho dù Java đã bắt đầu thêm một số yếu tố lập trình hàm, chẳng hạn như biểu thức lambda và giao diện hàm, nhưng về cơ bản Java vẫn là một ngôn ngữ thủ tục. Cú pháp của Java cũng là khá dài dòng, đặc biệt là khi so sánh với nhiều ngôn ngữ lập trình hiện đại.
Ưu điểm của Kotlin
Vậy, bạn có thể muốn cân nhắc việc chuyển đổi sang một trong nhiều ngôn ngữ lập trình hiện đại được thiết kế để chạy trên JVM. Dù không thiếu các ngôn ngữ biên dịch sang Java bytecode, nhưng có một vài yếu tố làm cho Kotlin nổi bật hơn cả:
Có thể thay thế cho Java
Một trong những thế mạnh lớn nhất của Kotlin như là một ứng viên để thay thế cho Java là khả năng tương tác rất tốt giữa Java và Kotlin—bạn có thể thậm chí có code Java và Kotlin tồn tại song song trong cùng dự án, và tất cả mọi thứ vẫn sẽ được biên dịch một cách hoàn hảo. Dưới đây, bạn có thể thấy một ví dụ về một dự án bao gồm một Activity
Java và một Actitivy Kotlin.
Trong thực tế, một khi dự án kết hợp Kotlin và Java của bạn được biên dịch, người dùng sẽ không thể biết những phần nào của dự án của bạn được viết bằng Java, và những phần nào được viết bằng Kotlin.
Bởi vì các lớp Kotlin và Java có thể tồn tại song song trong cùng một dự án, bạn có thể bắt đầu sử dụng Kotlin mà không cần phải làm bất cứ điều gì to tát cả giống như chuyển đổi toàn bộ dự án sang Kotlin hoặc bắt đầu một dự án mới để bạn có thể thử Kotlin.
Nhờ có mức độ tương tác cao, nếu bạn đã có một dự án, bạn có thể thử Kotlin ở một phần nhỏ của dự án mà không ảnh hưởng đến phần còn lại của nền tảng code của bạn. Và, nếu bạn quyết định có muốn tiếp tục sử dụng Kotlin hay không, thì bạn có thể hoặc di chuyển mã Java hiện có của dự án sang Kotlin mỗi lần một tập tin, hoặc để nguyên code Java của dự án và chỉ sử dụng Kotlin cho các lớp và các tính năng mới.
Vì Kotlin là hoàn toàn tương thích với Java, bạn cũng có thể sử dụng phần lớn các thư viện Java và các framework trong dự án Kotlin của bạn—thậm chí nâng cao các framework dựa vào chú thích xử lý.
Dễ học
Kotlin nhằm mục đích là một nâng cao đối với Java, chứ không phải hoàn toàn viết lại, rất nhiều các kỹ năng bạn đã có và mài dũa trong suốt sự nghiệp Java của bạn vẫn được áp dụng đối với dự án Kotlin của bạn.
Kotlin cũng được thiết kế để có thể dễ học cho các nhà phát triển Java. Những nhà phát triển Java sẽ cảm thấy rằng hầu hết cú pháp của Kotlin đều quen thuộc; ví dụ, các code được sử dụng để tạo ra một lớp mới trong Kotlin là rất giống với Java:
class MainActivity : AppCompatActivity() {
Kotlin cũng được thiết kế trực quan và dễ đọc, do đó, ngay cả khi bạn gặp một số code khác biệt, thì bạn vẫn có thể để biết được ý nghĩa về những gì code này làm.
Kết hợp những gì tốt nhất của lập trình hàm và thủ tục
Hiện đang có một số lý thuyết lập trình được sử dụng rộng rãi, nhưng khi nói đến các câu hỏi về “phương pháp nào là tốt nhất”, thì không dễ để có câu trả lời. Mỗi kiểu lập trình có tập hợp điểm mạnh và điểm yếu của nó, do đó, mặc dù không thiếu các kịch bản mà lập trình hàm có một lợi thế, thì cũng có rất nhiều vấn đề nơi mà một cách tiếp cận lập trình thủ tục sẽ hiệu quả hơn.
Vậy tại sao bạn cần phải lựa chọn giữa hàm và thủ tục? Giống như nhiều ngôn ngữ lập trình hiện đại khác, Kotlin nhằm mục đích mang lại cho bạn những gì tốt nhất của cả hai bằng cách kết hợp các khái niệm và các yếu tố của lập trình thủ tục và hàm.
Android Studio hỗ trợ
Kotlin được phát triển bởi JetBrains, công ty đứng sau IntelliJ—IDE mà Android Studio dựa trên nó. Không có gì bất ngờ, rằng Android Studio hỗ trợ tốt cho Kotlin. Một khi bạn đã cài đặt plugin Kotlin, Android Studio làm cho việc cấu hình Kotlin trong dự án của bạn trở nên đơn giản giống như mở một vài menu.
Một khi bạn đã thiết lập plugin Kotlin cho Android Studio, IDE của bạn sẽ không gặp vấn đề gì việc hiểu, biên dịch và chạy code Kotlin. Android Studio cũng cung cấp việc gỡ lỗi, tự động hoàn tác, điều hướng code, unit testing, và tái cấu trúc cho Kotlin.
Một khi dự án Android Studio của bạn đã được cấu hình để hỗ trợ cho Kotlin, bạn thậm chí có thể chuyển đổi toàn bộ một tập tin mã nguồn Java thành một tập tin Kotlin, với chỉ một vài cú nhấp chuột.
Code ngắn gọn hơn
Nếu bạn so sánh một lớp Java và một lớp Kotlin cho ra cùng một kết quả, thì cái được viết trong Kotlin thường sẽ gọn gàng hơn nhiều và nhỏ gọn hơn so với những gì được viết bằng Java. Và như mọi nhà phát triển đều biết, code ít hơn có nghĩa là ít lỗi hơn!
Ví dụ, các code Java sau tạo ra một Activity bao gồm một floating action button (FAB), mà khi chạm vào, hiển thị một snackbar có chứa các thông báo hữu ích This is a snackbar.
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); FloatingActionButton myfab = (FloatingActionButton) findViewById(R.id.myfab); myfab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Snackbar.make(view, "This is a snackbar", Snackbar.LENGTH_LONG) .setAction("Action", null).show(); } }); } }
Kotlin đạt được điều tương tự bằng lượng code ít hơn, đặc biệt là khi nói đến việc tạo FAB và thiết lập onClickListener
:
class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val toolbar = findViewById(R.id.toolbar) as Toolbar setSupportActionBar(toolbar) val myfab = findViewById(R.id.myfab) as FloatingActionButton myfab.setOnClickListener { view -> Snackbar.make(view, "This is a snackbar", Snackbar.LENGTH_LONG) .setAction("Action", null).show() } } }
Cả hai đoạn code cho ra kết quả giống nhau:
Kotlin đặc biệt tốt trong việc giảm số lượng code mà bạn cần phải viết, làm cho việc viết code trong Kotlin trở thành một trải nghiệm thú vị hơn nhiều, so với việc viết code trong nhiều ngôn ngữ khác như Java.
Đặc biệt, các extension của Kotlin Android (mà chúng ta sẽ khám phá trong phần hai) cho phép bạn nhập tham chiếu đến một View vào một tập tin Activity, từ đó, bạn có thể làm việc với giao diện như thể nó là một phần của Activity đó. Điều này có nghĩa là bạn không còn phải xác định mỗi View bằng cách sử dụng findViewById
, mà có thể chuyển đổi code chẳng hạn như:
TextView text = (TextView) findViewById(R.id.myTextView); text.setText("Hello World");
Thành gọn gàng hơn nhiều:
myTextView.setText("Hello World")
Nhược điểm là gì?
Không có ngôn ngữ lập trình nào là hoàn hảo cả, do đó, mặc dù Kotlin có rất nhiều thứ để cung cấp cho các nhà phát triển Android, nó vẫn có một số nhược điểm mà bạn cần lưu ý:
Thêm thời gian chạy Runtime
Thư viện tiêu chuẩn của Kotlin và runtime sẽ làm tăng kích thước tập tin .apk của bạn. Mặc dù nó chỉ tương đương với khoảng 800KB, nhưng nếu ứng dụng của bạn đã lớn sẵn rồi thì 800KB phụ có thể làm nó phình to và khiến người dùng nghĩ lại trước khi tải về ứng dụng của bạn.
Tính dễ đọc của code
Mặc dù cú pháp ngắn gọn của Kotlin là một trong những thế mạnh lớn nhất của ngôn ngữ, nhưng bạn có thể thấy một số khó khăn ban đầu, đơn giản bởi vì có rất nhiều thứ đang được thực hiện trong một số lượng nhỏ code đó. Java có thể dài dòng hơn, nhưng ngược lại tất cả mọi thứ đều rõ ràng, có nghĩa là những người không quen code Java có xu hướng dễ dàng hơn để hiểu so Kotlin.
Ngoài ra, nếu sử dụng không hợp lý, quá tải toán tử của Kotlin có thể dẫn đến số code đó có thể khó khăn để đọc.
Thiếu hỗ trợ chính thức
Kotlin có thể được trợ tốt trong Android Studio, nhưng cần ghi nhớ rằng Kotlin không được xác nhận chính thức là của Google.
Ngoài ra, tính năng tự động hoàn tác và biên dịch trong Android Studio có xu hướng chạy hơi chậm khi bạn làm việc với Kotlin so với một dự án thuần Java.
Cộng đồng nhỏ hơn và ít có sẵn trợ giúp
Vì Kotlin là một ngôn ngữ tương đối mới, nên cộng đồng Kotlin vẫn còn khá nhỏ, đặc biệt là so với cộng đồng của ngôn ngữ khác như Java. Nếu bạn chuyển đổi sang Kotlin, thì bạn có thể không có được truy cập vào cùng một số hướng dẫn, bài đăng trên blog, và tài liệu hướng dẫn sử dụng, và có thể gặp ít hỗ trợ từ cộng đồng về những nơi như các diễn đàn và Stack Overflow. Tại thời điểm bài viết, tìm kiếm cho Kotlintrong Stack Overflow trả về các bài viết chỉ hơn 4.600 được dán nhãn Kotlin—so với hơn 1.000.000 bài viết có chứa các từ khóa Java.
Kết luận
Trong bài viết đầu tiên của loạt bài gồm ba phần này, chúng ta xem xét lý do tại sao bạn có thể muốn chuyển đổi từ việc phát triển Android bằng Java sang một trong các ngôn ngữ hiện đại hơn, tương thích với JVM. Chúng ta cũng đã xem xét kỹ hơn về điểm mạnh và yếu của Kotlin như là một ứng viên thay thế cho Java.
Nếu bạn đã cân nhắc kỹ ưu và khuyết điểm và đã quyết định thử Kotlin, thì trong phần hai của loạt bài này, tôi sẽ hướng dẫn cho bạn cách làm thế nào để sử dụng Android Studio để tạo ra một ứng dụng Android đơn giản, viết hoàn toàn bằng Kotlin. Chúng ta cũng sẽ xem xét cách để có thể sử dụng Kotlin để đảm bảo rằng bạn không bao giờ phải viết một findViewById
một lần nữa!
Trong lúc chờ đợi, hãy tham khảo một số hướng dẫn khác về phát triển Android của chúng tôi ở đây trên Envato Tuts+!