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();