Sự khác biệt giữa biến cục bộ và toàn cầu
Sự khác biệt chính giữa biến cục bộ và biến toàn cục
- Biến cục bộ được khai báo bên trong hàm, trong khi biến Toàn cục được khai báo bên ngoài hàm.
- Biến cục bộ được tạo khi hàm bắt đầu thực thi và bị mất khi hàm kết thúc, mặt khác, biến Toàn cục được tạo khi bắt đầu thực thi và bị mất khi chương trình kết thúc.
- Biến cục bộ không cung cấp tính năng chia sẻ dữ liệu, trong khi biến Toàn cầu cung cấp tính năng chia sẻ dữ liệu.
- Biến cục bộ được lưu trữ trên ngăn xếp, trong khi biến Toàn cục được lưu trữ ở một vị trí cố định do trình biên dịch quyết định.
- Việc truyền tham số là bắt buộc đối với các biến cục bộ, trong khi đó thì không cần thiết đối với biến toàn cục
Biến là gì?
Biến là tên được gán cho vùng lưu trữ mà chương trình có thể thao tác. Loại biến xác định kích thước và cách bố trí bộ nhớ của biến.
Nó cũng xác định phạm vi giá trị cần được lưu trữ bên trong bộ nhớ đó và tính chất của các hoạt động có thể áp dụng cho biến đó.
Phạm vi của các biến
Phạm vi của biến chỉ đơn giản là thời gian tồn tại của một biến. Đó là khối mã trong đó một biến có thể áp dụng được hoặc còn tồn tại. Ví dụ:
function foo(){ var x; }
Bạn khai báo một biến “x” bên trong hàm “foo.” Phạm vi của biến đó vẫn nằm trong hàm đó, nó không thể được sử dụng bên ngoài hàm đó.
Có ba nơi mà các biến bạn có thể khai báo ngôn ngữ lập trình biến:
- Bên trong một hàm hoặc một khối: Biến cục bộ
- Ngoài tất cả các hàm: Biến toàn cục
- Trong định nghĩa tham số hàm: Tham số hình thức
Biến cục bộ
Biến cục bộ được định nghĩa là một loại biến được khai báo trong khối lập trình hoặc chương trình con. Nó chỉ có thể được sử dụng bên trong chương trình con hoặc khối mã mà nó được khai báo. Biến cục bộ tồn tại cho đến khi khối hàm được thực thi. Sau đó nó sẽ tự động bị hủy.
Ví dụ về biến cục bộ
public int add(){ int a =4; int b=5; return a+b; }
Ở đây, 'a' và 'b' là các biến cục bộ
Biến toàn cầu
A Biến toàn cầu trong chương trình là một biến được xác định bên ngoài chương trình con hoặc hàm. Nó có phạm vi toàn cầu nghĩa là nó giữ giá trị trong suốt thời gian tồn tại của chương trình. Do đó, nó có thể được truy cập trong toàn bộ chương trình bởi bất kỳ chức năng nào được xác định trong chương trình, trừ khi nó bị che khuất.
Ví dụ:
int a =4; int b=5; public int add(){ return a+b; }
Ở đây, 'a' và 'b' là các biến toàn cục.
Biến cục bộ và biến toàn cục
Dưới đây là một số khác biệt cơ bản giữa các biến cục bộ và toàn cầu.
Tham số | Địa phương | Toàn cầu |
---|---|---|
Phạm vi | Nó được khai báo bên trong một hàm. | Nó được khai báo bên ngoài hàm. |
Giá trị | Nếu nó không được khởi tạo, giá trị rác sẽ được lưu trữ | Nếu nó không được khởi tạo thì số 0 sẽ được lưu làm mặc định. |
Lifetime | Nó được tạo khi hàm bắt đầu thực thi và bị mất khi hàm kết thúc. | Nó được tạo trước khi quá trình thực thi toàn cục của chương trình bắt đầu và bị mất khi chương trình kết thúc. |
Chia sẻ dữ liệu | Không thể chia sẻ dữ liệu vì dữ liệu của biến cục bộ chỉ có thể được truy cập bởi một chức năng. | Có thể chia sẻ dữ liệu vì nhiều hàm có thể truy cập vào cùng một biến toàn cục. |
Thông số Kỹ thuật | Cần phải truyền tham số để các biến cục bộ truy cập giá trị trong hàm khác | Việc truyền tham số là không cần thiết đối với biến toàn cục vì nó hiển thị trong suốt chương trình |
Sửa đổi giá trị biến | Khi giá trị của biến cục bộ được sửa đổi trong một hàm, những thay đổi đó sẽ không hiển thị trong hàm khác. | Khi giá trị của biến toàn cục được sửa đổi trong một hàm, những thay đổi sẽ hiển thị trong phần còn lại của chương trình. |
Được truy cập bởi | Các biến cục bộ có thể được truy cập với sự trợ giúp của các câu lệnh bên trong hàm mà chúng được khai báo. | Bạn có thể truy cập các biến toàn cục bằng bất kỳ câu lệnh nào trong chương trình. |
Bộ nhớ lưu trữ | Nó được lưu trữ trên ngăn xếp trừ khi được chỉ định. | Nó được lưu trữ ở một vị trí cố định do trình biên dịch quyết định. |
Ưu điểm của việc sử dụng biến toàn cục
- Bạn có thể truy cập biến toàn cục từ tất cả các hàm hoặc mô-đun trong một chương trình
- Bạn chỉ cần khai báo biến toàn cục một lần bên ngoài các mô-đun.
- Nó được sử dụng lý tưởng để lưu trữ “hằng số” vì nó giúp bạn giữ được tính nhất quán.
- Biến toàn cục rất hữu ích khi nhiều hàm truy cập cùng một dữ liệu.
Ưu điểm của việc sử dụng biến cục bộ
- Việc sử dụng các biến cục bộ đảm bảo rằng các giá trị của biến sẽ được giữ nguyên trong khi tác vụ đang chạy
- Nếu nhiều tác vụ thay đổi một biến duy nhất đang chạy đồng thời, thì kết quả có thể không thể đoán trước. Nhưng việc khai báo nó là biến cục bộ sẽ giải quyết được vấn đề này vì mỗi tác vụ sẽ tạo ra phiên bản riêng của biến cục bộ.
- Bạn có thể đặt các biến cục bộ cùng tên trong các hàm khác nhau vì chúng chỉ được nhận dạng bởi hàm mà chúng được khai báo.
- Các biến cục bộ sẽ bị xóa ngay khi bất kỳ chức năng nào kết thúc và giải phóng không gian bộ nhớ mà nó chiếm giữ.
Nhược điểm của việc sử dụng Biến toàn cục
- Quá nhiều biến được khai báo là toàn cục, sau đó chúng vẫn còn trong bộ nhớ cho đến khi quá trình thực thi chương trình hoàn tất. Điều này có thể gây ra vấn đề Hết bộ nhớ.
- Dữ liệu có thể được sửa đổi bởi bất kỳ chức năng nào. Bất kỳ câu lệnh nào được viết trong chương trình đều có thể thay đổi giá trị của biến toàn cục. Điều này có thể mang lại kết quả không thể đoán trước trong môi trường đa tác vụ.
- Nếu các biến toàn cục bị ngừng sử dụng do tái cấu trúc mã, bạn sẽ cần phải thay đổi tất cả các mô-đun nơi chúng được gọi.
Nhược điểm của việc sử dụng biến cục bộ
- Quá trình gỡ lỗi của một biến cục bộ khá phức tạp.
- Dữ liệu chung cần được chuyển đi truyền lại nhiều lần vì không thể chia sẻ dữ liệu giữa các mô-đun.
- Họ có phạm vi rất hạn chế.
Điều gì hữu ích hơn?
Biến cục bộ và toàn cục đều quan trọng như nhau khi viết chương trình bằng bất kỳ ngôn ngữ nào. Tuy nhiên, một số lượng lớn biến toàn cục có thể chiếm một bộ nhớ rất lớn. Một sự thay đổi không mong muốn đối với các biến toàn cục trở nên khó xác định. Vì vậy, nên tránh khai báo các biến toàn cục không mong muốn.