12/08/2018, 17:39

So sánh Swift với Kotlin

Tại sự kiện Google I/O năm 2017, Google đã ra thông báo Kotlin là ngôn ngữ lập trình được Android chính thức hỗ trợ. Điều này không có gì đáng ngạc nhiên đối với các developer Android và vấn đề chỉ là khi nào thì Java sẽ bị thay thế. Kotlin là ngôn ngữ đã "học hỏi" rất nhiều từ Swift - một ngôn ...

Tại sự kiện Google I/O năm 2017, Google đã ra thông báo Kotlin là ngôn ngữ lập trình được Android chính thức hỗ trợ. Điều này không có gì đáng ngạc nhiên đối với các developer Android và vấn đề chỉ là khi nào thì Java sẽ bị thay thế.

Kotlin là ngôn ngữ đã "học hỏi" rất nhiều từ Swift - một ngôn ngữ lập trình iOS phổ biến được Apple giới thiệu nhiều năm về trước. Cú pháp và một số khái niệm lập trình của Kotlin rất giống với Swift. Điều này giúp cho các mobile developer có thể dễ dàng tiếp cận, phát triển ứng dụng cho cả 2 nền tảng iOS và Android mà không cần tốn quá nhiều thời gian để làm quen với ngôn ngữ mới.

Bài viết này so sánh cú pháp của Swift với Kotlin và một số khái niệm khác nhau giữa 2 ngôn ngữ lập trình mobile "bậc cao" này.

Basic

Hello World

Swift
print("Hello, world!")
Kotlin
println("Hello, world!")

Variables and constants

Trong Swift, khai báo biến sử dụng keyword var, khai báo hằng số sử dụng let.

Swift
var myVariable = 42
myVariable = 50
let myConstant = 42

Còn với Kotlin, khai báo biến cũng sử dụng var, còn hằng số là val.

Kotlin
var myVariable = 42
myVariable = 50
val myConstant = 42

Explicit Types

Khai báo các kiểu dữ liệu tường minh trong Swift và Kotlin giống hệt nhau.

Swift
let explicitDouble: Double = 70.0
Kotlin
val explicitDouble: Double = 70.0

Type Coercion

Ép kiểu dữ liệu trong Swift vẫn phải tường minh dùng các constructor như String(), Int(), Double()...

Swift
let label = "The awidth is "
let awidth = 94
let awidthLabel = label + String(awidth)

Còn với Kotlin thì khá đơn giản.

Kotlin
val label = "The awidth is "
val awidth = 94
val awidthLabel = label + awidth

String Interpolation

Cú pháp chèn thêm giá trị của các biến, các hằng số, các phép tính vào trong string. Swift dùng ().

Swift
let apples = 3
let oranges = 5
let fruitSummary = "I have (apples + oranges) pieces of fruit."

Kotlin dùng ${}.

Kotlin
val apples = 3
val oranges = 5
val fruitSummary = "I have ${apples + oranges} pieces of fruit."

Range Operator

Với Swift, operator 0...10 nghĩa là khoảng từ 0 đến 10 - [0, 10]. Còn 0..<10 nghĩa là nửa khoảng từ 0 đến 10 - [0, 10).

Swift
let names = ["Anna", "Alex", "Brian", "Jack"]
let count = names.count
for i in 0..<count {
    print("Person (i + 1) is called (names[i])")
}
// Person 1 is called Anna
// Person 2 is called Alex
// Person 3 is called Brian
// Person 4 is called Jack

Trong Kotlin, để biểu diễn khoảng thì dùng 0..10 (2 dấu chấm). Nửa khoảng không gồm phần tử cuối là 0 until 10. Ngoài ra còn có downTo để đếm ngược và step 2 để nhảy cóc.

Kotlin
val names = arrayOf("Anna", "Alex", "Brian", "Jack")
val count = names.count()
for (i in 0 until count) {
    println("Person ${i + 1} is called ${names[i]}")
}
// Person 1 is called Anna
// Person 2 is called Alex
// Person 3 is called Brian
// Person 4 is called Jack

Collection

Array

Cách khai báo một mảng với các phần tử xác định trước trong Swift rất đơn giản.

Swift
var shoppingList = ["catfish", "water", "tulips", "blue paint"]
shoppingList[1] = "bottle of water"

Còn với Kotlin, sử dụng hàm arrayOf(<element...>).

Kotlin
val shoppingList = arrayOf("catfish", "water", "tulips", "blue paint")
shoppingList[1] = "bottle of water"

Dictionary vs Map

Dictionary trong Swift với kiểu [<Kiểu dữ liệu của key>: <Kiểu dữ liệu của value>].

Swift
var occupations = [
    "Malcolm": "Captain",
    "Kaylee": "Mechanic",
]
occupations["Jayne"] = "Public Relations"

Dictionary trong Kotlin được gọi là Map, dùng hàm mutableMapOf(<key> to <value>,...) để khởi tạo với các cặp key/value có sẵn.

Kotlin
val occupations = mutableMapOf(
    "Malcolm" to "Captain",
    "Kaylee" to "Mechanic"
)
occupations["Jayne"] = "Public Relations"

Empty Collection

Cú pháp tạo các array, dictionary/map trong Swift và Kotlin.

Swift
let emptyArray = [String]()
let emptyDictionary = [String: Float]()
Kotlin
val emptyArray = arrayOf<String>()
val emptyMap = mapOf<String, Float>()

Function

Function

Swift dùng keyword func. Kotlin dùng keyword fun

0