Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
Выходит что этот вариант самый оптимальный: Public Function NZVB(tValue As Variant, Optional substValue) As Variant If Not IsNull(tValue) Then NZVB = tValue Else If Not IsMissing(substValue) Then NZVB = substValue Else NZVB = "" End If End If End Function Ветки проверяющие значение substValue поменял местами, так как в большинстве случаев эти значения не будут равны IsMissing. И еще попутный вопрос, если эту строку Not IsNull(tValue) заменить на Not Len(myValue) = 0 то вроде должно будет работать быстрее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2004, 12:33 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2004, 13:33 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
1) Len(myValue) = 0 так писать нельзя В ПРИНЦИПЕ. при myValue = Null управление будет уходить "не туда". 2) "" - мне не нравится - проверять щас некогда, но "на глаз" это хуже vbEmpty. для начала вместо VBNZ=vbEmpty или чего другого я бы просто Exit Function поставил (до опыта ожидал бы, что это то же самое, что vbEmpty присвоить)... Короче, замечание про vbEmpty принято к сведению, думать буду "потом", потому как прямо щас - в поту. Извините. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2004, 14:06 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
да, забыл tValue <> Null - хороший и, на первый взгляд - "чистый" вариант. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2004, 14:07 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
новый вариант с учетом поправок :) Public Function myNz(myValue, Optional myResult As Variant) As Variant If myValue <> Null Then myNz = myValue Else If Not IsMissing(myResult) Then myNz = myResult End If End If End Function ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2004, 14:39 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
замена "" на vbNullString - ухудшает результат, а на vbEmpty - не заметно изменений Странно всё это. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2004, 14:39 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
авторзамена "" на vbNullString - ухудшает результат на днях встретил такой "тип" - vbNewLine работает БЫСТРЕЕ, чем vbCrLf ))) проверил - правда. кстати, marvan с <> Null - поздравляю. Отличный пример ЧЕСТНОЙ оптимизации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2004, 14:47 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
Результаты забегов. Скоро начну принимать ставки :-) Dim myValue As Variant 0,040235 - f1 (IIf) 0,037075 - f2 (NZVB) 0,036335 - f4 (myNz) 9,287639 - f5 (Nz) 0,035006 - f6 (NZVB - new) 0,028769 - f7 (nzm) 0,028142 - f8 (myNz1 - new) myValue = Null 0,024619 - f1 0,027512 - f2 0,025877 - f4 6,828931 - f5 0,027280 - f6 0,023903 - f7 0,027324 - f8 myValue = "Value" 0,040099 - f1 0,028652 - f2 0,025586 - f4 6,609823 - f5 0,025359 - f6 0,024330 - f7 0,027525 - f8 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2004, 14:58 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
обработанные результаты, в порядке убывания: Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2004, 15:34 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
Позволю себе несколько заключительных замечаний. 1) vbEmpty. Пока ехал домой, до меня дошло, в чем дело. Это ж надо ТАК проколоться… Уши, наверно, еще долго гореть будут. Ну, уж – топором не вырубишь. Эхь – и почему мне привиделось, что это константа для неинициализированного варианта, когда это простой Integer из набора vbVarType, СООТВЕТСТВУЮЩИЙ VarType-у неинициализированного Variant. Голову пеплом посыпаю, а оправдываться/объясняться - бесполезно. В общем, - выпендрился. 2) Не нравится “”. Общее между “” присваиваемого в качестве возвращаемого значения функции и неинициализированным Variant-ом то, что в поле значения у обоих ноль. Разница в заключается в следующем. В первом случае - функция возвращает Variant подтипа «Строка», что может приводить к неверному опознаванию «подлежащего» типа в циклических операция и, потенциально, – ошибке времени исполнения - «несоответствие типов». Второй вариант универсально приводится к типам, пригодным для приема значений, возвращаемых NZ. То есть, при получении на вход Null функция NZ обязана возвращать неинициализированный вариант. Что я по уродски пытался изобрАзить возвратом vbEmpty. Спасибо EDUCK обратил внимание, а то бы я, наверно, еще долго не догадывался, ЧТО нашкрябал. 3) <> Null. В этом месте обнаружилась особенность. <> Null приводит к поведению, не соответствующему NZ при передаче на вход функции МАССИВА. NZ безропотно возвращает этот массив «назад», а <> Null вызывает ошибку времени исполнения. Если бороться за ТОЧНОСТЬ воспроизведения поведения NZ, придется остановиться на IsNull. Эквивалентно Not IsNull должно вести себя выражение VBA.VarType(testVal) <> vbNull. По скорости оно не выигрывает, а по лаконичности – проигрывает. Таким образом, функция (по моим текущим представлениям ) точно воспроизводящая NZ должна выглядеть так Код: plaintext 1. 2. 3. 4. 5. 6. ЗЫ Напоследок. Почему я назвал tVar<> Null “Правильной оптимизацией”. Основным напрвлением «ускорения» VB – кода в режиме native – компиляции я считаю инлайн замену «библиотечных» функций. Например, мною проверено, что инлайн замена InStr на перебор массива интов ускоряет native – код в среднем почти вдвое. На всякий случай – абсолютно вредное действие при работе во всех вариантах p-кодного исполнения, включая MS Office. В этом смысле - tVar<> Null – «ПРАВИЛЬНОЕ РЕШЕНИЕ» для native-компилированного проекта. Больше в этой функции содержательно «оптимизировать» нечего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2004, 01:38 |
|
||
|
|

start [/forum/topic.php?fid=60&msg=32546804&tid=2169436]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
55ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 235ms |
| total: | 373ms |

| 0 / 0 |
