×

Sử dụng từ khóa Self để tham chiếu kiểu hiện tại trong Swift

Trong ngôn ngữ lập trình Swift, việc tận dụng từ khóa self là một phần quan trọng của việc viết mã sạch và dễ hiểu. Từ khóa này có thể được sử dụng để tham chiếu đến thể hiện hiện tại của một lớp (class), cấu trúc (struct) hoặc liệt kê (enum). Hiểu rõ cách sử dụng self sẽ giúp bạn viết mã dễ bảo trì hơn và hạn chế được các lỗi không mong muốn.

Lợi ích của việc sử dụng từ khóa self

  1. Rõ ràng trong việc chỉ định thuộc tính và phương thức: Trong các lớp, có thể có các thuộc tính và phương thức được khai báo. Khi trong một phương thức bạn cần truy cập đến thuộc tính hoặc phương thức của thể hiện đó, sử dụng self giúp làm rõ đây là thuộc tính/phương thức của thể hiện hiện tại mà không phải là biến cục bộ.

  2. Xử lý xung đột tên: Trong trường hợp có sự xung đột tên giữa tham số đầu vào và thuộc tính của lớp hoặc cấu trúc, self giúp giải quyết vấn đề này một cách rõ ràng. Ví dụ, nếu bạn có thuộc tính name và tham số đầu vào của một phương thức cũng là name, việc sử dụng self.name sẽ giúp bạn phân biệt giữa hai tên gọi này.

Ví dụ về sử dụng self

class Person {
    var name: String

    init(name: String) {
        self.name = name
    }

    func displayDetails() {
        print("Tên của tôi là \(self.name)")
    }
}

let person = Person(name: "John")
person.displayDetails()

Trong ví dụ trên, self.name trong phương thức khởi tạo giúp phân biệt thuộc tính name của lớp Person với tham số đầu vào name.

Sử dụng self trong các biến lười biếng (lazy properties)

Khi sử dụng biến lười biếng, bạn thường cần chỉ định self để ám chỉ rằng biến đó thuộc về thể hiện hiện tại. Điều này là cần thiết khi biến lười biếng được khai báo trong lớp mà cần tham chiếu lại chính thể hiện của lớp đó.

class TestClass {
    lazy var someClosure: (() -> Void) = {
        print("Đây là closure trong \(self)")
    }
    
    func executeClosure() {
        someClosure()
    }
}

let testClass = TestClass()
testClass.executeClosure()

Sử dụng self trong hàm

Khi viết các hàm có cùng tên với tên thuộc tính hoặc biến, self giúp làm rõ việc đang thao tác với thuộc tính của thể hiện hay biến/hàm cục bộ.

struct Circle {
    var radius: Double
    
    func area() -> Double {
        return Double.pi * self.radius * self.radius
    }
}

Ở đây, self.radius đảm bảo rằng chúng ta đang sử dụng thuộc tính radius của thể hiện Circle.

Tóm tắt

Việc hiểu và sử dụng đúng từ khóa self trong Swift giúp lập trình viên phát triển mã nguồn rõ ràng, dễ đọc và hiệu quả. Nó không chỉ giúp giảm thiểu xung đột tên mà còn làm rõ ngữ cảnh mà trong đó thuộc tính hay phương thức đang được sử dụng. Điều này đặc biệt quan trọng trong việc xử lý các trường hợp phức tạp hơn như closure, biến lười biếng và khi các thuộc tính hoặc phương thức có thể bị bóng bởi các biến hay tham số cục bộ.

Comments