Access 2002

Деление с плавающей запятой


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

На практике, впрочем, экономия оказывается заметной не всегда. В одних примерах замена обычного деления целочисленным дала гораздо меньшую экономию времени, чем это было в ранних версиях Access, а в других примерах, и, в частности, при работе с формами, разница была существенной. Похоже, VBA достаточно сообразителен, чтобы самостоятельно использовать целочисленную математику, когда видит, что это сработает быстрее. Наши тестовые процедуры делили целые числа на 7 с помощью обоих операторов:

Вывод таков: целочисленное деление мало влияет на скорость выполнения кода, если только вы не производите подряд большое количество вычислений, в которых вас не волнует дробная часть результата. Но и вреда от него никакого. (Просмотрите также полные тестовые процедуры Testl2a и Testl2b в модуле класса OptimizingTests.)

Как и многие другие языки программирования, VBA хранит логические значения в виде целых чисел. Кроме того, выражения вычисляются в Access справа налево. Эти два обстоятельства позволяют выполнять логическую проверку и присваивать ее результат переменной в одной строке. Например, чтобы присвоить переменной у значение True, если х содержит 5, и значение False в противном случае, можно было бы написать такой код:

Однако этот код излишне громоздок. Поскольку мы присваиваем переменной значение, которое совпадает с результатом проверки, то есть значение выражения (х = 5), это можно сделать одной строкой:

Если такой код кажется вам непривычным, не смущайтесь: VBA интерпретирует его совершенно правильно. Начиная справа, VBA вычисляет значение выражения (х – 5), которое равно True или False, а затем присваивает это значение переменной у. И все дела. В других языках, включая С и Pascal, благодаря различным операторам сравнения и присваивания такое выражение выглядит более понятным.

Комментарии закрыты