Идёт загрузка страницы...

htp://aptem.net.ru






На главную страничку учебника Visual Basic

Полезные советы #2

  1. Используйте Long вместо Integer. Выйгрыша в скорости вы не получите зато можете получить распространённую ошибку:

    Dim a As Integer
    Dim
    b As Integer
    Dim
    c As Integer

    a = 2341
    b = 65

    c = a * b


    Получите ошибку Overflow! Это происходит потому, что a - Integer, b- Integer, и результат тоже должен быть Integer, следовательно должен находиться в диапазоне -32768 - +32768, а он равен 152165. Поэтому и происходит переполнение. Этого можно избежать с помощью функции преобразования типа CLng. Т.е. c = a * CLng(b). Или задать тип Long при определении переменной (это лучший вариант). Кстати это относится и другим типам, т.е. c(integer) = a(byte) * b(byte) ...

  2. Немного магии с операторами Or:

    If x = 0 And y = 0 Then ... можно записать так:

    If (x Or y) = 0 Then ... - это чуть побыстрее

    и Xor:

    If (x = 0 And y = 0) Or (x <> 0 And y <> 0) Then ... можно так:

    If (x = 0) Xor (y <> 0) Then .. - это тоже чуть побыстрее

  3. Если вы обращаетесь к одному и тому же элементу массива в цикле, то лучше создайте переменную и присвойте ей значение этого элемента вне цикла, а в цикле используйте эту переменную.

  4. Очень мощный (как Format) оператор Like может упростить множество операций со строками, например, вам необходимо проверить строку по маске (aka Perl Regular Expressions), например вам необходимо проверить переменную myString:

    myString = "312T-87GD-8922"

    If myString Like "###[A-Z]-##[A-Z][A-Z]-####" Then ...

    Подробнее здесь.

  5. Если у вас в цикле идёт проверка некоторых условий, например:

    If a > 1 And b = Cos(alpha) And Len(myStr) < 12 Then ...

    Вы можете применить метод сокращённой оценки:

    If a > 1 Then
    If b = Cos(alpha) Then
    If Len(myStr) < 12 Then
    ' Здесь код для выполнения когда все условия истинны
    End If
    End If
    End If


    Здесь вычисление Cos будет происходить только тогда, когда a > 1, а в первом варианте он вычисляется всегда. Также здесь важна последовательность условий - сверху помещайте условие, которое может быть верным реже чем нижние и т.д. Если цикл большой, то сразу заметите выйгрыш в скорости.

  6. Функция DoEvents ОЧЕНЬ сильно замедляет работу. Если вам необходимо вычислить большой цикл и в нём вы используете DoEvents - скорость обработки цикла упадёт в десятки раз! Поэтому лучше прибегнуть к использованию API функции GetInputState (она возвращает True если форме было послано сообщение от клавиатуры или мыши):

    Declare Function GetInputState Lib "user32" _
    Alias "GetInputState" () As Long

    For c = 1 To 100000
    temp = 2 * 2 * 2
    If GetInputState() Then DoEvents ' здесь 312 мс.
    DoEvents ' а здесь время выполнения цикла 6543 мс. !!!
    Next c

  7. Если вам необходимо прочитать содержимое файла в TextBox - воспользуётесь нижеследующим кодом:

    Text1.Text = Input$(#1, LOF(1))

  8. Если вам необходимо получить адрес переменной в памяти, используйте функцию VarPtr:

    MsgBox VarPtr (myVariable)

  9. Если вам необходимо проверить существует ли какой-либо файл, можете использовать следующую функцию:

    Function FileExist(fileName As String) As Boolean
    On Error Resume Next

    FileExist = Dir$(fileName) <> ""
    If Err.Number <> 0 Then FileExist = False
    On Error GoTo 0
    End Function

  10. Если вам необходимо обменять 2 переменных целого типа, вы можете использовать такой вот код:

    Dim a As Long, b As Long
    a = 4
    b = 7
    a = a Xor b
    b = a Xor b
    a = a Xor b


    Этот магический код действительно работает. Давайте посмотрим как:

    Для тех, кто забыл как работает оператор Xor напоминаю: Xor - это логическое исключающее сложение. Таблица для Xor выглядит таким образом:

    Операнд1 0 0 1 1
    Операнд2 0 1 0 1

    ----------------
    Результ. 0 1 1 0

    Итак проверим как же работает этот код:

    a = 4 = 0100
    xor
    b = 7 = 0111
    ------------
    a = 3 = 0011


    Теперь a содержит значение 3. Далее:

    a = 3 = 0011
    xor
    b = 7 = 0111
    ------------
    b = 4 = 0100


    И накоцен:

    a = 3 = 0011
    xor
    b = 4 = 0100
    ------------
    a = 7 = 0111


    Итог: a = 7, b = 4. ч.т.д.

На главную страничку учебника Visual Basic