Является ли плохой практикой использование двоеточий для размещения двух операторов в одной строке в Visual Basic?
Использование двоеточий для размещения двух операторов в одной строке в Visual Basic
Ответ 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
'================================================================