Better Blocks(by Lounsen)

Scratch 原版

机制问题(也许不是问题)

函数:

自定义函数无**“返回值”**功能,递归调用不直观。也许是怕栈溢出?

有返回值设计的Tynker栈溢出会卡死然后闪退。

这样不会崩,一段时间后会说infinity

消息:

无指向单个对象的消息,且消息不能传递数据。

在Tynker,Snap!中有**“收到的值”**模块,可以让对象间的通信更加强大。

克隆:

克隆体的私有变量没有更直观的方式观察,只能让演员“说”。说的气泡会因为所处位置不同发生改变,相互遮挡。

权宜之计可参考Tynker中的画笔的tag功能,可以在对象上写出数字或字符。

广播

广播的解释方式模糊,广播按照数字解释可能会有很多好玩的东西,但也可能引起混乱

提升易用性

Obj.attribute

在Scratch中无法复现Etoys的方向盘小车,因为“小车”不能直接读取“方向盘 . 角度”。

使用全局变量传递就失去了“面向对象”的内涵。

希望能有一种 [ ].[ ] 的模块,用来读取其他对象的私有变量。两个位置都是选单式的,自动列出其他的对象以及它们的私有变量。

更进一步,如果能使用“角色名+编号”的模式定位克隆体,那么能做的东西会更多,尤其是进行模拟任务时。但担心ceiling 不宜过高。

列表的一次性赋值

列表增加“东西”的指令只能单次赋值,不能一次性初始化整个列表。虽然有“导入”这种替代性操作,但是破坏了程序的完整性。

或者增加**“从文件导入列表”**的指令,要求被导入文件与.sb文件在同一目录下,仅需填写文件名称。

“说”的一次性输出

做类似madlib或excuse generator的项目会很痛苦,需要不停地使用“连接apple和banna”。Tynker中有+ - 调节输出的段数。

Obj.method

在一个对象中调用其他对象中的方法,形式也是 [ ].[ ] ……我并没有用它作过什么项目,也想不出这有什么用,只是用过Tynker中这样的功能。

当时我在A对象中定义forward和left,在B对象中调用A.forward和A.left用来对照讲解Python Turtle。

Adapter

提升易用性

调用Python函数时经常需要传递变量,使用连接字符串block不够直观,希望语法糖有()()()这样可以增减空位的连接符,这样能增加程序的可读性。

其他

不能暂存代码,代码也不能跨项目使用······这是老问题了,我自己的感觉是这不利于学生做更复杂的东西,尤其是Adapter有很多外设时。