Vb.net ';如果';语句和冒号

Vb.net ';如果';语句和冒号,vb.net,if-statement,colon,Vb.net,If Statement,Colon,这是一段有趣的代码,我的团队成员刚刚对它进行了一次稍微激烈的讨论 Dim fred As Integer If True Then fred = 5 : fred = 3 : fred = 6 Else fred = 4 : fred = 2 : fred = 1 执行上述代码段后,fred的值是多少 尽量不要欺骗和调试代码 这是一个精心设计的代码示例,一开始是将冒号与If语句一起使用的示例,但后来有人决定自行为fred提供一个结果 更新: 我通常不会编写这样的代码,这段代码只是作为

这是一段有趣的代码,我的团队成员刚刚对它进行了一次稍微激烈的讨论

  Dim fred As Integer

  If True Then fred = 5 : fred = 3 : fred = 6 Else fred = 4 : fred = 2 : fred = 1
执行上述代码段后,fred的值是多少

尽量不要欺骗和调试代码

这是一个精心设计的代码示例,一开始是将冒号与If语句一起使用的示例,但后来有人决定自行为fred提供一个结果

更新: 我通常不会编写这样的代码,这段代码只是作为一个示例。碰巧的是,这个问题起源于一次讨论,涉及为我们的团队创建一个编码标准文档。

只是一个猜测

fred=6,因为可以在同一行上有多个语句,它们之间用冒号分隔

不确定“else”是否合法(即可编译)

IMHO应选择更好的编码风格:


if (condition) then
  statement
  statement
else
  statement
  statement
end if

我想你指的是VB.Net

根据VB语言规范中的语法,您可以在此处阅读:

结果应该是“6”

这是因为“line if语句”的语法是:

“声明”定义为:

Statements  ::=
[  Statement  ]  |
Statements  :  [  Statement  ]
编辑: 我想指出的是,调试代码并不是“作弊”

我曾经在微软的VB编译器团队工作

有时规范模棱两可,或者与我们实际提供的不匹配。在一些情况下,解决方案(我们所做的修复工作)总是基于“嗯……编译器现在做什么”

有时我们会更改编译器,有时我们会更改规范

然而,在我们做出决定之前,我们总是运行编译器来查看它实际做了什么


所以。。。调试代码是弄清它的功能的一个重要部分…

我已经有一段时间没有广泛使用BASIC了,所以这只是一个猜测,但我认为fred是
6

坦率地说,代码不是很可读。我觉得,通过不将所有内容都放在一行中并使用缩进,代码将更具可读性:

Dim fred As Integer

If True Then
    fred = 5
    fred = 3
    fred = 6
Else
    fred = 4
    fred = 2
    fred = 1
End If
如果我没有弄错的话,我相信这是等价的代码

但是,如果代码不是等价的,这就引出了另一个问题:原始代码在某种程度上是“棘手的”,它似乎在说的并不是真正发生的事情。与C风格语言中的陷阱类似:

if (condition)
    do_something();
    do_other_thing();
代码似乎暗示当
条件
为真时执行
do\u something
do\u other\u thing
,但实际上总是执行
do\u other\u thing

最好坚持编码风格,使代码的意图更加明显,不那么模棱两可。

最终结果是6。
现在真正的问题是:你是如何参与我的回购的?

:-)

在非常古老的基本方言中,“THEN”后面只能跟一个行号。许多方言通过允许代码跟随“THEN”来改进这一点;在解析完“THEN”之后,如果指示的条件为false,则它们将跳到下一行,否则继续当前行。进一步的方言增加了跳到行尾或“ELSE”的能力,以先到者为准;尝试执行“ELSE”语句将跳到行末


当引入QuickBasic时,它增加了对多行if/then/else块的支持,但保留了对旧式方法的支持。Visual Basic紧随其后,vb.net延续了这一传统。

“调试”->“调试”。“vb.net”->“vb.net”(参考)。为了澄清这一点,冒号运算符只允许您在一行上组合多个语句。这与在连续行上执行语句相同。
if (condition)
    do_something();
    do_other_thing();