Когда обрабатывается оператор Dim при компиляции кода vba? - PullRequest
2 голосов
/ 26 мая 2011

Когда обрабатывается оператор Dim при компиляции кода VBA?Есть ли какой-либо выигрыш в эффективности, если я это сделаю?:

Dim oFileDiag As FileDialog

Set oFileDiag = Application.FileDialog(msoFileDialogFilePicker)                
If oFileDiag.Show = -1 Then

    '// Dim statement further down in the code...
    Dim ofdSelected As FileDialogSelectedItems
    Set ofdSelected = .SelectedItems

End If

В отличие от этого?:

'// Dim statement at the beginning of the code...
Dim oFileDiag As FileDialog
Dim ofdSelected As FileDialogSelectedItems

Set oFileDiag = Application.FileDialog(msoFileDialogFilePicker)                
If oFileDiag.Show = -1 Then

    Set ofdSelected = .SelectedItems

End If

Ответы [ 3 ]

3 голосов
/ 26 мая 2011

Насколько я понимаю (я ошибался раньше), в VB (A) нет повышения эффективности. Объявление любой переменной в любом месте подпрограммы будет использовать те же ресурсы (хотя ваша переменная не будет доступна до тех пор, пока не будет объявлена ​​ниже ее).

Объявление переменной объекта (Dim) только создает ссылку, но не создает экземпляр объекта до Set. Однако обратите внимание на противоположную проблему в такой конструкции:

Dim rsFoo As New ADODB.Recordset

'other statements

With rsFoo
    .LockType = adBatchOptimistic
    'other statements
End With

Кажется, это может быть удобно, так как вам не нужно делать явное Set... = New.... Но суть в том, что каждый каждый раз, когда вы используете rsFoo во время выполнения, код должен проверять, был ли он создан. Намного лучше так:

Dim rsFoo As ADODB.Recordset

'other statements

Set rsFoo = New ADODB.Recordset
With rsFoo
    .LockType = adBatchOptimistic
    'other statements
End With

Это, в некоторой степени, «религиозное» различие, по крайней мере, в языках, где нет реальной разницы в накладных расходах. Наиболее распространенная практика в VB (A) - объявлять все переменные в начале процедуры, хотя есть некоторые, которые утверждают, что держать объявление как можно ближе к первому использованию «яснее» (не для тех, кто условно ожидать их всех в начале, это не ...).

0 голосов
/ 26 мая 2011

Я бы сказал, что это незначительно, поскольку это часть интерактивного пользовательского интерфейса, которого вы никогда не заметите.

Это на самом деле совет в одной из книг Скотта Мейерса «Эффективный C ++», чтобы задерживать объявление переменных до последнего момента, чтобы избежать ненужных затрат конструктора, если (как в этом случае) вам никогда не нужен объект, основанный на неудачном состояние.

Я предполагаю, что это будет похоже на VB. Dim ofdSelected As FileDialogSelectedItems создает экземпляр объекта или просто объявляет ссылку?

0 голосов
/ 26 мая 2011

Обоснованное предположение: это не имеет никакого значения, однако программисты, пришедшие из C, сохранили привычку объявлять все свои переменные в начале кода / функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...