[iOS] Generic type trong Swift

Chào mọi người, hôm nay mình sẽ nói về Generic type trong Swift. Nếu bạn nào đã học các ngôn ngữ khác như Java, C#, .. và đã biết về Generic type thì Generic type trong Swift cũng tương tự như vậy. Vậy Generic type là gì?
Generic type thực chất là một kiểu dữ liệu bất kỳ mà lập trình viên chưa muốn khai báo. Nó mang tính chất tổng quát, đại diện cho từng kiểu dữ liệu cụ thể trong hoàn cảnh cụ thể.
Nghe có vẻ hơi mơ hồ, mình sẽ lấy 1 ví dụ để mọi người hiểu hơn. Mình sẽ tạo một ngăn xếp(stack). Ngăn xếp là gì chắc các bạn cũng biết. Nó là một cấu trúc dữ liệu căn bản trong lập trình theo nguyên tắc FILO(First In Last Out), tức là vào trước ra sau. Bạn cứ tưởng tưởng bạn có một cái ngăn xếp quần áo, bạn xếp đồ vào trong đó. Mỗi lần chèn thêm 1 vật mới, nó sẽ chèn lên đồ gần nhất được thêm vào. Ngược lại, khi lấy đồ ra khỏi ngăn xếp, bạn phải lấy vật bạn cho vào gần nhất.


Có vẻ không đi đúng chủ đề lắm, nhưng ở đây mình muốn giải thích cho các bạn hiểu về Stack trước khi đi vào ví dụ cụ thể. Bây giờ mình muốn implement 1 stack để lưu trữ quần áo. Mình phải implement tất cả các hàm push, pop của nó. Đến khi mình lại cần một stack để lưu sách vở, mình lại phải implement Stack sách vở, trong khi bản chất của Stack vẫn không đổi, chỉ thay đổi các item. Để giải quyết vấn đề này, ngôn ngữ lập trình đã sinh ra Generic Type đại diện cho các kiểu dữ liệu khác nhau, do đó bạn chỉ cần implement 1 lần mà có thể sử dụng cho nhiều kiểu đối tượng. Các bạn có thể xem ví dụ mình implement 1 Stack để hiểu hơn về Generic type.


Ở đây mình implement 1 Stack có kiểu dữ liệu Generic Type là T, bạn có thể đặt tuỳ ý tuy nhiên nên có 1 quy ước chung để sau này đọc code sẽ rõ nghĩa hơn. Ở đây mình thường sử dụng 'T' để đại diện cho kiểu Generic type. Trong lớp Stack, mình có 1 mảng các item để lưu trữ các item và implement  3 function: push, pop và description. Hàm push để thêm 1 item vào trong stack, pop thì lấy 1 phần tử từ trong Stack ra, còn hàm description đơn giản là in hết các phần tử hiện có trong Stack.
Tiếp theo, mình sẽ khai báo 1 struct Person để lưu trữ trong Stack



Cuối cùng, mình test Stack<Person>, mọi người cùng xem kết quả:


Các bạn cũng có thể tạo các Stack với các kiểu dữ liệu khác nhau như Int, String, ...
Hy vọng với bài viết này có thể giúp các bạn hiểu hơn về cấu trúc dữ liệu Stack cũng như Generic type trong ngôn ngữ Swift.

Nhận xét

Bài đăng phổ biến từ blog này

[Lập trình] Optimistic vs Pessimistic Locking

[Interview] - Tổng hợp các câu hỏi thú vị trong lần nhảy việc đầu tiên