2012-04-18 31 views
5

Tôi đang viết một số mã trong Visual Basic 6 và tôi đã nhận thấy rằng tôi thậm chí không cần phải khai báo các biến cho mọi thứ hoạt động.Tôi có nên khai báo một cách rõ ràng các biến của mình trong VB6

Sau đây (khai rõ ràng):

Dim foo As String 
foo = "Bar" 

Có vẻ như chỉ làm việc cũng như này (khai ngầm):

Dim foo 
foo = "Bar" 

Hoặc này (không kê khai):

foo = "Bar" 

Tôi biết trong C# Tôi cần phải khai báo một biến trước khi tôi sử dụng nó, và rằng tuyên bố ngầm và rõ ràng các ion đều được chấp nhận. Tôi cũng biết rằng trong Python, bạn không khai báo các biến của mình trước khi sử dụng chúng.

Liên quan đến Visual Basic 6 (và VBA mở rộng) thích hợp?

Cảm ơn

+0

+1 Một câu hỏi rất hay! –

Trả lời

6

Tôi có nên tuyên bố một cách rõ ràng biến của tôi trong VB6?

Yes. Tại sao?

Không chỉ vì nó là một thói quen tốt hay nó là phải nhưng vì chỉ có một lý do chính mà tôi đã đề cập trong bài viết này là tốt.

VB mặc định biến là loại Biến thể. Biến kiểu biến có thể chứa bất kỳ loại dữ liệu nào từ chuỗi, đến số nguyên, dài số nguyên, cho đến ngày, sang đơn vị tiền tệ, v.v. Theo mặc định "Biến thể" là loại biến "chậm nhất" .

Như tôi đã đề cập trước đó, Nếu bạn không chỉ định kiểu của biến , VB mặc định biến để trở thành kiểu Variant. Và bạn sẽ không muốn điều đó vì nó sẽ làm chậm mã của bạn khi VB Compiler mất thời gian để quyết định loại biến bạn đang sử dụng. Các biến thể cũng nên tránh vì chúng chịu trách nhiệm gây ra có thể “Loại lỗi không khớp”.

Chủ đề: Để 'Err' là con người (Xem điểm 3)

Link: http://siddharthrout.wordpress.com/2011/08/01/to-err-is-human/

Liên kết ở trên cũng bao gồm các bộ phận khác liên quan đến mã hóa một mà có thể/nên quan tâm.

HTH

+0

+1 Tuyên bố các biến của bạn luôn tốt. Tuy nhiên, nếu bạn không khai báo chúng, sau đó kết hợp chúng với số nhận dạng thích hợp như $, & vv để chúng không được giả định là biến thể. ví dụ. abc $ là chuỗi, xyz & sẽ dài, v.v. –

9

Đó là một tốt THÓI QUEN.

Có tùy chọn VB có tên là Tùy chọn rõ ràng. Với các thiết lập để ON, sau đó VB buộc bạn phải khai báo một biến trước khi bạn sử dụng nó: không

foo = "Bar" 

Điều đó giúp với đánh nhầm tên biến sau trong mã của bạn ... mà không cần điều đó, bạn có thể typso biến tên, chương trình của bạn biên dịch nhưng sẽ không hoạt động, và HARD sẽ khai thác nó.

+0

+1. Bạn cũng có thể sử dụng 'DefObj A-Z' trong mỗi mô-đun để làm cho nó rất không chắc rằng bạn sẽ vô tình bỏ qua loại bằng cách viết' Dim foo' mà không có kiểu. Kudos cho [Jim Mack] (http://stackoverflow.com/a/1905044/15639) ... Oh BTW là lỗi đánh máy trong từ typo cố ý :) – MarkJ

9

Trong Công cụ/Tuỳ chọn, tab Trình soạn thảo, chọn hộp kiểm Yêu cầu khai báo biến số. Thao tác này sẽ tự động thêm Tùy chọn Rõ ràng cho mọi mô-đun mã mới.

enter image description here

Tôi cho rằng đây không phải là thực tiễn tốt nhất; Tôi nghĩ về nó như là một yêu cầu cho sanity lập trình viên. Cài đặt này liên tục; một khi được đặt, nó vẫn được kích hoạt. Microsoft đã làm cho nó trở thành một lựa chọn vì một số phiên bản cũ của VB không có tính năng này, điều này cũng giải thích tại sao nó bị vô hiệu hóa theo mặc định.

4

Tôi rất khuyên bạn nên luôn khai báo các biến của mình. Điều này có thể bị ép buộc bằng cách thiết lập Option Explicit trong mỗi mô-đun mã. Bạn có thể cho phép VB6 tự động làm điều đó cho bạn bằng cách vào Tools-> Options, trong tab Editor kiểm tra Require declare declaration.

Nếu bạn không sử dụng Option Explicit, thì biến sẽ tự động được tạo cho bạn mỗi lần bạn tham chiếu tên biến chưa biết trước đó. Đây là hành vi rất nguy hiểm, bởi vì nếu bạn nhập sai tên biến, biến trống sẽ được tạo cho bạn, gây ra hành vi không mong muốn của mã của bạn.

Bạn không phải khai báo loại biến của bạn nhưng tôi cũng khuyên bạn nên làm điều đó. Kiểu mặc định của biến là Biến thể, có một hiệu suất nhỏ trên đầu và tạo ra một số vấn đề nếu bạn đang tạo các đối tượng COM để sử dụng bởi C++ hoặc C# (nếu có ai làm điều đó nữa).

+0

+1. Bạn cũng có thể sử dụng 'DefObj A-Z' trong mỗi mô-đun để làm cho nó rất không chắc rằng bạn sẽ vô tình bỏ qua loại bằng cách viết' Dim foo' mà không có kiểu. Kudos cho [Jim Mack] (http://stackoverflow.com/a/1905044/15639) – MarkJ

Các vấn đề liên quan