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有很多外设时。