Tại sao Java hay bất kỳ ngôn ngữ lập trình Hướng đối tượng nào lại nên tránh sử dụng biến toàn cục?

Như tiêu đề , em chưa hiểu lý do ạ. Mong anh chị giải thích cho em ạ :disappointed:

Biến toàn cục thì scope rộng, scope rộng thì ảnh hưởng cũng rộng.
Hơn nữa, nêu khai bao toàn cục mà chì sử dụng ở đúng ở 1 function nào đó, thì hao tốn tài nguyên(vì lifecycle của biến kết thúc khi close app).

Liên quan vấn đề bảo mật nhiều hơn, code nhiều sẽ gặp và sẽ hiểu tại sao. Giá trị có thể bị thay đổi mà không hay biết, khó kiểm soát Đọc bài này sẽ rõ

P/s: Kiến thức liên quan, hãy thử tưởng tượng:

Class: là nhà chúng ta.
Phương thức: là những người trong nhà (bố mẹ, anh chị em).
Thuộc tính (biến): là tiền bạc, kim cương.

Thế tiền bạc bạn muốn để ở giữa đường hay muốn cất trong nhà? muốn người trong nhà được dùng hay muốn ngta đi ngang ai muốn lấy xài cũng được? (việc đặt biến toàn cục cũng có thể xem là tương tự việc để tiền ngoài đường) :smiling_imp:
Muốn giữ của thì phải khóa nhà, khóa tủ lại. Cái này gọi là tính đóng gói (encapsulation) trong hướng đối tượng.

9 Likes

Lớp học của bạn có 1 cái bảng. Bạn lên bảng viết “Ninh yêu Soái Ca”, sau có bạn trai lên sửa lại thành
“Ninh yêu Tinh”. Đơn giản vậy thôi.

1 Like

bạn đọc bài này sẽ hiểu nè. :wink:

2 Likes

ông anh ơi thế namespace trong c# nó là cái gì hả anh là gì ạ là đất nước chăng

1 Like

cảm ơn anh, e hiểu ạ

1 Like

hình như hơi bị nhầm rồi, property trong class cho dù để public thì cũng không thể gọi là toàn cục :neutral_face:

2 Likes

Việc sử dụng hay không phần lớn phụ thuộc vào việc bạn sẽ cần sử dụng biến đó tạm thời trong một nơi cố định hoặc với mục đích sử dụng chung cho nhiều nơi.

Việc sử dụng một nơi thì nên sử dụng biến cục bộ bên trong một hàm hoặc phương thức nào đó để giải phóng bộ nhớ khi hàm hoặc phương thức đó xử lý xong. Sẽ tránh gây lãng phí tài nguyên làm cho ứng dụng có hiệu suất thấp.

Còn biến toàn cục chỉ sử dụng khi thực sự cần thiết, cần thiết ở đây là cần thao tác ở nhiều nơi, giữa các hàm đều cần, hoặc cho một hoặc nhiều classes, modules, …thì mới sử dụng nhé. Bên cạnh đó bạn cũng có thể giải phóng bộ nhớ khi sử dụng xong hoặc không cần đến biến toàn cục đó nữa bằng các cơ chế GC (Garbage Collection) hoặc unset biến đó đi. Tất cả phụ thuộc vào ngôn ngữ và công nghệ bạn đang sử dụng nhé.

P/s: Phải dùng thì vẫn dùng, ở mức học cơ bản thì chưa cần quan tâm lắm vì chỉ cần chạy đúng là được, cao hơn nữa thì mới cần quan tâm tới cách sử dụng đúng lúc, đúng chỗ.

3 Likes

Cảm ơn mọi người ạ. e đã hiểu rồi ạ :grinning:

Ù uôi, con gái! Con gái!

Biến toàn cục có phạm vi rộng nên thường dẫn đến tình trạng sử dụng nhầm, chưa reset giá trị biến…
Ngoài ra biến toàn cục sẽ lấy mất một phần bộ nhớ cho nên sẽ làm hao tốn tài nguyên.

Không phải tránh mà là dùng đúng chỗ.

khái niệm về biến toàn cục thì chỉ áp dụng cho lập trình hướng cấu trúc , chứ về lập trình hướng đối tượng thì 1 đối tượng là sự đóng gói của thuộc tính và phương thức , và thuộc tính thể hiện trạng thái của đối tượng , và 1 trong những đặc tính của lập trình hướng đối tượng chính là khả năng đóng gói và che dấu dữ liệu , tránh tình trạng dữ liệu bị thay đổi dẫn đến lỗi chương trình …

1 Like

a ơi, “sử dụng nhầm” là sao ạ? a nói rõ hơn hay cho ví dụ cụ thể được không ạ? :sweat_smile:

Mình có thói quen sử dụng biến toàn cục để giảm số lượng đối số truyền vào hàm. Kết quả là cái biến toàn cục nó bị thay đổi khi sử dụng cho hàm khác. Nên khó quản lý, dẫn đến việc sử dụng nhầm cái giá trị của biến toàn cục đó.

(Đó là hồi mới học nhập môn)

Ý kiến cá nhân :

Việc hạn chế sử dụng biến toàn cục (đó là theo chủ top nói) thì để cho tính bao đóng của OOP thể hiện rõ hơn.

Còn việc dùng chung hay giá trị không kiểm soát được do nhiều đối tượng cùng sử dụng thì không hẳn đúng. Bởi vì ngay như biến private nội tại trong đối tượng cũng có thể được dùng ở nhiều chỗ cùng lúc và không kiểm soát được.

Vớ vẩn code của mình viết ai chọc vào làm gì?

Bạn nói đúng theo sách đấy mà không hiểu gì cả.

Thế tôi hỏi bạn nhé bạn code nhóm để làm nên sản phẩm. Vậy thằng code rồ nào trong nhóm bạn lại thần kinh đến nỗi đi phá code của bạn. Các bạn nên biết rằng code free trên git đầy ra có ai thèm chọc đâu. Đôi khi chúng ta cứ cao thượng hoá lập trình lên. Vậy thôi

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?