使用python拓展scratch的能力
本文则旨在阐述,如何用最简单的方式拓展Scratch3.0。无需了解codelab-adapter的插件机制,也无需了解Scratch3.0的插件机制,只需要写一个Python函数,即可为scratch加入新功能。
考虑到多数Scratcher对Python并不熟悉,让他们理解插件的模版代码,从继承一个类开始,接着理解线程机制,有些不近人情。本文将阐述Scratcher如何使用最少的Python代码来扩展他们自己的项目。
设计上的思考
编程风格层面Everything is message
尽可能保持Scratch风格,尽量不改变大家的编程习惯/范式。
基于消息的事件驱动风格是scratch编程的典型风格,继承自smalltalk。
什么是Smalltalk?Smalltalk是一种面向对象的、动态类型的编程语言。Smalltalk由艾伦·凯,Dan Ingalls,Ted Kaehler,Adele Goldberg等于70年代初在Xerox PARC开发。
Smalltalk对其它众多的程序设计语言的产生起到了极大的推动作用,主要有:C++,C#,Objective-C,Actor,Java和Ruby等。90年代的许多软件开发思想得利于Smalltalk,例如设计模式、敏捷编程和代码重构等。
第一代的scratch采用smalltalk的方言squeak构建,所以scratch从smalltalk中继承了很多设计原则。
scratch设计原则1.如果一个系统要服务于创造精神,那么对于一个人来说,它必须是完全可以理解的。
2.系统应该用最少的且不可更改的部件构建; 这些部分应尽可能一般化; 系统的所有部分都应保持在统一的框架内。
3.计算应该被视为可通过发送消息来统一调用的对象的内在功能。
4.语言应围绕一个强大的隐喻设计,这样就可以统一应用于所有领域。
5.用户可以访问的每个组件都应该能够以有意义的方式呈现自己,以便于用户进行观察和操作。
在scratch官方社区中,我们可以看到稍有规模的程序都会用到消息积木。
上图显示的是scratch社区用户创作的最受欢迎的游戏之一:
Bouncy Ninja 2(地址复制黏贴:
https://scratch.mit.edu/projects/227802255/editor) 程序之间的协同通过广播消息来完成。 利用消息实现了程序的解耦。
我们进一步观察,可以发现这个游戏使用了大量的消息:
Scratcher之所以依赖消息机制,其中的原因:
消息机制是Scratch的核心机制。
消息是绝佳的解耦工具,如果你逛一逛Scratch社区,就可以看到人们构建了许多令人惊叹的项目。它们中的许多并不简单,消息是帮助他们克服复杂度的核心工具之一。这个特性继承自smalltalk的设计原则: 计算应该被视为可通过发送消息来统一调用的对象的内在功能。
所以在编程风格层面,希望scratcher在使用Python拓展程序功能时,觉得是顺滑的,不强行要求他们转化范式。
教育层面下边说说教育层面的思考。
我们来讨论下目前这个领域,大家所关心的:如何从图形界面过渡/进阶到代码。
事实上,我不认为这种过渡是必须的。当然我也并不反对从图形界面过渡到代码。如果这种过渡是必要的,我希望它们是渐进的,而不是割裂的,否则就不叫过渡了。初学者熟悉scratch,也喜欢它,我知道大多数使用scratch的孩子,对它的好感大都胜过文本语言。你不必抛弃scratch,如果你需要一些更强大的功能,使用Python去扩展它,这个过程应该很愉快,你写了很少的Python代码,立马就能应用到你喜欢的Scratch项目上,你看到你逐渐能做更多有趣的事,你感到充满乐趣,所学的新知识,立马应用在你感兴趣的项目里。
我们反对割裂式的教学,学习者从scratch切换到Python,很长时间内只能通过print看到输出,没有生动的反馈,于是许多人便对阶段感到沮丧,踏上一条从入门到放弃的路。
学习的过程,有时的确会遇到一些困难,有些困难是固有的,或者如康德所说的它是先天的。另一些则是人为的,教育者或者基础设施建设者应该努力去清理那些人为的困难。
我不喜欢教育者们有时候提到的学习的过程,痛苦必不可少,所以你应当忍受这种宿命论的观点,有时候它只是我们懒惰和无能的借口。
使用
下边我们来演示如何使用它。
在插件目录创建eim_script.py。
ps: 插件目录可以通过 菜单>插件>查看目录 查看:
Mac/Linux用户在:
~/scratch3_adapter/extensions,
windows用户在:C:Users[你的用户名]scratch3_adapterextensions
从一个最简单的例子开始:
def handle(message,logger):return message + ' from script'我们写了一个名叫handle的函数来处理从Scratch EIM插件广播过来的消息。
消息内容在message参数中,logger参数你暂时可以忽略。
这个插件的功能是: 将Scratch广播过来的消息末尾加上from script,返回给Scratch那边。它不具备实际的用途,为了展示原理,它尽可能简单。完成之后启动scratch3-adapter,勾选extension_eim_script插件(在最新的scratch3-adapter版本中,已经内置了这个插件), 即刻生效,可以看到Python对Scratch的扩展已经生效:
每次修改eim_script.py建议重启scratch3-adapter。
旧版本
extension_eim_script已经内置在0.3.0之后的版本中。如果你使用的scratch3-adapter版本低于0.3.0(通过菜单>关于>version查看版本),你需要先下载extension_eim_script插件。
下载插件在scratch3-adapter中下载插件很简单,点击 菜单>插件>下载,弹出输入框,将插件的url链接复制粘贴其中即可。
extension_eim_script插件的链接是: https://github.com/Scratch3Lab/scratch3_adapter_extensions/blob/master/extension_eim_script.py
下载完成之后重启软件,即可看到插件。
所有插件列表在scratch3_adapter_extensions 地址:
https://github.com/Scratch3Lab/codelab_adapter_extensions
--end--
声明:本文章由网友投稿作为教育分享用途,如有侵权原作者可通过邮件及时和我们联系删除:freemanzk@qq.com