Страницы: 1
RSS
Записать код компактнее, Сократить код
 
Здравствуйте уважаемые форумчане. В макросе идёт проверка на существование двух файлов. Подскажите как можно сократить этот код, он работает, но выглядит не очень. почему-то бесит
Код
******************
If Dir(N_S) <> "" Then
GoTo met
 Else
MsgBox "Файл по пути " & N_S & " не найден"
 Exit Sub
End If
met:
If Dir(N_Bes) <> "" Then
GoTo met_
 Else
MsgBox "Файл по пути " & N_Bes & " не найден"
 Exit Sub
End If
met_:
******************
Изменено: БМВ - 09.12.2022 19:17:06
 
мне кажется это из-за "go to", я бы про него забыл и больше никогда не использовал
 
Код
    If Dir(N_S) = "" Then
        MsgBox "Файл по пути " & N_S & " не найден"
        Exit Sub
    End If
    If Dir(N_Bes) = "" Then
        MsgBox "Файл по пути " & N_Bes & " не найден"
        Exit Sub
    End If
'дальше код
Скажи мне, кудесник, любимец ба’гов...
 
Цитата
написал:
мне кажется это из-за "go to", я бы про него забыл и больше никогда не использовал
Спасибо за участие. А почему?
 
Код
    For Each vFile In Array(N_S, N_Bes)
        If Dir(vFile) = "" Then
            MsgBox "Файл по пути " & vFile & " не найден"
            Exit Sub
        End If
    Next
 
сократите  так (до 2-х строк):
Код
  If Dir(N_S) = "" Then MsgBox "Файл по пути " & N_S & " не найден": Exit Sub
  If Dir(N_Bes) = "" Then MsgBox "Файл по пути " & N_Bes & " не найден": Exit Sub
  ' сама метка не нужна, а тут код, который должен был следовать за меткой met_:
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Код
If Dir(N_S) = "" Then MsgBox "Файл по пути " & N_S & " не найден": Exit Sub
  If Dir(N_Bes) = "" Then MsgBox "Файл по пути " & N_Bes & " не найден": Exit Sub
  ' сама метка не нужна, а тут код, который должен был следовать за меткой met_:

Спасибо, это уже красИвее !!! Низкий поклон.
Изменено: huchos - 09.12.2022 11:47:26
 
Всем спасибо, более чем прекрасно. Очень лаконично
 
Цитата
huchos: выглядит не очень. почему-то бесит
Потому что это пример, как не стоит использовать метки.

    Код из #5 (для большего числа проверок) или из #6 (для примера) являются самыми оптимальными с точки зрения логики и краткости. #3 же — это тот же #6, но в классической полной записи.
#5 более кратко
Изменено: Jack Famous - 09.12.2022 12:34:15
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
более кратко
количество символов же одинаковое? почему же он более "краткий"?
если дело в одной строке, тогда для чего? )
 
Цитата
nilske: количество символов же одинаковое?
посчитайте) меньше, но вообще из-за строк — меньше строк проще читать. Главное следить, чтобы строки не были уж слишком большие (это вкусовщина).
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
nilske,  не про Ваш конкретный случай, но следует понимать, что не всегда более короткий код работает быстрее, чем длинный )
 
Цитата
написал:
если дело в одной строке, тогда для чего? )
я не пишу макросов длиннее 40 строк
и практически не пишу строк длиннее 80 символов
(это обычно помещается на один экран, и когда читаешь такой макрос не нужно помнить что было написано в 3-х предыдущих экранах т.е. делаю так потому, что мне так удобно)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Microsoft советует обратное:
Используйте только одну инструкцию для каждой строки. Не используйте символ разделителя строк Visual Basic
Соглашения о написании кода в Visual Basic
 
А я вот, например, почти всегда пишу именно в полной классической записи. Никаких записей в одну строку. На работе бывают коды по несколько тысяч строк и я привык читать их именно по классической записи, лесенкой - написан у меня, например, If, значит, где-то ниже первая запись на этом же уровне отступов относится именно к этому If.
Но это, конечно, дело привычки
Скажи мне, кудесник, любимец ба’гов...
 
Спасибо за развернутый ответ.
Изменено: huchos - 09.12.2022 14:37:43
 
Цитата
nilske: Microsoft советует обратное:
а это разве не касается только кода, который они сами приводят в качестве примеров? Посмотрел - не только — смысл в том, что "мы так делаем и вам советуем"
Ага, шас))


Цитата
_Boroda_: А я вот, например, почти всегда пишу именно в полной классической записи
гораздо проще и не менее понятно  записать
Код
If Len(x) Then n= n+1
чем
Код
If Len(x) Then
    n= n+1
End If
Но вообще, вкусовщина, конечно  :)
Изменено: Jack Famous - 09.12.2022 15:21:03
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
гораздо проще и не менее понятно  записать
скорее всего это и относится тем исключениям
Цитата
_Boroda_ написал:
почти всегда пишу именно в полной классической записи

Еще один классический вариант
Код
    If Dir(N_S) = "" Then
        MsgBox "Файл по пути " & N_S & " не найден"
        Exit Sub
    ElseIf Dir(N_Bes) = "" Then
        MsgBox "Файл по пути " & N_Bes & " не найден"
        Exit Sub
    End If

хотя я предпочитаю не выходить так из процедур.
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал: Еще один классический вариант
как минимум, Exit Sub напрашивается в продолжение через двоеточие, а не одной строкой (для меня).
    Некоторые и Next [Variable] в цикле For не пишут, хотя уж тут сокращение не имеет смысла, а потеря восприятия (особенно, во вложенных циклах) есть
Цитата
БМВ: я предпочитаю не выходить так из процедур
а что делать, если это критическая ошибка?
Изменено: Jack Famous - 09.12.2022 19:41:53
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
если это критическая ошибка?
это обрабатывается. Ну это привычка с тех пор как не было таких exit  в языках.

If True then
...
end if

вместо

If False Then exit sub
...

Цитата
Jack Famous написал:
потеря восприятия [во вложенных циклах] есть
восприятие отступы могут формировать, или уводить в другие процедуры.
Изменено: БМВ - 09.12.2022 19:51:02
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ: с тех пор как не было таких exit  в языках
тут имеет смысл (наверное) перестроиться, поскольку код можно писать намного (в 2 раза) короче без сокращений, потери смысла и скорости:
Пример
Разумеется, при простых проверках, разница в скорости не будет заметна, но так бывает далеко не всегда.
Изменено: Jack Famous - 09.12.2022 19:56:13
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
Разумеется, при простых проверках, разница в скорости не будет заметна, но так бывает далеко не всегда.
а сложные сведут на нет сокращения записи. так что тут к чему привык то и используй.
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ: к чему привык то и используй
с этим согласен, с остальным — зависит от случая
    Ну и про Select Case не забываем, который незаметно дольше If, но для проверки одного условия/значения на множество вариантов — удобнее всего  :idea:
Изменено: Jack Famous - 09.12.2022 20:12:29
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
Select Case
да тот же вид, только сбоку
Код
SelectCase true
case  Dir(N_S) = "" 
        MsgBox "Файл по пути " & N_S & " не найден"
        Exit Sub
case Dir(N_Bes) = "" 
        MsgBox "Файл по пути " & N_Bes & " не найден"
        Exit Sub
 end select
По вопросам из тем форума, личку не читаю.
Страницы: 1
Наверх