Что означает DIM в Visual Basic и BASIC? Подпрограммы языка basic.

Dim имели разные значения, приписываемые ему.

Я нашел ссылки на Dim значение "Объявить в памяти" , более релевантная ссылка - это документ на Dim Statement опубликовал Oracle как часть справочника языка Siebel VB. Конечно, вы можете утверждать, что если вы не объявляете переменные в памяти, где вы это делаете? Может быть "Объявить в модуле" - хорошая альтернатива, учитывая, как используется Dim .

По-моему, "Объявить в памяти" на самом деле мнемоника, созданная для того, чтобы легче было научиться использовать Dim . Я вижу "Объявить в памяти" как лучший смысл, поскольку он описывает, что он делает в текущих версиях языка, но это не правильный смысл.

Фактически, при истоках Basic Dim использовался только для объявления массивов. Для обычных переменных не использовалось ключевое слово, вместо этого их тип был выведен из их имени. Например, если имя переменной заканчивается на $ , то это строка (это то, что вы могли видеть даже в именах методов до VB6, например Mid$). Итак, вы использовали Dim только для измерения размеров массивов (обратите внимание, что ReDim изменяет размеры массивов).

Действительно, это имеет значение? Я имею в виду, что это ключевое слово имеет смысл в искусственном языке. Это не должно быть слово на английском или любом другом естественном языке. Таким образом, это может означать только то, что вы хотите, все, что имеет значение, это то, что оно работает.

Во всяком случае, это не совсем так. Поскольку BASIC является частью нашей культуры и понимает, почему это так, как я, надеюсь, поможет улучшить наше видение мира.

Я сижу на своем компьютере с желанием помочь сохранить этот маленький кусочек нашей культуры, который кажется потерянным, замененным нашим угадыванием того, что это было. Итак, я выкопал MSDN как текущие, так и старые компакт-диски из версии 1998 года. Я также искал документацию для старого QBasic [должен был использовать DOSBox] и сумел получить руководство по Дартмуту, чтобы узнать, как они говорят о Dim . Для моего разочарования они не говорят, что означает Dim , и говорят только, как он используется.

Но прежде чем моя надежда была тусклой, мне удалось найти это Руководство по использованию микрокомпьютера BBC (которое, как утверждается, относится к 1984 году, и я не стоит сомневаться в этом). Микрокомпьютер BBC использовал вариант BASIC под названием BBC BASIC, и он описан в документе. Несмотря на то, что он не говорит, что означает Dim , он говорит (на странице 104):

Вы можете измерить N $, чтобы иметь столько записей, сколько хотите. Для Например, DIM N $(1000) создаст строковый массив с пространством для 1000 разные имена.

Как я уже сказал, он не говорит, что Dim обозначает размерность, но служит доказательством того, что ассоциирование Dim с Dimension было обычным явлением на момент написания этого документа.

Теперь я получил дополнительный сюрприз позже (на странице 208), заголовок раздела, который описывает ключевое слово DIM (примечание: это не указано в содержимом) говорит:

Размер DIM массива

Итак, я не получил цитату "Dim стоит...", но, я думаю, ясно, что любой достойный человек, способный читать этот документ, будет считать, что Dim означает измерение.

С новой надеждой я решил найти способ выбора Dim . Опять же, я не нашел учетной записи на эту тему, но я смог найти окончательную цитату:

Прежде чем вы сможете использовать массив, вы должны определить его в инструкции DIM (измерение).

Вы можете найти это как часть True BASIC Online User Guides на веб-странице True BASIC inc, компании, основанной Thomas Eugene Kurtz , соавтор BASIC.

Итак, во время повторного использования Dim является сокращением для Dimension и да. Это существовало в FORTRAN раньше, поэтому вполне вероятно, что он был выбран влиянием FORTRAN как Патрик Макдональд сказал в своем ответе .

Dim sum as string = "this is not a chinese meal" REM example usage in VB.NET ;)

Объявляет переменную или массив.

Если переменные перечислены через запятую (например, DIM sPar1, sPar2, sPar3 AS STRING), можно определить только переменную Variant. В общем случае, каждая переменная должна быть определена на отдельной строке.

DIM sPar1 AS STRING

DIM sPar2 AS STRING

DIM sPar3 AS STRING

Dim объявляет локальные переменные в процедурах. Для объявления глобальных переменных служат операторы PUBLIC и PRIVATE.

Синтаксис:

Dim Переменная [(Начало To Конец)] [, Переменная2 [(Начало To Конец)] [,...]]

Параметры:

Переменная: произвольное имя переменной или массива.

Начало, Конец: числовые значения или константы, определяющие количество элементов (Количество_элементов=(Начало-Конец)+1) и диапазон индексов.

Начало и Конец могут быть и числовыми выражениями, если ReDim применяется на уровне процедуры.

Тип: ключевое слово, объявляющее тип переменной.

Ключевое слово: тип переменной

Bool: переменная типа Boolean (True, False)

Currency: переменная типа Currency (денежная величина с длиной дробной части в 4 позиции)

Date: переменная типа Date

Double: переменная с плавающей точкой двойной точности (1,79769313486232 x 10E308 - 4,94065645841247 x 10E-324)

Integer: переменная типа Integer (-32768 - 32767)

Long: переменная типа Long Integer (-2 147 483 648 - 2 147 483 647)

Object: переменная типа Object (Примечание: эта переменная может быть определена только впоследствии с помощью оператора Set!)

Single: переменная типа Single (3,402823 x 10E38 - 1,401298 x 10E-45)

String: переменная типа String с максимальной длиной 64 000 символов ASCII.

: переменная типа Variant (охватывает все типы, согласно определению). Если ключевое слово не указано, то переменные автоматически определяются как переменные типа Variant, кроме случаев, когда применяется оператор из диапазона DefBool - DefVar.

В языке Basic Lotus® Symphony™ переменные не требуется явно объявлять. Исключение составляют только массивы. Переменную можно объявить с помощью оператора Dim; если операторов объявления несколько, то они разделяются запятыми. Для объявления типа переменной укажите символ объявления типа после ее имени или введите соответствующее ключевое слово.

В языке Basic Lotus Symphony можно определять одномерные или многомерные массивы, задавая соответствующий тип переменной. Массивы удобны для работы со списками и таблицами. К элементам массива можно обращаться по индексу, который можно задавать посредством числового выражения или переменной.

Массивы объявляются оператором Dim. Диапазон индексов можно определить двумя способами:

DIM text(20) as String REM 21 элемент с номерами от 0 до 20

DIM text(5 to 25) as String REM 21 элемент с номерами от 5 до 25

DIM text(-15 to 5) as String REM 21 элемент (включая 0)

REM с номерами от -15 до 5

Двухмерное поле данных

DIM text(20,2) as String REM 63 элемента с номерами от 0 до 20 уровня 1, от 0 до 20 уровня 2 и от 0 до 20 уровня 3

Типы массивов можно объявлять как динамические, если оператор ReDim определяет количество измерений в процедуре или функции, содержащей массив. В общем случае, размерность массива определяется только один раз и не может быть изменена. В процедуре массив можно объявить с помощью оператора ReDim. Размерности можно определять только с помощью числовых выражений. Это гарантирует соблюдение ограничений на длину полей.

Пример:

Dim sVar As String

Dim iVar As Integer

sVar = "Lotus Symphony "

REM Двумерное поле данных

Dim stext(20,2) as String

Const sDim as String = " Размерность:"

stext(i,ii) = str(i) & sDim & str(ii)

Dim первоначально (в BASIC) стоял для Dimension, поскольку он использовался для определения размеров массива.

(Первоначальной реализацией BASIC был Dartmouth BASIC, который произошел от FORTRAN, где указано РАЗМЕРЫ.)

В настоящее время Dim используется для определения любой переменной, а не только массивов, поэтому ее значение не является интуитивным.


2018-06-23 16:01

Dim имели разные значения, приписываемые ему.

Я нашел ссылки на Dim имея в виду «Заявить в память» , более актуальной ссылкой является документ о Инструкция Dim опубликовал Oracle как часть справочника языка Siebel VB. Конечно, вы можете утверждать, что если вы не объявляете переменные в памяти, где вы это делаете? Может быть «Объявить в модуле» является хорошей альтернативой, учитывая, как Dim используется.

По-моему, «Объявить в памяти» на самом деле мнемонический , созданный для упрощения обучения использованию Dim , Я вижу «объявить в памяти» как лучший смысл, поскольку он описывает, что он делает в текущих версиях языка, но это не правильный смысл.

Фактически, при происхождении Basic Dim был использован только для объявления массивов. Для обычных переменных не использовалось ключевое слово, вместо этого их тип был выведен из их имени. Например, если имя переменной заканчивается $ то это строка (это то, что вы могли видеть даже в именах методов до VB6, например Mid$). Итак, вы использовали Dim только дать измерение к массивам (обратите внимание, что ReDim изменяет размеры массивов).

В самом деле, Это имеет значение ? Я имею в виду, что это ключевое слово имеет смысл в искусственном языке. Это не должно быть слово на английском или любом другом естественном языке. Таким образом, это может означать только то, что вы хотите, все, что имеет значение, - это то, что оно работает.

Во всяком случае, это не совсем так. Поскольку BASIC является частью нашей культуры и понимает, почему это так, как я, надеюсь, поможет улучшить наше видение мира.

Я сижу с моего компьютера с желанием помочь сохранить этот маленький кусочек нашей культуры, который кажется потерянным, замененным нашим предположением о том, что это было. Итак, я выкопал MSDN как текущие, так и старые компакт-диски из версии 1998 года. Я также искал документацию для старого QBasic [должен был использовать DOSBox] и сумел получить руководство по Дартмуту, чтобы узнать, как они говорят Dim , Для моего разочарования они не говорят, что делает Dim стоять, и только сказать, как он используется.

Но прежде чем моя надежда была тусклой, мне удалось найти это Руководство по использованию микрокомпьютера BBC (который утверждает, что с 1984 года, и я не хочу сомневаться в этом). Микрокомпьютер BBC использовал вариант BASIC под названием BBC BASIC, и он описан в документе. Хотя, он не говорит, что делает Dim стенд, он говорит (на странице 104):

Вы можете измерить N $, чтобы иметь столько записей, сколько хотите. Для Например, DIM N $ (1000) создаст строковый массив с пространством для 1000 разные имена.

Как я уже сказал, он не говорит, что Dim означает измерение, но служит доказательством того, что ассоциация Dim с Dimension было обычным явлением на момент написания этого документа.

Теперь я получил дополнительный сюрприз (на странице 208), заголовок раздела, в котором описывается ключевое слово DIM (примечание: это не указано в содержимом) говорит:

Размер DIM массива

Итак, я не получил цитату «Dim стоит...», но, я думаю, ясно, что любой достойный человек, способный читать этот документ, будет считать, что Dim означает измерение.

С новой надеждой я решил найти Dim был выбран. Опять же, я не нашел учетной записи на эту тему, но я смог найти окончательную цитату:

Прежде чем вы сможете использовать массив, вы должны определить его в инструкции DIM (измерение).

Вы можете найти это как часть Истинные руководства пользователя BASIC Online на веб-странице True BASIC inc, компании, основанной Томас Юджин Курц , соавтором BASIC.

Итак, Dim является сокращением для DIMENSION , и да. Это существовало в FORTRAN раньше, поэтому вполне вероятно, что он был выбран из-за влияния FORTRAN как Патрик Макдональд сказал в своем ответе ,

Dim sum as string = "this is not a chinese meal" REM example usage in VB.NET ;)


2017-10-05 01:19

Это сокращение для Dimension, поскольку оно первоначально использовалось в BASIC для указания размера массивов.

DIM - (сокращение от размера) определяет размер массивов

Часть исходного исходного кода компилятора BASIC, где он будет прыгать при поиске DIM команда, в которой вы можете четко видеть исходное намерение для ключевого слова:

DIM LDA XR01 BACK OFF OBJECT POINTER SUB N3 STA RX01 LDA L 2 GET VARIABLE TO BE DIMENSIONED STA 3 LDA S 3 CAB N36 CHECK FOR $ ARRAY BRU *+7 NOT $ ...

Позднее он стал использоваться для объявления всех видов переменных, когда возможность указать тип переменных была добавлена ​​в более поздние версии.


2018-06-23 16:02

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

В VBA, как и в любом другом языке программирования, переменные и константы используются для хранения каких-либо значений. Как и следует из названия, переменные могут изменяться, константы же хранят фиксированные значения.

Например, константа Pi хранит значение 3,14159265… Число “Пи” не будет изменяться в ходе выполнения программы, но все же хранить такое значение удобнее как константу.

В то же время мы можем использовать переменную sVAT_Rate для хранения ставки НДС на покупаемые товары. Величина переменной sVAT_Rate может изменяться в зависимости от того, что за товар приобретается.

Типы данных

Все переменные и константы относятся к определённому типу данных. В таблице ниже приведены типы данных, используемые в VBA, с описанием и диапазоном возможных значений:

Тип данных Размер Описание Диапазон значений
Byte 1 байт Положительные целые числа; часто используется для двоичных данных от 0 до 255
Boolean 2 байта Может принимать значения либо True, либо False True или False
Integer 2 байта Целые числа (нет дробной части) от -32 768 до +32 767
Long 4 байта Большие целые числа (нет дробной части) от -2 147 483 648 до +2 147 483 647
Single 4 байта Число с плавающей точкой одинарной точности от -3.4e38 до +3.4e38
Double 8 байт Число с плавающей точкой двойной точности от -1.8e308 до +1.8e308
Currency 8 байт Число с плавающей точкой, с фиксированным количеством десятичных разрядов от -922 337 203 685 477.5808 до +922 337 203 685 477.5807
Date 8 байт Дата и время – данные типа Date представлены числом с плавающей точкой. Целая часть этого числа выражает дату, а дробная часть – время от 1 Января 100 до 31 Декабря 9999
Object 4 байта Ссылка на объект Любая ссылка на объект
String изменяется Набор символов. Тип String может иметь фиксированную или изменяющуюся длину. Чаще используется с изменяющейся длиной Фиксированной длины – приблизительно до 65 500 символов. Переменной длины – приблизительно до 2 миллиардов символов
Variant изменяется Может содержать дату, число с плавающей точкой или строку символов. Этот тип используют в тех случаях, когда заранее не известно, какой именно тип данных будет введён Число – Double, строка – String

Очевидно, что пользуясь приведённой выше таблицей и правильно выбирая тип данных, можно использовать память более экономно (например, выбрать тип данных Integer вместо Long или Single вместо Double ). Однако, используя более компактные типы данных, нужно внимательно следить за тем, чтобы в коде не было попыток уместить в них не соразмерно большие значения.

Объявление переменных и констант

Примечание переводчика: Говоря о переменных в VBA, стоит упомянуть ещё один очень важный момент. Если мы объявляем переменную, но не присваиваем ей какое-либо значение, то она инициализируется значением по умолчанию:
текстовые строки – инициализируются пустыми строками;
числа – значением 0;
переменные типа Boolean – False;
даты – 30 декабря 1899.

Прежде чем использовать переменную или константу, её нужно объявить. Для этого в макрос добавляют вот такую простую строку кода:

Dim Имя_Переменной As Тип_Данных

В показанной выше строке кода Имя_Переменной – это имя переменной, которая будет использована в коде, а Тип_Данных – это один из типов данных из таблицы, приведённой чуть ранее в этой статье. Например:

Dim sVAT_Rate As Single Dim i As Integer

Аналогично объявляются константы, но при объявлении констант обязательно сразу указывается их значение. Например, вот так:

Const iMaxCount = 5000 Const iMaxScore = 100

Объявлять переменные в Excel не обязательно. По умолчанию все введённые, но не объявленные переменные в Excel будут иметь тип Variant и смогут принять как числовое, так и текстовое значение.

Таким образом, программист в любой момент сможет использовать новую переменную (даже если она не была объявлена), и Excel будет рассматривать её как переменную типа Variant . Однако, есть несколько причин, почему так поступать не следует:

  1. Использование памяти и скорость вычислений. Если не объявлять переменную с указанием типа данных, то по умолчанию для неё будет установлен тип Variant . Этот тип данных использует больше памяти, чем другие типы данных.Казалось бы, несколько лишних байт на каждую переменную – не так уж много, но на практике в создаваемых программах могут быть тысячи переменных (особенно при работе с массивами). Поэтому излишняя память, используемая переменными типа Variant , по сравнению с переменными типа Integer или Single , может сложится в значительную сумму.К тому же, операции с переменными типа Variant выполняются гораздо медленнее, чем с переменными других типов, соответственно лишняя тысяча переменных типа Variant может значительно замедлить вычисления.
  2. Профилактика опечаток в именах переменных. Если все переменные объявляются, то можно использовать оператор VBAOption Explicit (о нём расскажем далее), чтобы выявить все не объявленные переменные.Таким образом исключается появление в программе ошибки в результате не верно записанного имени переменной. Например, используя в коде переменную с именем sVAT_Rate , можно допустить опечатку и, присваивая значение этой переменной, записать: “VATRate = 0,175”. Ожидается, что с этого момента, переменная sVAT_Rate должна содержать значение 0,175 – но, конечно же, этого не происходит. Если же включен режим обязательного объявления всех используемых переменных, то компилятор VBA сразу же укажет на ошибку, так как не найдёт переменную VATRate среди объявленных.
  3. Выделение значений, не соответствующих объявленному типу переменной. Если объявить переменную определённого типа и попытаться присвоить ей данные другого типа, то появится ошибка, не исправив которую, можно получить сбой в работе программы.На первый взгляд, это может показаться хорошей причиной, чтобы не объявлять переменные, но на самом деле, чем раньше выяснится, что одна из переменных получила не те данные, которые должна была получить – тем лучше! Иначе, если программа продолжит работу, результаты могут оказаться неверными и неожиданными, а найти причину ошибок будет гораздо сложнее.Возможно также, что макрос будет “успешно” выполнен. В результате ошибка останется незамеченной и работа продолжится с неверными данными!

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

Option Explicit

Оператор Option Explicit заставляет объявлять все переменные, которые будут использованы в коде VBA, и при компиляции выделяет все не объявленные переменные как ошибки (прежде чем будет запущено выполнение кода). Применить этот оператор не сложно – просто запишите в самом верху файла VBA такую строку:

Option Explicit

Если хотите всегда вставлять Option Explicit в начало каждого нового созданного модуля VBA, то это можно делать автоматически. Для этого необходимо включить параметр Require Variable Declaration в настройках редактора VBA.

Это делается так:

  • В меню редактора Visual Basic нажмите Tools > Options
  • В появившемся диалоговом окне откройте вкладку Editor
  • Отметьте галочкой параметр Require Variable Declaration и нажмите ОК

При включенном параметре строка Option Explicit будет автоматически вставляться в начало каждого нового созданного модуля.

Область действия переменных и констант

Каждая объявленная переменная или константа имеет свою ограниченную область действия, то есть ограниченную часть программы, в которой эта переменная существует. Область действия зависит от того, где было сделано объявление переменной или константы. Возьмём, к примеру, переменную sVAT_Rate , которая используется в функции Total_Cost . В следующей таблице рассмотрены два варианта области действия переменной sVAT_Rate , объявленной в двух различных позициях в модуле:

Option Explicit Dim sVAT_Rate As Single Function Total_Cost() As Double ... End Function

Если переменная sVAT_Rate объявлена в самом начале модуля, то областью действия этой переменной будет весь модуль (т.е. переменная sVAT_Rate будет распознаваться всеми процедурами в этом модуле).

Следовательно, если в функции Total_Cost переменной sVAT_Rate будет присвоено некоторое значение, то следующая функция, выполняемая в пределах этого же модуля, будет использовать переменную sVAT_Rate с этим же значением.

Однако, если будет вызвана какая-то функция, расположенная в другом модуле, то для неё переменная sVAT_Rate будет не известна.

Option Explicit Function Total_Cost() As Double Dim sVAT_Rate As Single ... End Function

Если переменная sVAT_Rate объявлена в начале функции Total_Cost , то её область действия будет ограничена только этой функцией (т.е. в пределах функции Total_Cost , можно будет использовать переменную sVAT_Rate , а за её пределами – нет).

При попытке использовать sVAT_Rate в другой процедуре, компилятор VBA сообщит об ошибке, так как эта переменная не была объявлена за пределами функции Total_Cost (при условии, что использован оператор Option Explicit ).

В показанном выше примере переменная объявлена на уровне модуля при помощи ключевого слова Dim . Однако, бывает необходимо, чтобы объявленными переменными можно было пользоваться в других модулях. В таких случаях для объявления переменной вместо ключевого слова Dim нужно использовать ключевое слово Public .

Кстати, для того, чтобы объявить переменную на уровне модуля, вместо ключевого слова Dim можно использовать ключевое слово Private , которое укажет на то, что данная переменная предназначена для использования только в текущем модуле.

Для объявления констант также можно использовать ключевые слова Public и Private , но не вместо ключевого слова Const , а вместе с ним.

В следующих примерах показано использование ключевых слов Public и Private в применении к переменным и к константам.