Подтвердить что ты не робот

Использование двоеточий для размещения двух операторов в одной строке в Visual Basic

Является ли плохой практикой использование двоеточий для размещения двух операторов в одной строке в Visual Basic?

4b9b3361

Ответ 1

Нет ничего неправильного в использовании двоеточия для объединения операторов. Это действительно зависит от контекста, но пока это не уменьшает читаемость, в этом нет ничего плохого.

Как правило, я не использую двоеточие для этой цели. Я считаю более удобочитаемым иметь один оператор в строке. Однако это не проблема с двоеточием. Я не делаю то же самое с точкой с запятой на С# или С++. Это просто личное предпочтение.

Ответ 2

Это хорошая практика в модерации, потому что иногда читаемость улучшается путем объединения двух строк:

  • когда строки короткие и плотно связанные
  • когда строки короткие и тривиальные

    Option Compare Database:  Option Explicit   ''My favorite!
    rsDataSet.Close:          Set rsDataSet= Nothing
    

Не делайте этого, если:

  • это ухудшает читаемость.
  • это усложняет отладку. Структуры управления, такие как If...Then, должны оставаться чистыми. Вы будете рады, что сохранили это просто, когда пришло время установить точку останова.
  • он компрометирует будущее редактирование. Часто вы хотите держать разделы портативными. Перемещение или реструктуризация блока кода легко затрудняется попытками минимизировать ваш код.

Ответ 3

В общем, я бы посоветовал это сделать, так как это делает более загруженный код.

Однако для простых задач в этом нет ничего плохого. Например:

for i = 1 to 10: ProcessFoo(i): next

Я думаю, что такая строка достаточно короткая, чтобы не вызвать путаницу.

Ответ 4

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

Сочетание операторов также упрощает создание длинных функций, которые по-прежнему подходят для одного экрана.

Это не главный грех, мне это просто не нравится.

Мне также не нравится одна строка Если.

Ответ 5

Мне не следует говорить "никогда не делайте этого", вы должны просто сказать: "Если вы это сделаете, то возможная проблема такова и такая". Тогда просто взвесить плюсы и минусы для себя. Про - краткость/несколько строк кода. Иногда это может помочь читаемости. Например, некоторые люди используют его для объявлений vb.Net:

Dim x As Long: x = 1

Или циклы ожидания:

Do Until IE.ReadyState = READYSTATE_COMPLETE: DoEvents: Loop

Но, очевидно, вы действительно можете сделать это грубо и для кого-то:

Public Sub DoYouKnowWhatThisDoes()
    MsgBox Example
End Sub

Private Function Example()
    Const s$ = "078243185105164060193114247147243200250160004134202029132090174000215255134164128142"
    Const w% = 3: Const l% = 42: Dim i%, r$: For i = 1 To l Step w: r = r & ChrW$(Mid$(s, i, w) Xor Mid$(s, i + l, w)): Next: Example = r
End Function

Еще одна практическая причина, по которой вы, возможно, не захотите использовать этот подход, - это точки останова. Точки останова могут быть заданы только строкой. Поэтому, если у вас есть несколько вещей, выполняющихся в одной строке, вы не можете изолировать вторую вещь. Он остановится в первом заявлении. (Это также одна из причин, по которым некоторым людям не нравится одиночная линия ifs.) Это просто усложняет отладку.

По этой причине я обычно не использую двоеточия в производственном коде. Однако я использую их для улучшения краткости кода "копировать/вставлять", который я размещаю на форумах и в других местах. YMMV:)

Ответ 6

Я когда-либо использовал его, когда я собираю набор записей и не изменяю переменную. Я считаю, что одна строка вместо двух дает мне больше строк кода на экране и не умаляет читаемости.

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

 Select Case success
      Case ERROR_FILE_NO_ASSOCIATION: msg = "no association"
      Case ERROR_FILE_NOT_FOUND: msg = "file not found"
      Case ERROR_PATH_NOT_FOUND: msg = "path not found"
      Case ERROR_BAD_FORMAT:     msg = "bad format"

из http://vbnet.mvps.org/index.html?code/system/findexecutable.htm

И даже тогда я бы выстроил часть "msg =".

Ответ 7

Это считается плохой практикой на большинстве сайтов, на которых я работал. И большинством разработчиков VB, с которыми я работал. И в моей голове. Если я это увижу, я признаю, что почти наверняка изменил бы это. Я говорю "почти", потому что признаю, что я мог найти код, который выглядел бы лучше. Я не ожидаю увидеть его в своей жизни.

Мне также очень не нравится однострочный ** If ** s.

Оба наиболее вероятны похмелья со времен мониторов VGA (640x480); что в наши дни нет оправдания.

Ответ 8

Я понимаю, что это очень старый вопрос, но это был первый результат в моем поиске Google, поэтому я надеюсь, что меня могут простить за то, что он здесь.

Есть одна ситуация (именно то, что привело меня на самом деле), в которой этот подход не только полезен, но и единственный способ добиться желаемого результата: окно Immediate. Любой код, который вы хотите выполнить в окне Immediate, должен находиться в одной строке. Поэтому, чтобы использовать любую форму Do, Case, For, While или With в окне Immediate, вам нужно будет использовать двоеточия.

Ответ 9

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

Я обычно использую их сам по себе, например, при проверке отмены в одном из моих последних проектов:

If _bCancel Then Status = CancelProcess() : Return Status

Поместив это, мы сохранили свой код, который читаем, чем альтернативный блок IF.

Но это может зайти слишком далеко, я недавно унаследовал проект, который изобилует примерами слишком большого использования двоеточия:

    Select Case GetStringValue(Index).Trim.ToLower
        Case "yes", "y" : GetBooleanValue = True
        Case "no", "n" : GetBooleanValue = False
        Case Else : GetBooleanValue = Nothing
    End Select

Лично я считаю, что это было немного.

Ответ 10

Я видел, как он использовался в объявлениях классов при использовании наследования или реализации интерфейса:

Public Class DerivedClass : Inherits BaseClass
   ...
End Class

Но, как и другие, я также препятствую его использованию.

Крис

Ответ 11

Мне нравится этот

Using pro As New Process() : With pro

        ...

    End With
End Using

Ответ 12

Ответ на вопрос № Нет. Все, что находится за пределами Нет, является чисто субъективным и расточительным, независимо от ответа за пределами простого номера. Ниже приведена моя трата печатания.

Вы какой-то раб? Делайте, как хотите. Вы - центр вашей вселенной, а не какой-то незнакомец из StackOverflow. Если вы работаете в компании, вопрос является немым, потому что стиль кодирования уже будет определен и полностью не под вашим контролем. Что касается одного "я", то, кто в этой вселенной будет вечно вечно смотреть на заботу о вашем коде.

Я бы выбрал A над B. Как видно, это показывает цель двоеточия без использования двоеточия. Это сэкономить место. Ниже экономится место и делает код более читаемым. Это просто глупо. То же самое для троичного?: Применение. Когда код по своей сути является сложным, тогда следует рассматривать двоеточие, одну строку, если затем еще или тройную.

'================================================================
'A
If somevalue1 = 0 Then AddLogTry("True") Else AddLogFalse("False")
If somevalue2 = 0 Then AddLogTry("True") Else AddLogFalse("False")
If somevalue3 = 0 Then AddLogTry("True") Else AddLogFalse("False")
'================================================================

'================================================================
'B
If somevlaue1 = 0 Then
  AddLogTrue("True")
Else
  AddLogFalse("False")
EndIf

If somevlaue2 = 0 Then
  AddLogTrue("True")
Else
  AddLogFalse("False")
EndIf

If somevlaue3 = 0 Then
  AddLogTrue("True")
Else
  AddLogFalse("False")
EndIf
'================================================================