Bạn là một lập trình viên Android hay iOS? Bạn đã từng nghe về Kotlin và Swift chưa? Đây là hai ngôn ngữ lập trình đang rất phổ biến và đã thay thế hầu hết Java và Objective C trong thế giới của các nền tảng di động. Quyết định chọn Kotlin hay Swift có thể là một câu hỏi khó khăn đối với bạn. Đừng lo lắng, bài viết này sẽ giúp bạn hiểu rõ hơn về hai ngôn ngữ này và so sánh cú pháp chính giữa chúng.
Từ khóa
Hầu hết các từ khóa trong Kotlin và Swift có cùng ý nghĩa và có thể sử dụng tương tự như các ngôn ngữ lập trình khác. Tuy nhiên, có một số từ khóa khác nhau do ứng dụng viết bằng hai ngôn ngữ này sử dụng các mô hình bộ nhớ khác nhau. Ví dụ, các từ khóa "weak" và "unowned" trong Swift giúp giải quyết vấn đề vòng lặp giữ chỗ (retain cycles), trong khi Kotlin không có vấn đề này.
Mức độ truy cập (visibility modifiers)
Cả Kotlin và Swift đều hỗ trợ các mức độ truy cập như "public", "internal" và "private". Tuy nhiên, Swift hỗ trợ mức độ truy cập "fileprivate" nhưng không hỗ trợ "protected".
Hàm (Functions)
Trong Kotlin, hàm được khai báo bằng từ khóa "fun", trong khi Swift sử dụng từ khóa "func". Để khai báo kiểu trả về, Kotlin sử dụng dấu hai chấm (:) và Swift sử dụng mũi tên (->). Cả hai ngôn ngữ đều hỗ trợ đối số có tên và giá trị mặc định.
Phương thức tĩnh (Static methods)
Trong Kotlin, phương thức của lớp được tạo bên trong khối 'companion object'. Kotlin không có từ khóa 'static'. Trong khi đó, Swift sử dụng từ khóa 'static' và 'class' để sử dụng chức năng của lớp mà không cần tạo một thể hiện của lớp. Lớp con có thể ghi đè phương thức 'class' nhưng không thể ghi đè phương thức 'static'.
Biến tĩnh (Static variables)
Trong Kotlin, biến của lớp cũng như phương thức của lớp phải được khai báo bên trong khối 'companion object'. Trong Swift, để khai báo biến lớp, bạn chỉ cần khai báo như biến thông thường và đặt từ khóa 'static' phía trước.
Mảng hợp (Parentheses)
Trong Swift, sử dụng ngoặc đơn cho các lệnh điều kiện, vòng lặp, 'guard', 'switch' không bắt buộc. Ngoặc đơn trong Swift được coi là dư thừa và gây ra nhiễu cú pháp không cần thiết.
If nhanh (Inline if)
Trong Kotlin không có toán tử ba ngôi. Tuy nhiên, câu lệnh 'if' trong Kotlin trả về một giá trị nên có thể sử dụng như một biểu thức. Trong khi đó, Swift hỗ trợ toán tử ba ngôi giống như hầu hết các ngôn ngữ khác.
Nội suy chuỗi (String interpolation)
Trong Kotlin, sử dụng dấu đô la ($) trước tên biến để nội suy giá trị của biến vào một chuỗi. Trong Swift, đặt biến trong cặp ngoặc đơn, trước đó là dấu gạch chéo ngược.
Tính khả biến (Mutability)
Trong Kotlin, từ khóa 'var' cho biến có thể thay đổi giá trị. Biến được khai báo với từ khóa 'val' là không thể thay đổi. Tuy nhiên, nếu một biến của lớp được khai báo với từ khóa 'var', ta có thể thay đổi giá trị của biến đó, ngay cả khi thể hiện của lớp được khai báo là không thể thay đổi. Kotlin phân biệt giữa các lớp bộ sưu tập có thể thay đổi và không thể thay đổi.
Trong Swift, biến không thể thay đổi là không thể gán giá trị mới. Biến có thể thay đổi được khai báo bằng từ khóa 'var', còn biến không thay đổi được khai báo bằng từ khóa 'let'.
Vòng lặp (Loops)
Cả Kotlin và Swift đều hỗ trợ các vòng lặp 'for' và 'while'. Tuy nhiên, Swift không hỗ trợ từ khóa 'do' cho vòng lặp, nhưng có thể sử dụng từ khóa 'repeat' thay thế.
Xử lý lỗi (Error handling)
Trong Kotlin, lỗi được biểu diễn bằng các lớp kế thừa từ lớp 'Throwable'. Kotlin không có các ngoại lệ kiểm tra (checked exceptions), các hàm không được đánh dấu với từ khóa 'throws'. Block try/catch/finally là cách để xử lý lỗi.
Trong Swift, lỗi được biểu diễn bằng giá trị của các kiểu tuân thủ giao thức Error. Nếu một hàm gọi một hàm ném lỗi khác, hàm gọi phải bắt lỗi hoặc ném lại lỗi đó. Các hàm ném lỗi được đánh dấu với từ khóa 'throws'. Swift không có khối 'finally', nhưng bạn có thể sử dụng câu lệnh defer để thực hiện các hành động dọn dẹp.
Điều khiển luồng với câu lệnh 'switch'
Trong Kotlin, không có câu lệnh 'switch-case' truyền thống. Thay vào đó, Kotlin có câu lệnh 'when'. Trong khi đó, câu lệnh switch trong Swift mạnh mẽ hơn so với các ngôn ngữ C-like khác.
An toàn null (Null safety)
Cả Kotlin và Swift đều hỗ trợ kiểu null. Cách khai báo biến null tương đương cho cả hai ngôn ngữ. Tuy nhiên, có một số khác biệt nhỏ về việc sử dụng null. Xem các ví dụ dưới đây để hiểu cách sử dụng null trong hai ngôn ngữ này.
Tổng kết
Trên đây là những điểm khác biệt chính giữa Kotlin và Swift về cú pháp. Trong phần hai của bài viết, chúng ta sẽ tìm hiểu sâu hơn về sự khác biệt giữa các trừu tượng, lớp và kế thừa. Hi vọng bạn có thêm thông tin hữu ích từ bài viết này và sẽ quay lại đọc phần tiếp theo!