30/09/2018, 21:30

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 ạ

Nguyen Ca viết 23:33 ngày 30/09/2018

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).

X viết 23:36 ngày 30/09/2018

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)
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.

Tom Nguyen viết 23:31 ngày 30/09/2018

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.

Củ Chuối viết 23:40 ngày 30/09/2018

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

Bài viết trước mình đã nói về cách khai báo biến và khởi tạo biến và bài viết này sẽ nói về cách chọn phạm vi biến sao cho code hiệu quả, dễ đọc, dễ hiểu và tất nhiên là dễ debug blush Part2: Phạm vi biến (Scope) [image] Hãy để tham chiếu (reference) đến các biến gần nhau Có một phương pháp để tính toán mức độ gần nhau của các tham chiếu/lời gọi biến đó là ước tính số span của biến . Đây là ví dụ về số span: a=0; <--- Tham chiếu đến a lần 1 b=0; <--- Tham chiếu đến b lần 1 c=0;<-…
Đỗ Nhiên viết 23:36 ngày 30/09/2018

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

Trần Thị Diệu Ninh viết 23:41 ngày 30/09/2018

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

Nguyen Ca viết 23:35 ngày 30/09/2018

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

Đỗ Mạnh Hà viết 23:39 ngày 30/09/2018

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ỗ.

Trần Thị Diệu Ninh viết 23:39 ngày 30/09/2018

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

Trần Ngọc Khoa viết 23:37 ngày 30/09/2018

Ù 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.

Văn Dương viết 23:38 ngày 30/09/2018

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

Reoteu Ray viết 23:32 ngày 30/09/2018

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 …

Trần Thị Diệu Ninh viết 23:34 ngày 30/09/2018

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

Trần Ngọc Khoa viết 23:39 ngày 30/09/2018

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)

Văn Dương viết 23:38 ngày 30/09/2018

Ý 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.

Bài liên quan
0