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

Самый сжатый способ, который не упоминается ни в одном из других ответов, вероятно, следующий:

>>> d = {2:3, 1:89, 4:5, 3:0}
>>> dict(sorted(d.items()))
{1: 89, 2: 3, 3: 0, 4: 5}
20
задан Peter Mortensen 1 November 2013 в 10:46
поделиться

9 ответов

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

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

22
ответ дан 29 November 2019 в 06:13
поделиться

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

  • когда строки короткие и близкие related
  • , когда строки короткие и тривиальные

     Option Compare Database: Option Explicit '' Мой любимый!
    rsDataSet.Close: Установить rsDataSet = Nothing
    

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

  • это ухудшает читабельность.
  • усложняет отладку. Управляющие структуры, такие как If ... Then , должны оставаться чистыми. Вы будете рады, что не усложнили задачу, когда придет время устанавливать точку останова.
  • это ставит под угрозу будущее редактирование. Часто вы хотите, чтобы разделы были переносными. Перемещение или реструктуризация блока кода легко затрудняется попытками минимизировать ваш код.
20
ответ дан 29 November 2019 в 06:13
поделиться

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

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

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

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

11
ответ дан 29 November 2019 в 06:13
поделиться

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

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

Оба, скорее всего, являются пережитком времен мониторов VGA (640x480); в наши дни это не оправдание.

4
ответ дан 29 November 2019 в 06:13
поделиться

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

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

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

Мне также не нравится одна строка If операторов.

9
ответ дан 29 November 2019 в 06:13
поделиться

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

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

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

4
ответ дан 29 November 2019 в 06:13
поделиться

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

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

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

Лично Я считаю, что это многовато.

3
ответ дан 29 November 2019 в 06:13
поделиться

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

Public Class DerivedClass : Inherits BaseClass
   ...
End Class

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

Крис

0
ответ дан 29 November 2019 в 06:13
поделиться

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

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

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

8
ответ дан 29 November 2019 в 06:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: