昨天在编写针对编程新手的木兰入门时,发觉一个之前没有体验到的好处。简单例子,求和的 Python 代码:
和 = 0
for 数 in range(1, 10):
和 += 数
print(和)
如果在 .py 文件运行,当然没有问题,但如果将上面这段直接拷贝粘贴到命令行下 python 交互环境后回车,就会报错:
>>> 和 = 0
>>> for 数 in range(1, 10):
... 和 += 数
... print(和)
File "<stdin>", line 3
print(和)
^
SyntaxError: invalid syntax
对于编程新手来说,这会是个摸不着头脑的问题,毕竟是正确的 python 代码。
再看木兰的同功能代码:
和 = 0
for 数 in 1..9 {
和 += 数 }
println(和)
后大括号特地未分行,当然分行甚至在{
同一行也没问题。上面代码段整块粘贴到木兰交互环境中运行就可以:
> 和 = 0
> for 数 in 1..9 {
>> 和 += 数 }
> println(和)
45
回头看 python 交互环境,未细究源码,只看行为。在 for 循环内第一句回车后,前面的提示符仍为...
而非>>>
,应该是默认期望下一句仍为循环体内内容:
>>> 和 = 0
>>> for 数 in range(1, 10):
... 和 += 数
...
只有直接回车,循环才被认为结束:
>>> 和 = 0
>>> for 数 in range(1, 10):
... 和 += 数
...
>>>
即便在逐行输入单句时,这种处理方式也很需要适应。复制粘贴时,一旦碰上代码块未用空行分开就会踩雷。这对于时常会想用控制台交互平台尝试一些小代码块的用户来说会带来不便。
而木兰由于语法规定代码块(如循环、条件判断、类型等)起止有明确、不允许省略的字符标志{}等,可以在交互平台中比较方便地实现检测代码块是否结束,从而能更好地支持代码粘贴到交互环境运行这种使用场景。