Самый сжатый способ, который не упоминается ни в одном из других ответов, вероятно, следующий:
>>> d = {2:3, 1:89, 4:5, 3:0}
>>> dict(sorted(d.items()))
{1: 89, 2: 3, 3: 0, 4: 5}
Нет ничего плохого в использовании двоеточия для объединения операторов. Это действительно зависит от контекста, но до тех пор, пока это не снижает читабельность, в этом нет ничего плохого.
Как правило, я избегаю использования двоеточия для этой цели. Я считаю, что удобнее иметь по одному утверждению в строке. Однако это не проблема двоеточия. Я избегаю того же с точкой с запятой в C # или C ++. Это просто личное предпочтение.
Это хорошая практика при модерации, потому что иногда удобочитаемость повышается за счет объединения двух строк:
, когда строки короткие и тривиальные
Option Compare Database: Option Explicit '' Мой любимый!
rsDataSet.Close: Установить rsDataSet = Nothing
Не делайте этого, если:
If ... Then
, должны оставаться чистыми. Вы будете рады, что не усложнили задачу, когда придет время устанавливать точку останова. В общем, я бы советую не делать этого, так как это делает код более загруженным.
Однако для простых задач в этом нет ничего плохого. Например:
for i = 1 to 10: ProcessFoo(i): next
Я думаю, что такая строка достаточно короткая, чтобы не вызывать путаницу.
Это считается плохой практикой на большинстве сайтов, с которыми я работал. И большинство разработчиков VB, с которыми я работал. И в моей голове. Если я это увижу, я признаю, что почти наверняка бы это изменил. Я говорю «почти», потому что допускаю, что есть возможность найти фрагмент кода, который так выглядел бы лучше. Однако я не ожидаю увидеть это при жизни.
Мне также очень не нравятся однострочные ** If
** s.
Оба, скорее всего, являются пережитком времен мониторов VGA (640x480); в наши дни это не оправдание.
Я пойду на другую сторону. Я не люблю плотных строк кода. Когда строки не объединены, легче просматривать код.
Объединение операторов также упрощает создание длинных функций, которые по-прежнему умещаются на одном экране.
Это не большой грех, просто мне это не нравится.
Мне также не нравится одна строка If операторов.
Я когда-либо использовал его только тогда, когда я закрываю набор записей и устанавливаю переменную в нулевое значение. Я считаю, что одна строка вместо двух дает мне больше строк кода на экране и не ухудшает читабельность.
Я видел, как она использовалась в простых случаях выбора, таких как следующие, но это было бы настолько далеко, насколько я бы 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 =".
Я никогда не видел, чтобы об этом упоминалось в официальном качестве ни в одной из компаний, с которыми я работал. Но я действительно думаю, что чрезмерное использование двоеточий может сделать ваш код менее читаемым и усложнит поддержку.
Я сам иногда использую их, например, при проверке отмены в одном из моих недавних проектов:
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
Лично Я считаю, что это многовато.
Я видел, как она использовалась в объявлениях классов при использовании наследования или реализации интерфейса:
Public Class DerivedClass : Inherits BaseClass
...
End Class
Но, как и другие, я также не рекомендую его использовать.
Крис
Мне не следует говорить «никогда не делайте этого», вы должны просто сказать «Если вы сделаете это, возможны такие-то проблемы». Тогда просто взвесьте для себя все за и против. Плюс краткость / несколько строк кода. Иногда это может улучшить читаемость. Например, некоторые люди используют его для объявлений 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 :)