Computer >> Hướng Dẫn Máy Tính >  >> Điện Thoại Thông Minh >> iPhone

Thành Thạo Function Composition Trong Swift: Hướng Dẫn Ngắn Gọn

Lập trình viên gặp hàm mỗi ngày. Hàm biểu diễn loại mối quan hệ đặc biệt: mọi giá trị đầu vào mà hàm nhận được đều liên kết với giá trị đầu ra nào đó. Vậy theo cách tổng quát hơn, hàm là quy tắc ánh xạ một số giá trị đầu vào thành một giá trị đầu ra.

Ý tưởng cơ bản وراء function composition là áp dụng một hàm vào kết quả của hàm khác. Vậy đó là khái niệm toán học kết hợp các hàm thành một hàm.

Thành Thạo Function Composition Trong Swift: Hướng Dẫn Ngắn Gọn
Function Composition

Bắt Đầu

Thảo luận cùng khái niệm toán học. Trong sơ đồ trên, "f" và "g" là hai hàm. Có thể biểu diễn hàm như sau:

f: A → B
g: B → C

Nếu composition hai hàm này, biểu diễn là "g o f" (đọc là g của f).

(g o f): A → C sao cho (g o f)(a) = g(f(a)) với mọi a trong A

Thử khám phá thêm với ví dụ đơn giản:

Cho f(a) = 2a + 3 & g(a) = 3a + 5, thì function composition
(g o f)(a) = g(f(a)) = 3(f(a)) + 5 = 3(2a + 3) + 5 = 6a + 14

Khái niệm này không chỉ áp dụng trong toán học — cũng áp dụng được trong ngôn ngữ lập trình. Những ngôn ngữ này gọi là ngôn ngữ lập trình hàm. Hiểu khái niệm này cải thiện readability code và dễ hiểu cho lập trình viên khác.

Giới Thiệu Swift Như Ngôn Ngữ Lập Trình Hàm

Tin tốt là Swift cũng là ngôn ngữ lập trình hàm. Trong lập trình Swift, hàm đóng vai trò quan trọng nhất, nên bạn tương tác với chúng hàng ngày. Hàm Swift có thể trả về giá trị, sau đó dùng giá trị trả về làm đầu vào cho hàm khác. Đây là thực hành lập trình phổ biến.

Triển Khai Function Composition Trong Swift

Giả sử có mảng integer, muốn output là mảng bình phương các số chẵn duy nhất. Thông thường triển khai hàm như sau:

Code cho đúng output, nhưng readability không tốt. Thứ tự gọi hàm ngược với suy nghĩ, gây nhầm lẫn cho người mới. Khối code khó phân tích.

Function composition đến để giải cứu. Đạt được function composition bằng cách tận dụng generics, closure, và infix operator.

Xem what xảy ra trong khối code trên:

  1. Khai báo custom infix operator ">>>". Có left associativity và precedence order như toán tử +.
  2. Khai báo hàm tên trùng với infix operator. Hàm dùng ba generic T, U, V và nhận hai closure làm tham số input.
  3. Tham số left là closure, nhận input kiểu T trả output kiểu U.
  4. Tham số right cũng là closure, nhận input kiểu U trả output kiểu V.
  5. Hàm >>> trả về hàm/closure kiểu (T) → V. Closure output nhận input kiểu T trả output kiểu V. Output của left parameter là input của right parameter.
left : (T) → U
right: (U) → V
Output Type: (T) → V

Nếu hiểu biểu diễn toán học của function composition, thấy nó chính xác như triển khai Swift.

6. Trong thân hàm, trả về kết quả của right parameter áp dụng lên left parameter.

Nếu muốn cùng kết quả (mảng bình phương số chẵn duy nhất), làm với function composition.

Là chuỗi hàm trả về cùng kết quả. Thứ tự hàm trông giống suy nghĩ con người. Readability tốt hơn, dễ hiểu cho mọi người.

Cảm ơn đã đọc!