3.5.1 Side effects

Bất kỳ hàm nào cần có khả năng giao tiếp với môi trường xung quanh. Nó phải có khả năng nhận dữ liệu (số, văn bản, …), xử lý nó và chia sẻ kết quả. Chúng ta đã biết hai loại giao tiếp như sau:

• Truyền dữ liệu tới một hàm bằng các tham số thực tế mà các giá trị được gán cho các tham số hình thức
• Truyền dữ liệu ra từ một hàm bằng cách sử dụng kết quả trả về của hàm; lưu ý rằng chỉ có một giá trị có thể được chuyển bằng cách này bởi vì cú pháp của câu lệnh trả về chỉ cho phép bạn chỉ định một giá trị mà thôi

Chúng tôi đã từng nói ở các bài trước rằng các biến được khai báo bên trong thân hàm thì không thể truy cập được từ bên ngoài hàm. Nhưng ngoài ra, còn có một loại biến đặc biệt được gọi là biến toàn cục. Các biến toàn cục được khai báo bên ngoài bất kỳ hàm nào và do đó có thể truy cập được đối với tất cả các hàm được khai báo trong cùng một tệp nguồn.

Lưu ý rằng khai báo biến phải đặt trước định nghĩa hàm để được nhận dạng bởi hàm.

Các biến toàn cục cho phép các hàm nhận được và cung cấp dữ liệu dưới bất kỳ hình thức nào. Nếu một hàm sửa đổi bất kỳ biến toàn cục nào không sử dụng bất kỳ cơ chế chuyển dữ liệu nào khác, chúng ta nói rằng hàm này có side effect (tiếng Việt chẳng biết dịch thế nào nên từ này xin phép dùng nguyên gốc tiếng Anh).

Side effect, mặc dù đôi khi hữu ích nhưng không được khuyến khích và được xem là dấu hiệu của phong cách lập trình lởm khởm, si đa, lồi lõm bởi vì chúng làm cho mã code khó hiểu vcđ. Hãy thử xem code bên dưới →

globvar là một biến toàn cục. Khai báo của nó không ở bên trong bất kỳ hàm nào. Hàm func gia tăng globvar mỗi lần gọi. Chúng ta có thể nói rằng globvar được sử dụng để tính số lần thực hiện của hàm func.

Lưu ý rằng hàm main cũng sử dụng biến này, mặc dù nó không sửa đổi giá trị của biến. Vì lý do này, hàm main không có side effect.

Chúng ta sẽ tránh sử dụng side effect trong các ví dụ tương lai.