scratch入门之天坑总结
以下都是自己使用中摸索的体验, 并不是官方答案.
而且我认为下列这些坑, 有可能会导致孩子在学习真正的编程语言的时候产生经验冲突. 这些坑总让人感觉scratch可以学但又不能学太多😂
对象与线程
scratch中的角色和背景都相当于对象. 构造新对象的方式, 除了直接静态添加, 也可以动态新增,也就是"克隆"
"当作为克隆体启动"事件,相当于构造函数, 但这个构造函数不能输入形参.
但对象只有私有函数, 没有公共函数.
这些角色和背景中的所有程序,都是从一个事件开始的.每一个事件还相当于启动了一个独立的线程. 所以执行事件中的死循环不会影响其他对象和其他事件代码的执行. 所以可以在对象中死循环用"等待"积木等待一个全局变量.
函数
scratch没有全局函数, 也没有公共函数, 相当于只有私有函数, 而且私有函数只有形参而没有返回值. 造成了返回值的传递和不同对象间传递数据非常依赖全局变量, 或者是消息机制.
构造函数的形参
克隆体一般都需要表现的与原对象不同, 这就要传入形参. 此时又需要一个全局变量传递给克隆体. 等待广播消息是不行的, 因为等待广播消息是一个事件而不是一个语句. 如果循环产生多个克隆体, 由于克隆是异步的, 所以必须要等待克隆体使用了全局变量以后,才能继续克隆, 相当于是要将异步克隆改为类似同步的方式.
异步和同步
scratch中的事件块是异步执行的, 这个自然不用说.
绝大多数语句是同步的. 但有少数语句是异步的, 有的语句同时有异步和同步版本.
"广播"是异步的, 而"广播并等待"是同步的, 并且是等待所有"当接收到消息"事件返回后再继续执行.
"克隆"是异步的. 这算是个天坑, 尤其是在构造克隆体的时候, 通过全局变量给它传递参数.
例如, 在一个循环中创建多个需要不同构造参数的克隆体, 循环"设置全局变量-创建克隆体", 可能在第二次循环中已经修改了全局变量, 而第一次循环中的克隆体还没有创建完毕. 等第一次循环里创建的克隆体应用全局变量的时候, 全局变量可能已经被修改了很多次, 早已不是第一次循环该有的样子了. 我建议通过"等待变量"参数等待全局变量被克隆体使用完毕后给予提示.
列表
第一个坑就是列表从1开始而不是从0开始, 这几乎和所有的编程语言冲突了.
如果需要按列表循环, 并没有一个自动的index, 需要自己设置一个变量并自增循环.
某种程度上, 从1开始循环确实更容易让小朋友理解, 否则如何解释"第0个"其实就是"第1个"? 但这个以后确实会形成一些经验冲突.
产品功能缺失
- Ctrl+S保存, Ctrl+O打开这两个几乎所有软件的基本功能是没有的. 尤其是Ctrl+S, 写程序需要经常保存, 没有这个功能非常不便, 还容易造成程序丢失.
- 保存的时候,每次都是弹出类似另存为的对话框,而不是直接保存到当前文件.
- 关闭软件的时候,每次都提示要不要保存,而不是根据保存情况询问.
产品BUG
- V3.29.1版本, 从菜单第二次打开项目的时候, 可能造成无法输入新建的变量名称.
- 删除某一个变量, 再重新新建一个同名变量时,然后保存->关闭->再打开, 会发现这个变量并没有被新建,连带相关语句都会收到影响, 或者删除或者留空.