Kotlin và Swift, kỷ nguyên mới trong phát triển ứng dụng di động

Cách đây vài tháng, khi Google thông báo rằng họ sẽ sử dụng Kotlin làm ngôn ngữ chính thức trong việc phát triển ứng dụng Android. Mình (và mình đoán là nhiều mobile dev khác) đã cảm thấy rất vui mừng và phấn khích. Mình đã ngay lập tức vào trang chủ của Kotlin để tìm hiểu về những tính năng, cú pháp mới của nó. Rồi sau đó đem Swift ra so sánh với Kotlin. Và mình đã có 1 cảm giác cực kỳ lạ: dường như 1 kỷ nguyên mới trong phát triển ứng dụng di động đã bắt đầu.

Thời kỳ mới bắt đầu

Kotlin cũng như Swift mang đến nhiều sự mới mẻ và thú vị trong cú pháp. Chúng làm cho công việc hằng ngày của chúng ta trở nên nhàn hạ và đơn giản hơn rất nhiều. Không chỉ có thế, chúng mang đến những hỗ trợ đáng kể với những mô hình lập trình mới, và cải tiến những mô hình cũ, đặc biệt là lập trình hàm (functional programming).

Functional programming

Thực tế thì lập trình hàm không phải là khái niệm mới trong phát triển phần mềm. Tuy nhiên với Kotlin và Swift, nó đã được hỗ trợ 1 cách tối đa, từ đó việc phát triển ứng dụng iOS hay Android ngày càng trở nên đơn giản.

Nhớ ngày trước, khi mình mới tập toẹ học lập trình Android, lúc đó, 1 bài toán tính tổng dùng vòng for sẽ được viết kiểu thế này:

String[] mixedArray = new String[] { "4", "5", "a", "-2", "Str" };

int results = 0;

for (String element : mixedArray) {

    results += Integer.parseInt(element);

}

Còn tại thời đim hiện tại? Mọi chuyện đơn gin hơn rt nhiu khi ta có th s dụng 1 câu lệnh duy nht, theo cách tiếp cận ca tư duy lập trình hàm:

Kotlin:

val mixedArray = arrayOf("4", "5", "a", "-2", "Str")

val results = mixedArray

    .filter { obj -> obj.toIntOrNull() != null }

    .map { x -> x.toInt() }

    .reduce { acc, x -> acc + x }

 

Swift:

let mixedArray = ["4", "5", "a", "-2", "Str"]

let results = mixedArray

    .filter({ (obj) -> Bool in return Int(obj) != nil })

    .map { (obj) -> Int in return Int(obj)! }

    .reduce(0, +)

Lambda expression

Năm 2014, biu thức lambda chính thức được đưa vào JDK 8. Nhưng không may, lambda lại không th được s dụng trong lập trình Android, bi Android SDK ch h trợ JDK version 7. Đó cũng chính là lý do th viện kiểu như retrolambda được sinh ra trên đời.

Còn thời đim hiện tại, c 2 ngôn ngữ lập trình Swift và Kotlin đu đã h trợ tính năng này. swift thì là closure còn với Kotlin thì là lambda express.

Swift closure:

{ _ in

    print("Closure is called!")

}

Kotlin lambda express:

{

    println("lambda is called!")

}

Inline initialization

Tiếp tục, với Swift, ta có thể khởi tạo dictionary chỉ với 1 dòng:

let dictionary = ["key1": "value1", "key2": "value2"]

Còn với Java, ta chỉ có thể khởi tạo giá trị của đối tượng Map thông qua 1 static block:

private static final Map<String, String> map;
static
{
    map = new HashMap<String, String>();
    map.put("key1", "value1");
    map.put("key2", "value2");
}

Thực tế, Java cũng đã hỗ trợ hàm MapOf, nhưng phải tới JDK 9 hàm này mới được bổ sung. Còn với Kotlin, mọi chuyện đơn giản hơn rất nhiều:

val map = mapOf<String, String>("key1" to "value1", "key2" to "value2")

Có 1 điều nữa mình muốn đề cập đó là toán tử Range (khoảng). Tính năng thú vị này làm cho công việc code của ta nhàn hạ hơn rất nhiều. Thay vì sử dụng vòng lặp for như thế này:

for (int i = 0; i < N; i++) {
// Do something
}

Thì với Kotlin:

for (i in 0..N-1) {
// Do something
}

hoặc Swift:

for i in 0..<N {
// Do Something
}

Rất ngắn gọn đúng không.

Tuples

Một thành phần nữa của Swift (và Kotlin) cũng rất hay đó là tuples. Nó cho phép ta tạo ra những tập hợp đơn giản, thay vì việc phải định nghĩa thêm class.

Tổng kết

Tổng kết lại, với những tính năng mới mình đã kể trên, và còn rất nhiều tính năng mình chưa nói đến, mình tin là 1 kỷ nguyên mới trong phát triển mobile đã bắt đầu. Developer giờ đây đã có thể dành nhiều thời gian hơn cho việc xử lý logic nghiệp vụ cũng như luồng chạy của ứng dụng. Thay vì tốn thời gian vào việc viết hàng trăm dòng code, chỉ để xử lý những logic đơn giản.

Nếu trước đây bạn phải tốn thời gian cài thêm các thư viện như kiểu PromiseKit, ReactiveCocoa, RXJava để việc code của bạn dễ thở hơn, thì nay, bạn đã được “trang bị” đầy đủ nhất ngay từ khi bắt đầu. Và mình tin điều đó cũng sẽ thúc đẩy những người mới, làm cho họ cảm thấy lập trình ko phải là thứ gì đó khó khăn, vất vả lắm. Mình tin 1 thời kỳ tươi sáng đã thực sự bắt đầu.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *