Tim hiểu về closure trong Swift (Phần 2)

5. Suy ra kiểu từ phạm vi hàm:

Bởi vì các hàm closure ngắn gọn nhưng vẫn có thể truyền vào các đối số của phương thức nên Swift có thể suy ra kiểu của tham số và kiểu của giá trị trả về. Phương thức “sorted(by : )” được gọi bởi 1 mảng các chuỗi ký tự nên đối số phải có kiểu (String, String) -> Bool. Điều này có nghĩa là kiểu “(String, String)” và” Bool” không cần phải viết như định nghĩa cho biểu thức closure. Bởi vì tất cả các kiểu có thể được suy luận ra nên ký hiệu trả về (->) và dấu ngoặc đơn bao quanh tên của các tham số có thể bỏ đi.

Luôn luôn có thể suy ra được kiểu tham số và kiểu trả về khi ta truyền 1 closure vào 1 hàm hay 1 phương thức. Kết quả là chúng ta không bao giờ cần viết hàm closure ở dạng đầy đủ nhất khi ta dùng nó như 1 đối số của hàm hoặc phương thức.

Tuy nhiên, bạn vẫn có thể tạo ra những kiểu rõ ràng nếu bạn muốn, điều này sẽ được khuyến khích nếu nó giúp những người đọc code của bạn tránh được sự mơ hồ. Trong trường hợp phương thức “sorted(by : )”, mục đích của closure rõ ràng từ thực tế là việc sắp xếp đang diễn ra và người đọc cho rằng closure có thể làm việc với các giá trị là chuỗi ký tự, vì nó hỗ trợ cho việc sắp xếp mảng ký tự

6. Ẩn kiểu trả về trong biểu thức closure đơn:

Biểu thức closure đơn có thể ẩn đi kết quả trả về của chúng bằng cách bỏ đi từ khóa “return” trong phần định nghĩa, giống như trong ví dụ trước đó

Ở đây, kiểu hàm của đối số của phương thức “sorted(by : )” rất rõ ràng nên giá trị “Bool” phải được trả về. Vì thân hàm closure có chứa biểu thức đơn (s1 > s2) dẫn tới việc trả về giá trị “Bool”. Điều này không có gì khó hiểu nên từ khóa “return” có thể bỏ đi

7. Viết gọn tên của đối số:

Swift tự động cung cấp các cách viết ngắn gon các tên gọi của các đối số trong hàm closure. Có thể dựa vào điều này để dặt tên cho các đối số của closure là $1, $2, …

Nếu bạn sử dụng cách viết tên đối số ngắn gọn trong biểu thức closure, bạn có thể bỏ qua danh sách các đối số của nó trong phần định nghĩa, và số lượng cũng như kiểu của các dối số có tên ngắn gọn sẽ được suy ra từ kiểu hàm. Từ khóa “in” có thể bỏ đi bởi vì biểu thức closure được tạo thành hoàn toàn từ thân hàm của nó.

Ở đây $1 và $2 đại diện cho đối số thứ nhất và thứ hai của hàm closure

8. Phương thức vận hành:

Hiện tại ta có 1 cách ngắn hơn để viết các biểu thức closure ở trên. Kiểu “String’ trong Swift định nghĩa việc triển khai các chuỗi đặc trưng của nó bằng toán tử lớn hơn (>) như 1 phương thức có 2 tham số ở dạng “String” và trả về kiểu “Bool”. Điều này hoàn toàn khớp với kiểu phương thức cần cho phương thức “sorted(by : )”. Do đó, bạn có thể truyền vào toán tử lớn hơn và Swift sẽ tự suy ra rằng bạn muốn sử dụng việc triển khai các chuỗi ký tự đặc trưng

(Còn nữa)

Link phần 1: https://techmaster.vn/posts/35246/tim-hieu-ve-closure-trong-swift-phan-1

Link phần 3: https://techmaster.vn/posts/35248/tim-hieu-ve-closure-trong-swift-phan-3

Link phần cuối: https://techmaster.vn/posts/35249/tim-hieu-ve-closure-trong-swift-phan-cuoi

Phát hiện và phòng ngừa quay trộm màn hình trong iOS 11 Phát hiện và phòng ngừa quay trộm màn hình trong iOS 11 Nguyễn Duy Khánh Blog Home Bước ngoặt tỷ đô của các ứng dụng di động Bước ngoặt tỷ đô của các ứng dụng di động Techmaster team
Cuong Pham