Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Dim a1() vs Dim a2 / 25 сообщений из 52, страница 1 из 3
02.08.2015, 12:33
    #39021139
Иван FXS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dim a1() vs Dim a2
Чем по сути отличаются декларации:
Код: vbnet
1.
Dim a1()


и
Код: vbnet
1.
Dim a2


?
...
Рейтинг: 0 / 0
02.08.2015, 13:16
    #39021150
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dim a1() vs Dim a2
1 по сути массив, 2 по сути что угодно.
...
Рейтинг: 0 / 0
02.08.2015, 14:30
    #39021178
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dim a1() vs Dim a2
Первое - неинициализированный динамический массив элементов типа Variant.
Второе - одиночная переменная типа Variant.
...
Рейтинг: 0 / 0
02.08.2015, 16:14
    #39021186
booby
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dim a1() vs Dim a2
по сути - способом проверки допустимости типа присваиваемого значения
...
Рейтинг: 0 / 0
02.08.2015, 16:58
    #39021196
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dim a1() vs Dim a2
boobyпо сути - способом проверки допустимости типа присваиваемого значенияхорошо сказал.
...
Рейтинг: 0 / 0
03.08.2015, 09:49
    #39021442
Иван FXS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dim a1() vs Dim a2
Я понимаю, что "2 по сути что угодно". Переформулирую вопрос.
Чем по сути отличаются конструкции:
Код: vbnet
1.
2.
Dim a1()
ReDim a1(100) as Byte


и
Код: vbnet
1.
2.
Dim a2
ReDim a2(100) as Byte


?
...
Рейтинг: 0 / 0
03.08.2015, 10:06
    #39021454
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dim a1() vs Dim a2
тем, что во втором случае ты не сможешь написать
Код: vbnet
1.
a2(0) = 1
...
Рейтинг: 0 / 0
03.08.2015, 10:37
    #39021482
скукотища
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dim a1() vs Dim a2
Иван FXS,
по сути ответил Antonariy 17965772 .

ЗЫ:
YouTube Video
...
Рейтинг: 0 / 0
03.08.2015, 11:03
    #39021511
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dim a1() vs Dim a2
скукотища,

да нет, лучше всего ответил booby.
...
Рейтинг: 0 / 0
03.08.2015, 12:49
    #39021625
Иван FXS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dim a1() vs Dim a2
Shocker.Pro,
после ReDim я смогу написать Let a2(0) = 1 точно также как Let a1(0) = 1
...
Рейтинг: 0 / 0
03.08.2015, 12:51
    #39021628
Иван FXS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dim a1() vs Dim a2
... а до ReDim - точно также - не смогу.
...
Рейтинг: 0 / 0
03.08.2015, 13:03
    #39021644
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dim a1() vs Dim a2
Иван FXSShocker.Pro,
после ReDim я смогу написать Let a2(0) = 1 точно также как Let a1(0) = 1написать-то ты сможешь, а скомпилировать?
...
Рейтинг: 0 / 0
03.08.2015, 22:17
    #39022144
booby
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dim a1() vs Dim a2
Иван FXSЯ понимаю, что "2 по сути что угодно". Переформулирую вопрос.
Чем по сути отличаются конструкции:
Код: vbnet
1.
2.
Dim a1()
ReDim a1(100) as Byte


и
Код: vbnet
1.
2.
Dim a2
ReDim a2(100) as Byte


?

тем что в первом случае производится несанкционированная попытка изменения типа переменной. Тип элемента массива не может быть заменен при динамическом переразмещении массива, если переменная была объявлена как переменная, ссылающаяся на массив однажды (и навсегда) заявленного типа.
Этот код не сможет скомпилироваться, т.к. заявленный тип элемента массива a1 не может быть динамически заменен в данном случае.

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

Все эти действия вообще не меняют (базового) типа переменной a2, а меняют только ее
"подтип". Поэтому все они последовательно допустимы.

Вообще стоит справку почитывать.
конкретно этот вопрос детально освещен в справке на redim:

[You can use the ReDim statement repeatedly to change the number of elements and dimensions in an array. However, you can't declare an array of one data type and later use ReDim to change the array to another data type, unless the array is contained in a Variant. If the array is contained in a Variant, the type of the elements can be changed using an As type clause, unless you’re using the Preserve keyword, in which case, no changes of data type are permitted.
---
Note To resize an array contained in a Variant, you must explicitly declare the Variant variable before attempting to resize its array.
]
...
Рейтинг: 0 / 0
04.08.2015, 16:00
    #39022715
Иван FXS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dim a1() vs Dim a2
Господа, спасибо за ваше терпение. Попробую третью попытку.

Будет ли код, начинающийся с
Код: vbnet
1.
2.
Dim a1() as Byte
ReDim a1(100)



более "эффективен", чем код, начинающийся с
Код: vbnet
1.
2.
Dim a2
ReDim a2(100) as Byte


?
...
Рейтинг: 0 / 0
04.08.2015, 16:10
    #39022727
booby
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dim a1() vs Dim a2
Иван FXS,

еще раз - до эффективности
у этого кода
Код: vbnet
1.
2.
Dim a1() as Byte
ReDim a1(100)



нет шансов скомпилироваться.

про "эффективен":
становится откровенно скучно.
Придайте этому "слову" набор конкретных смыслов, пригодных к обсуждению.
Может быть и про "эффективность" тогда поговорим.
...
Рейтинг: 0 / 0
04.08.2015, 16:35
    #39022760
Иван FXS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dim a1() vs Dim a2
Код: vbnet
1.
2.
Dim a1()
ReDim a1(100) as Byte


- это была ошибка, я её признаю, написал впопыхах.

Но с кодом
Код: vbnet
1.
2.
Dim a1()  as Byte
ReDim a1(100)


всё в порядке.
...
Рейтинг: 0 / 0
04.08.2015, 16:43
    #39022772
booby
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dim a1() vs Dim a2
Иван FXS,
ок
...
Рейтинг: 0 / 0
04.08.2015, 19:18
    #39022898
Иван FXS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dim a1() vs Dim a2
Я, собственно, почему спрашиваю - вторая конструкция позволяет легко проверять, инициирован ли массив:

Код: vbnet
1.
2.
3.
4.
Static a2
If not IsArray(a2) Then
      ReDim a2(100) as ЧтоТо
End If


...
...
Рейтинг: 0 / 0
05.08.2015, 07:42
    #39023044
hclubmk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dim a1() vs Dim a2
Первая тоже позволяет
Код: vbnet
1.
2.
3.
4.
Dim a1()
If ((Not a1) = -1) Then
    ReDim a1(100)
End If
...
Рейтинг: 0 / 0
05.08.2015, 10:33
    #39023158
Иван FXS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dim a1() vs Dim a2
hclubmk, это фантастика! Я реально выпал в осадок!!

Кто-нибудь может объяснить, на каком основании код
Код: vbnet
1.
2.
Dim a1()
If  Not a1 Then stop


- является корректным?

При том что код
Код: vbnet
1.
2.
Dim a1()
If  a1 Then stop


- вполне ожидаемо (для меня по крайней мере) является некорректным.
...
Рейтинг: 0 / 0
05.08.2015, 11:35
    #39023274
hclubmk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dim a1() vs Dim a2
Наверно потому, что условие под if MSDNRequired. Expression. Must evaluate to True or False , or to a data type that is implicitly convertible to Boolean
...
Рейтинг: 0 / 0
05.08.2015, 11:58
    #39023311
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dim a1() vs Dim a2
MSDNRequired. Expression. Must evaluate to True or False , or to a data type that is implicitly convertible to Booleanне подходит. Тогда бы работало без Not, а также CBool(a), ан нет
...
Рейтинг: 0 / 0
05.08.2015, 12:07
    #39023325
Eolt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dim a1() vs Dim a2
Иван FXSКто-нибудь может объяснить, на каком основании код
Код: vbnet
1.
2.
Dim a1()
If  Not a1 Then stop


- является корректным?
.

На том основании:

авторNot Operator
Performs logical negation on a Boolean expression, or bitwise negation on a numeric expression.
result: Required. Any Boolean or numeric expression.
...
Рейтинг: 0 / 0
05.08.2015, 12:08
    #39023326
hclubmk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dim a1() vs Dim a2
Shocker.Proа также CBool(a) Круто! а такое преобразование типов (я имею ввиду массив) допустимо вообще? Да и без Not к bool явно не преобразовывается.
...
Рейтинг: 0 / 0
05.08.2015, 12:15
    #39023339
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dim a1() vs Dim a2
hclubmkShocker.Proа также CBool(a) Круто! а такое преобразование типов (я имею ввиду массив) допустимо вообще? Да и без Not к bool явно не преобразовывается.так о чем и речь. Почему CBool(a1) нельзя, а Not a1 можно?
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Dim a1() vs Dim a2 / 25 сообщений из 52, страница 1 из 3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]