使用冒号在Visual Basic中将两个语句放在同一行上

21 vb.net vb6 vba

使用冒号在Visual Basic中将两个语句放在同一行上被认为是不好的做法吗?

Jar*_*Par 22

使用冒号组合语句没有任何内在错误.它实际上取决于上下文,但只要不降低可读性,就没有任何问题.

作为一般规则,我为此避免使用冒号.我发现每行有一个语句更具可读性.然而,这不是结肠特定问题.我避免在C#或C++中使用分号进行相同的操作.这只是个人偏好.

  • +1同意.我做了VB超过10年,我甚至不知道*你可以把语句放在用分号分隔的同一行上.除非我的计算机上的垂直滚动条被打破,否则我不会这样做. (8认同)

Sma*_*oli 20

这是一个适度的好习惯,因为有时可读性通过连接两行来增强:

不要这样做:

  • 它伤害了可读性.
  • 它使调试变得复杂.控制结构,如If...Then需要保持清洁.在设定断点时,你会很高兴你保持简单.
  • 它会影响未来的编辑.通常你想保持部分便携.尝试最小化代码很容易阻碍移动或重构代码块.


Ang*_*ker 11

一般来说,我建议反对它,因为它会使代码变得更加繁忙.

但是,对于简单的任务,它没有任何问题.例如:

for i = 1 to 10: ProcessFoo(i): next
Run Code Online (Sandbox Code Playgroud)

我认为像这样的一条线很短,不会引起混淆.


jrc*_*cs3 9

我会接受另一面.我不喜欢密集的代码行.当没有组合线时,更容易浏览代码.

组合语句还可以更轻松地创建仍然适合单个屏幕的长函数.

这不是一个大罪,我只是不喜欢它.

我也不喜欢一行if语句.


Oor*_*ang 8

对我来说,你不应该说"从不这样做",你应该说"如果你这样做,可能的问题是这样的." 然后只为自己权衡利弊.专家简洁/几行代码.有时这有助于提高可读性.例如,有些人用它来做vb.Net声明:

Dim x As Long: x = 1
Run Code Online (Sandbox Code Playgroud)

或等待循环:

Do Until IE.ReadyState = READYSTATE_COMPLETE: DoEvents: Loop
Run Code Online (Sandbox Code Playgroud)

但显然你也可以对某人做些粗暴的事情:

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
Run Code Online (Sandbox Code Playgroud)

您可能不想使用此方法的另一个实际原因是断点.断点只能由该行设置.所以,如果你在同一条线上执行了几件事,你就无法隔离第二件事.它将在第一个声明中停止.(这也是一些人不喜欢单行ifs的原因之一.)这只会使调试变得复杂一点.

出于这个原因,我通常不会在生产代码中使用冒号.但是,我确实使用它们来改善我在论坛和其他地方发布的"复制/粘贴"代码的简洁性.因人而异:)


Dan*_*son 5

我意识到这是一个非常古老的问题,但这是我在谷歌搜索中的第一个结果,所以我希望我可以原谅这里的鸣叫.

有一种情况(这正是我实际上在这里引起的),这种方法不仅有用,它是实现所需结果的唯一方法:立即窗口.您想要在立即窗口中执行的任何代码都必须在一行上.因此,为了在立即窗口中使用任何形式的Do,Case,For,While或With,您将需要使用冒号.