Страницы: 1
RSS
«If … Then» или «Select Case» — сравнение методов ветвления по скорости, Speed test
 
Приветствую!
Отчёт
Изменено: Jack Famous - 22.09.2021 10:02:09
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
При множестве условий If труднее читается. Select Case  предпочтительнее.
Переход по метке  не одобряю и не применяю (почти). Не надо структуру (последовательность) нарушать.
 
vikttur, про метки мы уже спорили и остались при разных мнениях. Лично я никаких проблем с метками по-прежнему не вижу  :)
Изменено: Jack Famous - 21.09.2021 16:31:28
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Jack Famous,  
1.
Цитата
Jack Famous написал:
Вариант с переходом по метке мне нравится больше остальных
ровно до того случая когда это не приведет к катастрофическим последствиям. Забыл указать или не на ту метку отправил.
2 структура If then else end if грамотными редакторами автоматически распознается и не только контролируется на целостность но и позволяет для удобства схлопнуть блок. Естественно мы о нее блоке в одну строку как в примере.
Я вот в ущерб длине кода всегда использую
Код
Sub 
If then
end if
end sub

Вместо    
Код
Sub 
If then exit sub
end sub
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ: ровно до того случая когда это не приведет к катастрофическим последствиям
я этих страшилок наслушался за 5 лет и чёт не было ничего страшного. Даже меньше, чем при обычном программировании, т.к. метки редкие и их хорошо видно слева
Дядь Миш, меточный холивар по ссылке из #3, а тут — просто сравнение скоростей  :)
Изменено: Jack Famous - 21.09.2021 17:14:56
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
тогда забыл рассмотреть аутсайдера, структуру
Код
t = Timer
For n = 1 To nMax
    If n = 1 Then
        p = p + 1
    Else
        If n = 10 Then


но  в целом я все равно против меток. только для обработки ошибок.
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ: забыл рассмотреть аутсайдера
а вот за это спасибо — добавил (монстр проиграл)  ;)
Но в целом я всё-равно за метки  :D
Изменено: Jack Famous - 21.09.2021 17:58:06
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
БМВ написал:
Я вот в ущерб длине кода всегда использую
так это разный код, а если после end if код идёт? exit sub вполне нормальная команда, в других языках это return к примеру.
Изменено: bedvit - 21.09.2021 20:00:53
«Бритва Оккама» или «Принцип Калашникова»?
 
bedvit, Виталий, ну просто привык иметь один выход из процедуры.
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ: привык иметь один выход из процедуры
интересно как))) а что делать, например, если в процессе выполнения макроса мы что-то спрашиваем у пользователя через диалог и там есть красный крестик и/или кнопка отмены?  :)
Я уже молчу про кучу проверок, которые нужно проводить и выходить при несоблюдении условий...)
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
Я уже молчу про кучу проверок, которые нужно проводить и выходить при несоблюдении условий...)
надо нормальный алгоритм нарисовать , тогда и множество выходов сведутся к последнему end sub/function, хотя есть где без прzмых выходов не обойтись.
Код
exit sub
Err1:
end sub
По вопросам из тем форума, личку не читаю.
 
Err1: - это же переход по метке )
 
Михаил игнорирует exit sub, но использует goto. Отчего такая нелюбовь к exit sub ?
Например в Си, там нужно перед выходом почистить память, поэтому goto-->delete x-->return.
В vba можно сразу exit sub
Цитата
БМВ написал:
надо нормальный алгоритм нарисовать
А чем ненормален exit sub?
P.S. В том же С/С++ , C#.NET  нет понятия exit sub. Там в любом месте можно выйти из функции/процедуры, используя return. Это нормально)
Изменено: bedvit - 22.09.2021 08:25:51
«Бритва Оккама» или «Принцип Калашникова»?
 
Цитата
bedvit: Михаил игнорирует exit sub, но использует goto
а ты покури формулы с его — и не такое кодить начнёшь  :D
Го в тему с метками — я ща примерчик накидаю о "полезности меток"  :D
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Михаил не игнорирует, а просто считает код более читаемым логичным без меток там, где без них можно обойтись. Уже раз писал, что несмотря на то что  в VBS  допускается описывать функцию или процедуру по ходу основного кода
Код
Call sub1
Sub sub1()
Call sub11
WScript.Echo "sub1"
End Sub
WScript.Echo "main1"
Sub sub11()
WScript.echo "sub11"
End Sub
WScript.Echo "main2"


и это делает код не всегда читаемым когда посреди основного кода возникает описание подпрограммы.  По этой причине, чтоб шанса не было так сделать,  для чуть более крупного скрипта я всегда делал основную процедура именно отдельной процедурой, вынося за её пределы определения переменных? если они нужны глобально, и описание констант.
По вопросам из тем форума, личку не читаю.
 
Пишу код и понимаю, что в данном случае Select Case уже не поможет, а с меткой всё также легко и коротко
UPD: далее БМВ показал, как это сделать легко и просто  :D
Изменено: Jack Famous - 22.09.2021 14:03:35
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
Пишу код и понимаю, что в данном случае Select Case
Select case нет, а If...Then никто не отменял
Код
Sub File_CopyKillRename(Optional fCopy As Boolean, Optional fKill As Boolean, Optional fRename As Boolean)
Dim tx$
    If fCopy + fKill + fRename <> -1 Then Stop
    If fCopy Then tx = "Copy" Else If fKill Then tx = "Kill" Else tx = "Rename"
End Sub
"Все гениальное просто, а все простое гениально!!!"
 
Цитата
Nordheim: If fCopy Then tx = "Copy" Else If fKill Then tx = "Kill" Else tx = "Rename"
понятно, что так можно, но это уже беспредел какой-то  :D
Я в такую кишку могу завернуть только 2 последовательные проверки — больше совесть не позволяет  :)
Как выиграть немного времени при нескольких проверках
Изменено: Jack Famous - 22.09.2021 12:22:06
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
проверять некогда
Код
select case true
case Copy + fKill + fRename <> -1 
Stop
case fCopy
tx = "Copy"
case fKill
tx = "Kill" 
case else
x = "Rename"
end select
По вопросам из тем форума, личку не читаю.
 
Ответил в теме про метки
Изменено: Jack Famous - 22.09.2021 14:09:02
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Страницы: 1
Наверх