Rate this post

Trong lập trình, có những tình huống mà chúng ta cần thay đổi các tham số mà chúng ta đã truyền vào một hàm. Tuy nhiên, Swift không cho phép chúng ta thay đổi các tham số của hàm vì các tham số của hàm là không đổi theo mặc định. Nếu chúng ta cố gắng thay đổi các tham số hàm trong phần thân của hàm, chúng ta sẽ gặp lỗi thời gian biên dịch. Nó là một loại bảo mật được thực hiện để chúng tôi không thể thay đổi các tham số do nhầm lẫn.

Các bài viết khác:

Tuy nhiên, nếu chúng ta muốn một tham số hàm được thay đổi bên trong một thân hàm và chúng ta muốn các thay đổi vẫn tồn tại bên ngoài phạm vi hàm. Chúng ta có thể xác định các tham số là tham số in-out.

Để xác định một tham số là in-out, swift cung cấp một từ khóa inout trước loại tham số. Tham số in-out có giá trị được thay đổi bên trong hàm và được trả về để thay thế giá trị ban đầu.

Các thông số đầu vào được sử dụng như sau.

  1. Khi hàm được gọi, giá trị đối số sẽ được sao chép.
  2. Bản sao được sửa đổi bên trong thân hàm.
  3. Khi hàm trả về, giá trị của bản sao được gán cho đối số ban đầu.

Đây được gọi là lệnh gọi theo giá trị hoặc copy-in-copy-out. Khi thuộc tính tính toán được truyền dưới dạng tham số in-out, phương thức getter của nó được gọi tại thời điểm gọi hàm và phương thức setter của nó được gọi tại thời điểm trả về hàm.

Tuy nhiên, chúng tôi không thể xác định giá trị hằng hoặc giá trị chữ làm tham số đầu vào vì không thể sửa đổi giá trị hằng và giá trị chữ. Khi chúng ta truyền một biến dưới dạng tham số inout, chúng ta sử dụng dấu và (&) trước tên biến để chỉ ra rằng các biến đang được truyền dưới dạng tham số inout trong hàm.

Chúng tôi cũng phải lưu ý rằng các tham số inout không được có giá trị mặc định và không thể xác định các tham số khác nhau là inout.

Hãy xem xét ví dụ sau, định nghĩa một hàm swap () được sử dụng để hoán đổi hai số nguyên bằng cách sử dụng một biến thứ ba.

Nó in đầu ra sau trên bảng điều khiển.

Ví dụ trên cho thấy rằng các giá trị ban đầu của hai biến số nguyên, a và b, được sửa đổi bởi hàm swap (_: _ :), mặc dù ban đầu chúng được định nghĩa bên ngoài hàm.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Contact Me on Zalo
Call now