Thắc mắc về việc khai báo biến

Liên hệ QC

aviaiva

Thành viên thường trực
Tham gia
17/8/08
Bài viết
316
Được thích
242
em hỏi luôn: em thấy nếu không khai báo biến mà dùng luôn ví dụ: for i = 1 to 100 chương trình vẫn chạy bình thường =>? tác dụng của khai báo biến?

em thấy lúc thì pri sub lúc thì sub vậy khi nào khi pri sub và khi nào thì sub?
 
- Đó là dạng khai báo không tường minh. Bạn thử thêm dòng "Option Explicit" vào phía trên cùng rồi chạy code sẽ thấy báo lổi.
- Sub sẽ thấy được trong Tools > Macro > Macros, ngược lại Private thì không thể.
 
Upvote 0
- Đó là dạng khai báo không tường minh. Bạn thử thêm dòng "Option Explicit" vào phía trên cùng rồi chạy code sẽ thấy báo lổi.
em vẫn chưa thỏa mãn với câu trả lời này lắm, có thể rõ hơn nếu khai báo thì tốc độ có nhanh hơn so với khai báo không?
- Sub sẽ thấy được trong Tools > Macro > Macros, ngược lại Private thì không thể.
chắc là vấn đề các bác cần bảo mật ^^
 
Upvote 0
em vẫn chưa thỏa mãn với câu trả lời này lắm, có thể rõ hơn nếu khai báo thì tốc độ có nhanh hơn so với khai báo không?
Tôi nghĩ là có cải thiện về tốc độ, ít nhất là cho thằng Windows nó đở "mệt" khi phải mất công xác định xem cái biến chưa khai báo kia thuộc loại nào
Windows nó "chờ" bạn khai báo để phân phối tài nguyên hệ thống hợp lý. Bạn khai báo n as Long thì thằng n này sẽ được cấp phát vùng nhớ khác với khi khai bào n as Range (đương nhiên)
Dù sao thì 1 người có số CMND và địa chỉ rõ ràng sẽ đở mệt cho CA hơn, đúng không?
-------------
Đứng trên cương vị người dùng, nếu khai báo biến rõ ràng bạn còn được cái lợi khi có được sự gợi ý của tooltip text, giống như hình dưới đây:

Untitled.jpg
























Nếu không khai báo biến thì bạn phải tự mình nhớ lấy các thuộc tính, phương thức ---> Nhớ sai ráng chịu
 
Lần chỉnh sửa cuối:
Upvote 0
Nói chung anh Ndu giải thích đã rõ ràng, mình muốn thêm 1 chút thôi cho cụ thể:
Việc khai báo tường minh là cần thiết để ta có thể kiểm soát toàn bộ hệ thống biến trong chương trình, phạm vi ảnh hưởng của biến và thời gian tồn tại của biến. Trong tại 1 thời điểm sẽ có code (Sub hoặc Function) được gọi cuối cùng do người dùng hay từ Code khác chạy và có 1 số code đang ở dạng chờ chứ chưa phải dừng code. Vậy là trong bộ nhớ có các biến hệ thống và mỗi đoạn code lại có 1 số biến do người dùng tạo lập. Nếu đã Option Explicit mà 1 biến nào đó trong code không khai báo mà không báo lỗi thì cầm chắc nó đã được khai báo ở đâu đó, nhất là việc khai báo trong code không có Private thì cầm chắc giá trị của nó bị thay đổi từ đoạn code đang chạy. Việc thay đổi này ngoài chủ định của người viết Code. Khi chạy code mặc dù không sai về cú pháp, không sai về phép tính, không lỗi code nhưng kết quả sai. Việc dò tìm với chương trình lớn thật là mò kim đáy bể.

Riêng Private nó xác định phạm vi hoạt động của Code, ngoài phạm vi không thể gọi nó. Ví dụ Excel VBA có code của Application, Workbook, Worksheet theo trình tự của nó:
Application là code trong vùng các Module và Module Class.
Workbook là code trong vùng ThisWorkbook
WorkSheet là code trong vùng VBA của từng Sheet.
Theo trình tự thằng sau gọi được thằng trước chứ thằng trước không gọi được thằng sau.

Mình hiểu như vậy và viết ra khó quá, có gì sai sót thông cảm.
 
Upvote 0
Tôi nghĩ là có cải thiện về tốc độ, ít nhất là cho thằng Windows nó đở "mệt" khi phải mất công xác định xem cái biến chưa khai báo kia thuộc loại nào
Windows nó "chờ" bạn khai báo để phân phối tài nguyên hệ thống hợp lý. Bạn khai báo n as Long thì thằng n này sẽ được cấp phát vùng nhớ khác với khi khai bào n as Range (đương nhiên)
Dù sao thì 1 người có số CMND và địa chỉ rõ ràng sẽ đở mệt cho CA hơn, đúng không?
-------------
Nói chung anh Ndu giải thích đã rõ ràng, mình muốn thêm 1 chút thôi cho cụ thể:
Việc khai báo tường minh là cần thiết để ta có thể kiểm soát toàn bộ hệ thống biến trong chương trình, phạm vi ảnh hưởng của biến và thời gian tồn tại của biến. Trong tại 1 thời điểm sẽ có code (Sub hoặc Function) được gọi cuối cùng do người dùng hay từ Code khác chạy và có 1 số code đang ở dạng chờ chứ chưa phải dừng code. Vậy là trong bộ nhớ có các biến hệ thống và mỗi đoạn code lại có 1 số biến do người dùng tạo lập. Nếu đã Option Explicit mà 1 biến nào đó trong code không khai báo mà không báo lỗi thì cầm chắc nó đã được khai báo ở đâu đó, nhất là việc khai báo trong code không có Private thì cầm chắc giá trị của nó bị thay đổi từ đoạn code đang chạy. Việc thay đổi này ngoài chủ định của người viết Code. Khi chạy code mặc dù không sai về cú pháp, không sai về phép tính, không lỗi code nhưng kết quả sai. Việc dò tìm với chương trình lớn thật là mò kim đáy bể.

Riêng Private nó xác định phạm vi hoạt động của Code, ngoài phạm vi không thể gọi nó. Ví dụ Excel VBA có code của Application, Workbook, Worksheet theo trình tự của nó:
Application là code trong vùng các Module và Module Class.
Workbook là code trong vùng ThisWorkbook
WorkSheet là code trong vùng VBA của từng Sheet.
Theo trình tự thằng sau gọi được thằng trước chứ thằng trước không gọi được thằng sau.

Mình hiểu như vậy và viết ra khó quá, có gì sai sót thông cảm.

Hiểu rõ cách máy làm việc và tạo điều kiện để nó hoạt động tốt hơn ^^ đó mới chính là những người lập trình chuyên nghiệp.

Rất cảm ơn các thầy, các bác, các anh các chị về câu trả lời rất chi tiết.
 
Upvote 0
Web KT
Back
Top Bottom