12/09/2018, 09:51

Những điểm mới trong Swift 3? (phần 1)

Swift 3 xuất hiện đã mang đến cho các dev Swift những thay đổi lớn về code. Nếu bạn vẫn chưa theo dõi dự án Swift Evolution kĩ lưỡng, bạn có thể thắc mắc những thay đổi trong store là gì, nó ảnh hưởng như thế nào đến code và khi nào bạn nên bắt đầu chuyển code sang Swift 3. Bài viết sẽ ...

Swift 3 xuất hiện đã mang đến cho các dev Swift những thay đổi lớn về code. Nếu bạn vẫn chưa theo dõi dự án Swift Evolution kĩ lưỡng, bạn có thể thắc mắc những thay đổi trong store là gì, nó ảnh hưởng như thế nào đến code và khi nào bạn nên bắt đầu chuyển code sang Swift 3. Bài viết sẽ nhấn mạnh những thay đổi quan trọng nhất trong Swift 3 ảnh hưởng đến code của bạn.

Getting Started

Swift 3 preview đã có sẵn trong Xcode 8 beta ra mắt vào ngày 15/06. Trong khi sự nâng cấp của Swift 3 đang giãn bớt, thì vẫn có 1 số thay đổi được chấp nhận trong những tháng sắp tới. Việc kết thúc các tính năng mới sẽ xảy ra khi Xcode đạt được GM vào cuối năm 2016, nên bạn sẽ cần đợi cho đến lúc đó để đưa các app Swift 3 lên App Store. Để tạo điều kiên để các dev gia nhập Swift 3 theo những kì hạn riêng, Apple đã bao gồm Swift 2.3 như cập nhật nhỏ với Xcode 8. Swift 2.3 với sư hỗ trợ dành cho các tính năng của SDKs và Xcode công bố ở WWDC. Khi Xcode 8 ra khỏi phiên bản beta, bạn sẽ có thể đăng apps sử dụng Swift 2.3 nếu bận vẫn chưa chuyển sang Swift 3.

Người viết khuyến khích các dev nên thử nghiệm các tính năng được thảo luận trong playground và thậm chí chạy Migration Assistant với 1 trong các dự án của bạn, để bạn có thể cảm nhận về những thay đổi. Nhưng vì không thể ra mắt app trên App Store cho đến khi Xcode 8 không còn beta nữa và Apple chốt Swift, nên bạn có lẽ cần chờ đợi thêm thời gian để chuyển code sang Swift 3.

Chuyển sang Swift 3

Khi chuyển đổi sang Swift 3, lưu ý rằng tất cả các file cũng cần thay đổi. Ví dụ, tất cả tên của Cocoa API đã thay đổi hoặc API vẫn tương tự nhưng có 1 tên phù hợp cho Objective-C và 1 tên phù hợp cho Swift. Swift 3 đang dự định sẽ biến việc viết ngôn ngữ Swift trở nên tự nhiên hơn trong những năm tới.

Apple đã tích hợp Migration Assistant với Xcode 8 để tận dụng hầu hết các thay đổi trong cùng 1 lúc. Đừng ngạc nhiên nếu bạn cần tự mình chỉnh sửa vài chỗ nếu migrator không tự động giải quyết được.

Bạn có thể chuyển sang Swift 2.3 hoặc Swift 3 ngay lập tức. Nếu bạn cần sao lưu, thì hãy điều hướng trong Xcode đến Edit > Convert > To Current Swift Syntax…. May mắn là bộ phận compiler khá thông minh, tương tự như Migration Assistant. Nếu bạn vô tình sử dụng API cũ trên 1 method call, bộ phận compiler sẽ đề xuất lựa chọn Fix-It, giúp bạn sử dụng đúng API hiện đại.

Tin tuyệt vời nhất là Swift 3 dự định là phiên bản ra đời cuối cùng với các thay đổi lớn về source. Lúc đó, bạn có thể giữ code Swift của mình ở mọi phiên bản. Trong khi nhóm Swift của Apple không thể dự đoán được tương lai, họ đã hứa rằng nếu cần phá vỡ tính tương thích của source, họ sẽ đề xuất vòng đời suy thoái dài hơn. Điều đó đồng nghĩa rằng ngôn ngữ đã đat được sự ổn định về source, khuyến khích số công ty truyền thống chấp nhận ngôn ngữ tăng nhiều hơn.

Nhìn chung, mục tiêu đạt sự ổn định nhị phân vẫn chưa đạt được và bạn sẽ nhận ra ảnh hưởng của điều này vào cuối bài viết.

Các proposal Phát triển Swift đã được thực hiện

Các thành viên của cộng đồng đã gửi đi hơn 100 proposals cho các thay đổi của Swift kể từ khi Swift là nguồn mở. Khoảng 70 prốpal đã được chấp nhận sau quá trình thảo luận và điều chỉnh. Những proposal bị reject cũng đã dấy lên 1 số cuộc thảo luận căng thẳng, nhưng team Swift vẫn đưa ra quyết định cuối cùng cho các proposal.

Sự hợp tác giữa team và cộng đồng rộng hơn khá ấn tượng. Trên thực tế, Swift đã nhận được 30.000 sao trên Github. Rất nhiều proposal mới đã được tải lên mỗi tuần, tuần này qua tuần khác. Thậm chí các kỹ sư của Apple viết các proposal trên kho lưu trữ Github mở khi họ muốn tạo ra các sự thay đổi. Ở các mục bên dưới, bạn sẽ thấy các tags được liên kết như [SE-0001]. Đây là những con số các proposal Phát triển Swift được chấp nhận và sẽ được thực hiện ngay khi bản Swift 3 cuối cùng ra đời. Các liên kết đến mỗi proposal đã được bao gộp nên bạn có thể tìm hiểu chi tiết về mỗi thay đổi.

Các thay đổi về API

Cập nhật lớn nhất trong Swift 3 liên quan đến thư viện chuẩn chấp nhận các quy ước đặt tên nhất quán xuyên suốt các thư viện. Hướng dẫn API Design Guidleines gồm các nguyên tắc mà nhóm làm Swift của Apple phải giải quyết khi nhóm đang xây dựng Swift 3, đảm bảo giá trị cao hơn vè khả năng đọc và tiếp cận đối với các lập trình viên mới. Nhóm đã vận hành dựa trên nguyên tắc rằng “Thiết kế API tốt luôn xem xét call site”. Họ đã cố gắng để mang đến sự rõ ràng cho điểm sử dụng.

Cụ thể, đây là những thay đổi nhiều khả năng ảnh hưởng đến bạn, các dev iOS.

Parameter Label đầu tiên

Hãy bắt đầu với sự đảo chiều trực tiếp của 1 practice mà bạn sử dụng mỗi ngày trong Swift.

Nếu bạn không yêu cầu khác thì parameter đầu tiên trong các function và các methods hiện tại đều có 1 label. Trước đây, khi bạn call 1 function hoặc method, bạn đã bỏ qua parameter label đầu tiên [SE-0046]:

Ghi chú lại cách các định nghĩa method sử dụng các giới từ như “of”, “to”, “with” và ” in” cho các tên ngoài. Đây là 1 phần của nỗ lực để tối ưu hóa khả năng đọc. Nếu method call các reads tốt mà không cần 1 giới từ và không cần 1 label, bạn nên loại trừ 1 cách rõ ràng tên parameter đầu tiên với 1 dấu gạch dưới:

Trong nhiều ngôn ngữ lập trình, methods có thể chia sẻ 1 tên base và đề xuất nhiều tên parameter khác nhau. Swift cũng không ngoại lệ, hiện nay bạn sẽ bắt gặp các tên method quá tải nhiều hơn vì các API được dịch trực tiếp hơn. Đây là ví dụ về 2 hình thức của index()

Thêm nữa, những thay đổi của tên parameter cũng khiến method thống nhất và dễ học hơn.

Loại bỏ những từ không cần thiết

Trong các vòng lặp đi lặp của thư viện Apple trước đây, methods gồm 1 tên ám chỉ giá trị return của chúng. Bởi vì khả năng kiểm tra type của Swift compiler, điều này trở nên kém cần thiết hơn. Nhóm Swift đã cố gắng để tìm ra cách làm thế nào lọc tất cả các tiếng ồn để chỉ còn những tín hiệu và nhờ đó, rất nhiều từ lặp đi lặp lại đã được gỡ bỏ.

API thông minh hơn khi các thư viện được chuyển đổi sang Swift gốc [SE-0005]:

Techtalk via IDE Academy

0