Как стать автором
Обновить

Комментарии 14

Кто-то ещё использует VBA?

Ага, вместе со Scratch. TIOBE это то куда смотреть на рейтинг языков точно не стоит.

даже не представляете насколько

НЛО прилетело и опубликовало эту надпись здесь

Дата аналитика часто связана с csv, excel и соответсвенно VBA, так что да, смерть ему пока не светит

Стоило бы в самом начале сделать пометку (да пожирнее) о том, что речь идёт о VBA, а то я уж было начал расчехлять свой меч, а на щите рисовать крест. Ишь, на статическую типизацию, подумал я?, покусился.

виноват, думал, что хаба будет достаточно :)

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

Это неправда. Массив фиксированного размера не может быть присвоен, причём это ошибка компиляции.

Dim a1(1 To 10) As Long
Dim a2(1 To 10) As Long  ' То же количество измерений, размеры измерений совпадают, все значения соответствуют значениям по умолчанию для объявленного типа (ноль)
  
a1 = a2  ' Ошибка компиляции

Так что, когда вы передаете Variant по значению, вы передаете копию указателя, который говорит: "Ваш массив находится здесь". Точно так же, как и ссылка на объект.

И это неправда.

Private Sub Main()
    Dim a(1 To 10) As Long
    a(5) = 1
  
    ChangeArray a
  
    MsgBox a(5)  ' Результат: 1
End Sub

Private Sub ChangeArray(ByVal v As Variant) ' На самом деле передается копия массива
    v(5) = 42
End Sub

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

A fixed-size array can be assigned to if the value has the same number of dimensions, that the dimensions are the same size, and all the values are the default value for the declared type.

и:

So when you pass a Variant by value, you’re passing a copy of a pointer that says “your array is over here”. Exactly like an object reference, in fact.

Добавлю Ваши примеры по тексту, спасибо!

к слову, в комментариях к оригиналу статьи тоже указали, как минимум, на один из недочетов, но автор не прокомментировал

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

Я вариантный тип использую как место для возврата полезных данных.

У меня любой мало мальски полезная процедура - это функция, которая всегда возвращает Структуру с полями

Result(boolean)

ErrorCode(int)

ErrorDescription(string)

Data(OleVariant)

Пробрасыватели exception могут даже ничего не писать, это бесполезно.

Примерно такой же подход я использовал в этой статье ?

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории