这是一段有趣的代码,我的团队成员正在讨论......
Dim fred As Integer
If True Then fred = 5 : fred = 3 : fred = 6 Else fred = 4 : fred = 2 : fred = 1
执行上面的代码片段后, fred 的值是多少?
尽量不要欺骗和调试代码。
这是一个非常人为的代码示例,最初是作为使用带有If语句的冒号的示例,但后来有人决定自己为 fred 提供结果。
更新: 我通常不会编写这样的代码,这个代码片段仅作为示例。碰巧的是,这个问题起源于一个涉及为我们团队创建编码标准文档的讨论。
答案 0 :(得分:16)
我假设你的意思是VB.Net。
根据VB语言规范中的语法,您可以在这里阅读:
结果应为“6”。
这是因为“line if statement”的语法是:
If BooleanExpression Then Statements [ Else Statements ] StatementTerminator
和“statements”定义为
Statements ::=
[ Statement ] |
Statements : [ Statement ]
修改强> 我想请注意,调试代码不是“作弊”。
我曾经在微软的VB编译团队工作。
有时候规范是模棱两可的,或者与我们实际发货时的情况不符。在其中一些案例中,解决方案(我们修复它的方法)始终基于“嗯......编译器现在做了什么”。
有时我们会更改编译器,有时我们会更改规范。
但是,在做出决定之前,我们总是会运行编译器来查看它实际上做了什么。
所以...调试代码是弄清楚它的作用的重要部分......
答案 1 :(得分:3)
我暂时没有广泛使用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_something
和do_other_thing
在condition
为真时执行,但实际上,do_other_thing
始终执行。
最好尝试遵循编码风格,使代码的意图更明显,更少暧昧。
答案 2 :(得分:2)
最终结果是6.
现在真正的问题是:你是如何进入我的回购的?
: - )
答案 3 :(得分:0)
只是一个猜测
fred = 6因为你可以在由冒号分隔的同一行上有多个语句。
不确定“其他”是否合法(即可编辑)
恕我直言,应选择更好的编码风格:
if (condition) then
statement
statement
else
statement
statement
end if
答案 4 :(得分:0)
在真正古老的BASIC方言中,唯一可以跟随“THEN”的是行号。许多方言通过允许代码遵循“那样”来改进;在解析过“THEN”之后,如果指示的条件为假,它们将跳到下一行,或者继续当前行。进一步的方言增加了跳到行尾或“ELSE”的能力,以先到者为准;尝试执行“ELSE”语句将跳到行尾。
当引入QuickBasic时,它增加了对多行if / then / else块的支持,但仍然支持旧式方法。 Visual Basic紧随其后,vb.net延续了传统。