Xin chào, chào mừng trở lại.
Trong bài giảng này, tôi muốn nói về các biến cục bộ và toàn cục.
Đây thực sự là khái niệm về chức năng phạm vi hoặc trong phạm vi chương trình chung.
Nó liên quan đến khi bạn có thể sử dụng các biến và khi
bạn không thể sử dụng chúng.
Chúng tôi biết những chức năng là gì.
Vì vậy, bây giờ tôi muốn nói chuyện về các biến cục bộ.
Các biến cục bộ thực sự phải làm với nhiều chức năng hơn.
Các biến cục bộ liên quan đến bất cứ thứ gì có một khối mã.
Vì vậy, các biến được xác định bên trong của một hàm được gọi là
các biến cục bộ tự động.
Vì vậy, trong cơ quan chức năng đó, ở giữa các dấu ngoặc bắt
đầu và kết thúc đó, nếu bạn khai báo một biến, biến là một biến cục bộ.
Nó sẽ tự động được tạo mỗi khi hàm được gọi.
Ngoài ra, bất kỳ giá trị nào trong quyền truy cập vào biến đó chỉ
là cục bộ của hàm.
Bạn không thể truy cập biến đó ngoài chức năng đó.
Vì vậy, không thể truy cập biến trong các chức năng khác nếu nó cục bộ
cho một chức năng cụ thể.
Nó chỉ có thể truy cập được từ nơi nó được xác định.
Nếu một giá trị ban đầu được đưa ra cho
một biến bên trong một hàm, giá trị ban đầu đó là được gán cho biến
mỗi khi hàm được gọi.
Nếu bạn muốn giữ lại một giá trị trong một biến mỗi cuộc gọi tiếp theo, thực sự
có một cách bạn có thể làm điều đó trong c, nó được gọi là
một biến tĩnh bên trong một hàm.
Đó, một lần nữa, nhiều hơn một khái niệm không phải trong một lớp
học dành cho người mới bắt đầu, nhưng nó là một cách mà bạn có thể thực sự
có dữ liệu khác nhau mỗi khi bạn gọi các hàm.
Vì vậy, nếu bạn muốn ví dụ, hãy giữ bộ đếm số lần một hàm được gọi,
bạn sẽ khai báo biến cục bộ bên trong tên hàm đó
là static, với một từ khóa static.
Nhưng không chỉ thường xuyên các biến cục bộ sẽ có
giá trị mới mỗi lần.
Bạn có thể sử dụng từ khóa tự động trước kiểu dữ liệu, nhưng nó không cần thiết.
Nó làm cho nó trở thành một chính xác hơn một chút.
Trình biên dịch sẽ thêm nó bằng cách mặc định nếu bạn không bao gồm nó.
Nhưng nếu bạn bao gồm nó, nó chỉ
sẽ làm cho nó chính xác hơn, nó không cần thiết.
Vì vậy, nó được gọi là biến cục bộ tự động.
Có một từ khóa có tên auto trong c, nhưng bạn không cần cung cấp, nó được cung cấp
theo mặc định và đó là lý do tại sao bạn không thấy nó trong rất nhiều ví dụ
nơi các biến đang được xác định và được khai báo bên trong một hàm.
Các biến cục bộ cũng có thể áp dụng cho bất kỳ mã nào trong đó biến được tạo trong
một khối, các vòng lặp hoặc các câu lệnh if.
Một lần nữa, nếu bạn có câu lệnh if trong khối cho câu lệnh if là gì, nó chỉ
là nơi bắt đầu của dấu ngoặc.
Đó được gọi là một khối.
Các khối có thể nằm trong các chức năng, khối có thể là câu lệnh if,
khối có thể nằm trong vòng lặp.
Các khối có thể ở bất cứ đâu về cơ bản có dấu ngoặc.
Bất cứ nơi nào có dấu ngoặc và bạn tạo biến đó.
Việc tạo biến đang khai báo nó và có thể gán các giá trị cho nó.
Nhưng nếu bạn khai báo biến đó, bạn tạo biến đó bên
trong một khối, bạn chỉ có thể sử dụng biến đó bên trong khối.
Nếu bạn cố gắng truy cập vào đó biến bên ngoài khối, nó sẽ
không được sử dụng.
Vì vậy, nếu bạn có câu lệnh if, bên trong câu lệnh
if, bạn khai báo một biến, bạn có thể truy cập biến đó bên ngoài khối
lệnh if, giống với các vòng lặp.
Nó rất quan trọng để hiểu điều này.
Trình biên dịch sẽ phàn nàn và báo cho bạn một lỗi nếu bạn
cố gắng truy cập nó ở một nơi khác.
Và điều này có nghĩa là các giá trị trong dữ liệu chỉ có
thể áp dụng cho khối đó.
Bạn không chia sẻ bất kỳ dữ liệu nào.
Các biến toàn cục là đối lập với một biến cục bộ.
Các biến toàn cục có thể được truy cập bởi bất kỳ chức năng nào trong chương trình.
Cách bạn tạo ra một toàn cầu biến là bạn chỉ cần đặt nó ở trên cùng
bên ngoài bất kỳ hàm nào.
Vì vậy, các biến toàn cục được khai báo ngoài chức năng và chúng không
thuộc về chức năng nào.
Hãy nhớ rằng, từ khóa chính chính là một chức năng.
Vì vậy, bất kỳ biến nào được xác định trong chức năng chính chỉ có thể
truy cập được trong chức năng chính.
Vì vậy, các biến trong chính không thể truy cập chức năng trong bất kỳ
chức năng nào khác.
Nếu bạn muốn một biến được sử dụng bởi tất cả các hàm, bạn đặt
biến bên ngoài một hàm, thường ở đầu tệp nguồn và
thường đánh dấu nó là nói rằng đây là một biến toàn cục.
Biến toàn cục là một lời nói dối toàn bộ chương trình từ khi chương trình bắt đầu
đến khi nó dừng lại, biến toàn cục đó sẽ được định
vị trong bộ nhớ.
Bất kỳ chức năng nào trong chương trình có thể thay đổi giá trị của biến toàn cục đó vì chúng có truy cập vào nó, họ
có thể sửa đổi nó.
Và vì vậy bạn nên bắt đầu suy nghĩ wow điều đó có vẻ nguy hiểm vì bây giờ bạn có mã có
thể truy cập cùng một dữ liệu ở bất kỳ đâu, nhưng
chúng ta sẽ làm được điều đó.
Nếu có một biến cục bộ được khai báo trong
một hàm có cùng tên với một biến toàn cục, thì hàm sẽ sử dụng biến cục bộ, nó sẽ che
đi biến toàn cục.
Vì vậy, nếu bạn có một biến toàn cục có tên x và bạn có một
biến cục bộ có tên là x bên trong một hàm, biến cục bộ biến sẽ được ưu tiên.
Nó sẽ không sửa đổi dữ liệu biến toàn cục.
Nếu bạn chỉ định cho điều đó biến, nó
sẽ chỉ sửa đổi biến cục bộ.
Vì vậy, biến toàn cục không có thể truy cập khi bạn có cùng tên
và nó thực sự sẽ không được truy cập trong chức năng cục bộ đó, vì
vậy không sử dụng cùng về cơ bản là vì nó sẽ
gây nhầm lẫn.
Đối với những người đã lập trình rất nhiều lập trình viên nâng cao họ
ngay lập tức nhận thấy điều này.
Họ sẽ nói này, chỉ cái này thôi hành động đó chỉ là
sửa đổi biến cục bộ ngay cả khi họ thấy động từ toàn cục cùng tên.
Nhưng đối với người mới bắt đầu, nó không phải lúc nào cũng rất rõ ràng.
Tôi sẽ cho bạn một ví dụ.
Ở đây trong ví dụ này, chúng tôi tạo một biến toàn
cục ở trên cùng trước hàm main.
Và cách bạn muốn tổ chức chương trình của bạn thường có bạn bao gồm các
câu lệnh ở đầu sau một số có thể nhận xét, và sau đó bạn có thể có một số hằng số được
xác định và sau đó bạn sẽ có các biến toàn cục của bạn.
Các biến toàn cục trông chỉ như các biến bình thường.
Đó chỉ là nơi họ thực tế đã khai báo.
Nếu chúng được khai báo bên ngoài một chức năng, sau đó chúng toàn cầu.
Vì vậy, trong ví dụ này, chúng tôi có biến toàn cục được gọi là toàn cục của tôi.
Chúng tôi đang khởi tạo nó thành 0.
Chúng tôi cũng có thể khởi tạo những biến toàn cục ở bất kỳ đâu.
Chúng tôi có thể khởi tạo chúng khi chúng tôi khai báo chúng hoặc chúng tôi có
thể khởi tạo chúng trong bất kỳ hàm nào.
Đó là một số nguyên.
Chúng tôi cũng có hai chức năng, hàm chính trong một hàm
được gọi là hàm của tôi.
Bên trong đó, chúng tôi có địa phương các biến chỉ có thể
truy cập bên trong các hàm đó.
Trong chức năng chính, chúng tôi có một địa phương chính của tôi.
Bạn chỉ có thể truy cập địa phương của tôi chính bên trong chức năng chính.
Nhưng vì toàn cục của tôi là một biến đó là toàn cầu, bạn cũng có thể truy cập
nó trong chức năng chính.
Vì vậy, main có thể truy cập hai biến cục bộ và toàn cục.
Và hàm của tôi có một biến cục bộ được đặt tên là x vì nó được khai
báo bên trong dấu ngoặc của thân hàm và chúng tôi thực sự có thể truy cập vào biến toàn cục
là biến toàn cục của tôi.
Chúng tôi cũng có thể truy cập x, nhưng chúng tôi không thể truy cập địa phương của tôi.
Tôi nên nói chính địa phương của tôi.
Bởi vì chính địa phương của tôi chỉ là bên trong chức năng chính.
Chúng tôi không có quyền truy cập vào đó.
Nếu chúng ta cố gắng viết hoặc đọc biến cục bộ chính bên trong hàm của
tôi, trình biên dịch là sẽ cung cấp cho bạn một lỗi.
Bạn cần hiểu điều này khái niệm cục bộ so với toàn cầu.
Cục bộ là bên trong các khối mã.
Khi chúng được khai báo, bạn có thể chỉ sử dụng chúng trong khối.
Nếu một biến nằm ngoài khối và nó chỉ nằm trong một hàm hoặc nó chỉ nằm trong chính chương
trình, bạn có thể truy cập nó trong bất kỳ chức năng nào.
Các biến toàn cục nên tránh.
Các biến toàn cục là một điều tồi tệ.
Lý do cho họ cho toàn cầu các biến có hại và tại sao bạn nên
tránh chúng là vì nó thúc đẩy sự khớp nối giữa các chức năng.
Khớp nối có nghĩa là gì?
Khớp nối có nghĩa là phụ thuộc.
Nếu bạn có một biến toàn cục và nó đang được sử dụng bởi
bốn chức năng, điều đó có nghĩa là mỗi chức năng của những chức năng đó có thể
phụ thuộc vào chức năng khác.
Có gì sai với sự phụ thuộc?
Sự phụ thuộc khiến một chương trình được khó gỡ lỗi và tìm lỗi hơn nhiều.
Nếu bạn có một lỗi trong chương trình của mình và bạn đang sử dụng một biến
toàn cục và biến toàn cục đang gây ra lỗi, bây giờ lỗi đó có thể ở bất kỳ đâu
trong bất kỳ chức năng nào bằng cách sử dụng biến toàn cục đó.
Nó làm phức tạp mọi thứ khi bạn có dữ liệu toàn cầu.
Bạn có một biến toàn cục, nó có thể được sửa đổi ở chức năng một, chức
năng hai, chức năng ba, chức năng bốn.
Bạn không hạn chế quyền truy cập vào đó. Cũng rất khó khi bạn tìm ra lỗi
và bạn cô lập nó, có thể rất khó
để sửa chữa nó.
Bởi vì bây giờ khi bạn sửa chữa nó, bạn có thể gây ra sự cố trong các chức
năng khác vì những phụ thuộc này.
Các biến toàn cục nên tránh càng nhiều càng tốt
vì khớp nối này, vì những phụ thuộc này.
Có những lúc bạn có thể cần để sử dụng nó, nhưng bạn nên tránh nó.
Và cần ghi nhớ nhất ngôn ngữ hiện đại trong hầu hết các ngôn ngữ hướng
đối tượng như c ++ và java, thậm chí không có khái niệm
về một biến toàn cục.
Chúng có các biến tĩnh có thể là các biến lớp, nhưng chúng vẫn được
đóng gói bên trong một lớp.
Bởi vì dữ liệu toàn cầu là một điều tồi tệ, các ngôn ngữ mới
thực sự cố gắng ngăn cấm.
Và bạn nên cố gắng tránh nó bởi vì nó chỉ làm phức
tạp chương trình của bạn và làm cho nó khó tìm và gỡ lỗi hơn.
Thay vì sử dụng toàn cầu dữ liệu, truyền dữ liệu cho các hàm.
Nếu một chức năng cần quyền truy cập vào một số dữ liệu, hãy chuyển nó cho nó.
Nếu - nếu đó là nhiều dữ liệu và bạn không muốn có nhiều tham số, về lý
thuyết, bạn không bao giờ thực sự nên có nhiều hơn năm tham số.
Có một cuốn sách tuyệt vời được gọi là Mã sạch nói về chất
lượng của mã và những điều cần tránh những điều cần tránh như biến toàn cục.
Nó cũng nói về cách nhiều tham số bạn nên có trong
các chức năng của mình.
Và nếu một hàm có 20 tham số, đó là dấu hiệu cho thấy có điều gì đó
không ổn, chủ yếu là do chức năng đó có lẽ đang làm quá nhiều.
Nhưng một hàm có thể có quyền truy cập vào dữ liệu bằng cách chỉ chuyển dữ liệu cho nó và bạn có thể hạn chế
việc sử dụng dữ liệu chung.
Và đối với một chức năng cần rất nhiều dữ liệu, bạn có thể sử dụng
một cái gì đó được gọi là cấu trúc mà chúng ta chưa nói đến nhưng đó là một cách khác để làm điều đó.
Vì vậy, đừng sử dụng nhiều dữ liệu toàn cầu chỉ khi cần thiết.
Đảm bảo rằng bạn hiểu mã.
Hãy chắc chắn rằng bạn ghi lại nó thực sự, thực sự tốt.
Vì vậy, ai đó khác đang tìm kiếm tại mã ngay lập tức biết
rằng bạn đang sử dụng dữ liệu toàn cầu và biết mọi thứ hoạt động như thế nào.
Đây là khái niệm về phạm vi chức năng.
Bạn nên hiểu điều này, vì vậy hãy chú ý đến tất cả các trang trình bày này.
Và chúng tôi cũng sẽ sử dụng một số dữ liệu toàn cầu và một số dữ liệu địa phương
trong thử thách tiếp theo của chúng tôi. Cảm ơn bạn.