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

21

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

  • 2
    Раньше я делал это в vb6, чтобы поместить объявление и инициализацию в одну строку, но эта проблема была исправлена в vbn.
Теги:
vb6

12 ответов

24
Лучший ответ

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

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

  • 8
    +1 Согласен. Я занимался VB более 10 лет, и я даже не знал, что вы можете поместить утверждения в одну строку, разделенную точкой с запятой. Я бы не стал этого делать, если бы вертикальные полосы прокрутки на моем компьютере не были сломаны.
17

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

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

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

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

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

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

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

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

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

9

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

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

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

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

8

Мне не следует говорить "никогда не делайте этого", вы должны просто сказать: "Если вы это сделаете, то возможная проблема такова и такая". Тогда просто взвесить плюсы и минусы для себя. Про - краткость/несколько строк кода. Иногда это может помочь читаемости. Например, некоторые люди используют его для объявлений 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:)

  • 0
    +1 за пример :)
5

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

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

 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 =".

  • 2
    Думаете ли вы о человеке, который унаследует ваш код? Считаете ли вы, что я не могу поместить точку останова в IDE VBE на строку msg = "no association", не вызывая режим останова в каждом случае?
  • 2
    Ваш комментарий не имеет никакого значения только в двух случаях, когда я когда-либо размещал две позиции на одной строке.
Показать ещё 8 комментариев
4

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

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

  • 1
    Опять старый вопрос, но так как это новый ответ, я выложу новый комментарий. Я редко использую : в коде, но обнаружил, что это очень полезно для устранения этой ошибки: support.microsoft.com/kb/327244 Я использовал : следующим образом: Me.ComboBox.SelectedItem = Nothing : Me.ComboBox.SelectedItem = Nothing я мог бы поместить это в две строки, но это упростило чтение всех в одну строку, и это имело смысл, так как это было просто повторное утверждение.
4

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

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

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

3

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

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

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

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

  • 2
    Я думаю, что вы можете пойти хуже, по крайней мере, это умещается на экране в одну строку
  • 0
    dilbert.com/strip/1994-06-08 ;)
1

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

Using pro As New Process() : With pro

        ...

    End With
End Using
1

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

Public Class DerivedClass : Inherits BaseClass
   ...
End Class

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

Крис

  • 1
    это конечно vb.net. И я думаю, что у него есть зависть к C #, поэтому Inherits находится на одной линии с классом
-2

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

Вы какой-то раб? Делайте, как хотите. Вы - центр вашей вселенной, а не какой-то незнакомец из 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
'================================================================

Ещё вопросы

Сообщество Overcoder
Наверх
Меню