Является ли плохой практикой использование двоеточий для размещения двух операторов в одной строке в Visual Basic?
Нет ничего неправильного в использовании двоеточия для объединения операторов. Это действительно зависит от контекста, но пока это не уменьшает читаемость, в этом нет ничего плохого.
Как правило, я не использую двоеточие для этой цели. Я считаю более удобочитаемым иметь один оператор в строке. Однако это не проблема с двоеточием. Я не делаю то же самое с точкой с запятой на С# или С++. Это просто личное предпочтение.
Это хорошая практика в модерации, потому что иногда читаемость улучшается путем объединения двух строк:
когда строки короткие и тривиальные
Option Compare Database: Option Explicit ''My favorite!
rsDataSet.Close: Set rsDataSet= Nothing
Не делайте этого, если:
If...Then
, должны оставаться чистыми. Вы будете рады, что сохранили это просто, когда пришло время установить точку останова.В общем, я бы посоветовал это сделать, так как это делает более загруженный код.
Однако для простых задач в этом нет ничего плохого. Например:
for i = 1 to 10: ProcessFoo(i): next
Я думаю, что такая строка достаточно короткая, чтобы не вызвать путаницу.
Я возьму другую сторону. Мне не нравятся плотные строки кода. Легче скомпилировать код, когда линии не объединены.
Сочетание операторов также упрощает создание длинных функций, которые по-прежнему подходят для одного экрана.
Это не главный грех, мне это просто не нравится.
Мне также не нравится одна строка Если.
Мне не следует говорить "никогда не делайте этого", вы должны просто сказать: "Если вы это сделаете, то возможная проблема такова и такая". Тогда просто взвесить плюсы и минусы для себя. Про - краткость/несколько строк кода. Иногда это может помочь читаемости. Например, некоторые люди используют его для объявлений 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:)
Я когда-либо использовал его, когда я собираю набор записей и не изменяю переменную. Я считаю, что одна строка вместо двух дает мне больше строк кода на экране и не умаляет читаемости.
Я видел, что он использовался в простых случаях выбора, таких как следующие, но это было бы насколько я мог бы пойти.
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 =".
Я понимаю, что это очень старый вопрос, но это был первый результат в моем поиске Google, поэтому я надеюсь, что меня могут простить за то, что он здесь.
Есть одна ситуация (именно то, что привело меня на самом деле), в которой этот подход не только полезен, но и единственный способ добиться желаемого результата: окно Immediate. Любой код, который вы хотите выполнить в окне Immediate, должен находиться в одной строке. Поэтому, чтобы использовать любую форму Do, Case, For, While или With в окне Immediate, вам нужно будет использовать двоеточия.
:
в коде, но обнаружил, что это очень полезно для устранения этой ошибки: support.microsoft.com/kb/327244 Я использовал :
следующим образом: Me.ComboBox.SelectedItem = Nothing : Me.ComboBox.SelectedItem = Nothing
я мог бы поместить это в две строки, но это упростило чтение всех в одну строку, и это имело смысл, так как это было просто повторное утверждение.
Это считается плохой практикой на большинстве сайтов, на которых я работал. И большинством разработчиков VB, с которыми я работал. И в моей голове. Если я это увижу, я признаю, что почти наверняка изменил бы это. Я говорю "почти", потому что признаю, что я мог найти код, который выглядел бы лучше. Я не ожидаю увидеть его в своей жизни.
Мне также очень не нравится однострочный ** If
** s.
Оба наиболее вероятны похмелья со времен мониторов VGA (640x480); что в наши дни нет оправдания.
Я никогда не видел, чтобы это упоминалось в официальном качестве в любой из компаний, с которыми я работал. Но я действительно думаю, что использование двоеточий чрезмерно может привести к тому, что ваш код станет менее читабельным и будет больнее поддерживать.
Я обычно использую их сам по себе, например, при проверке отмены в одном из моих последних проектов:
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
Лично я считаю, что это было немного.
Мне нравится этот
Using pro As New Process() : With pro
...
End With
End Using
Я видел, как он использовался в объявлениях классов при использовании наследования или реализации интерфейса:
Public Class DerivedClass : Inherits BaseClass
...
End Class
Но, как и другие, я также препятствую его использованию.
Крис
Ответ на вопрос № Нет. Все, что находится за пределами Нет, является чисто субъективным и расточительным, независимо от ответа за пределами простого номера. Ниже приведена моя трата печатания.
Вы какой-то раб? Делайте, как хотите. Вы - центр вашей вселенной, а не какой-то незнакомец из 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
'================================================================