Kiến thức cơ bản về Swift (Phần 5) - Struct vs Class


Hiện tại chúng ta đã học được nhiều kiến thức cơ bản về ngôn ngữ Swift. Nếu bạn theo dõi Blog, bạn sẽ biết và hiểu được thế nào là Biến(Variables), Hằng số(constants), hàm(functions)Closures. Bây giờ, đã đến lúc sử dụng những kiến thức đã học để áp dụng vào cấu trúc hướng đối tượng(object-oriented structures) của Swift và Struct.
Để hiểu được nội dung của bài hướng dẫn này, tôi khuyên bạn nên tìm hiểu trước về những kiến thức cơ bản của hướng đối tượng(Object-oriented programming - OOP), classes, objects, methods.


  1. Giới thiệu
Trong phần này, chúng ta sẽ tìm hiểu về cách xây dựng các khối block {}, classes và structures trong Swift.  Trong Swift, Classes và Structures có cấu trúc và xử lý tương đối giống nhau, nhưng cũng có một số điểm khác nhau và chúng ta cần phải biết điều đó để tránh tạo ra những lỗi không đáng có trong Code cũng như code một cách hiểu quả nhất.
Trong Objective-C, Classes và structures rất khác nhau, Tuy nhiên nó lại không đúng trong Swift, Trong Swift, cả hai classes và structures điều có properties và methods. Và nó lại khác với structure trong C, trong Swift có thể mở rộng(Extension) và kế thừa các Protocol.
Vậy thì Classes và Structures trong Swift có những điểm khác nhau?. Chúng ta sẽ biết được câu trả lời ngay trong bài viết này.

  1. Thuật ngữ cần hiểu
    Trước khi bắt đầu tìm hiểu về Classes và Structures, Tôi muốn bạn hiểu một số thuật ngữ trong OPP, Thuật ngữ Classes, Objects và instances, nhiều người mới học thường nhầm lẫn các thuật ngữ này trong OPP. Vì thế, Nó cũng quan trọng bởi vì Swift cũng sử dụng các thuật ngữ này.
Objects and Instances.
Class là cách để khái báo và tạo ra một instances nào đó. Ví dụ:
Ta có Class Person
var xuanVinh = Person()

Ở đây ta sẽ gọi xuanvinh là một instances của class Persion và gọi Person là một object,
Instance là một thể hiện của một class còn Object thường dùng để nói về tên của class nào đó, ví dụ như, Class A thì người ta thường nói là Object A.
Tuy nhiên, trong Swift, Classes và Structures tương đối giống nhau nên thường dùng chung thuật ngữ instance.
Methods và Functions.
Hiểu đơn giản thì Function là một hàm chứa các xử lý nào đó. Còn Methods là một Functions nhưng nó được viết trong một class hay structures nào đó.

  1. Cách định nghĩa một Class
Chúng ta bắt đầu mở Xcode và tạo một playground và thêm code bên dưới:
class Person {
}
Từ khoá class dùng để định nghĩa một class với tên là Person
Properties
Thường thì một class sẽ có các properties và methods như code bên dưới:

Lưu ý:
var là cú pháp để khai báo một biến giá trị(trị của biến đó có thể thay đổi),
let là cú pháp để khai báo một biến hằng(giá trị của biến đó sẽ không được thay đổi trong quá trình sử dụng) .
Methods
Chúng ta sẽ thêm các xử lý cho class Person bằng cách thêm các methods vào class như sau:



Khởi tạo một Instantiation
Sau khi định nghĩa một class với một vài properties và methods. Sau đó chúng ta sẽ tạo một instance và sử dụng nó như sau:




Hàm khởi tạo(Initialization) và Prameters
Chúng ta bắt đầu định nghĩa thêm các method khởi tạo mặc định hoặc method nhiều parameter như sau:


  1. Định nghĩa Structures
Cách đinh nghĩa struct cũng tương tự như class, dưới đây là ví dụ cơ bản về định nghĩa một Struct:

Chỉ cần thay đổi từ khoá class thành struct là chúng ta có thể tạo mới một Struct.
  1. Classes và Structures
Điểm giống:
  • Có chứa các properties, methods
  • Định nghĩa được Subscripts dùng để truy cập dữ liệu của đối tượng nhanh hơn.
  • Cho phép tạo và chỉnh sửa lại hàm khởi tạo
  • Cho phép kế thừa Protocol
  • Cho phép sử dụng Extension để mở rộng tính năng
Điểm khác nhau:
Class có những tính năng mà struct không có như:
  • Cho phép kế thừa từ class khác.
  • Các instance cho phép so sách được với nhau.
  • Cho phép huỷ một instance nào đó để giải phóng bộ nhớ.
  • Tăng reference counting khi có thêm một tham chiếu tới class.
Reference counting là cơ chế quản lý bộ nhớ trong Swift.
Lưu ý:
Khi gán giá trị thì Struct luôn luôn copy ra một giá trị khác để gán và nó không có cơ chế reference couting.

  1. Khi nào nên chọn dùng class hay struct.
Dùng struct khi thoãi mản một trong các điều kiện sau:
  • Tạo một dữ liệu đơn giản chứa trị đơn giản(các kiểu dữ liệu cơ sở như Int, String, Double...).
  • Dữ liệu đơn thuần chỉ có chứa các properties giá trị mà không cần phải dùng tham chiếu.
  • Chọn struct nếu không có nhu cầu kế thừa các Struct khác.
Còn các trường hợp còn lại thì nên dùng class.

Các bạn nên cân nhắc nhu cầu sử dụng trước khi chọn Struct hay class để dùng, Từ đó code của bạn mới tối ưu hoá và phát huy hết công dụng mà Struct và class hỗ trợ.
Hy vọng các bạn thích và học được nhiều kiến thức từ bài viết này. Mong các bạn chia sẽ nó để mọi người cùng học và cùng trao đổi. Mọi thắc mắc hay trao đổi về bài viết, các bạn có thể để lại bình luận bên dưới mình sẽ hỗ trợ sớm nhất.
Chân thành cảm ơn các bạn đã theo dõi.
HXV.


Post a Comment

0 Comments