分享

可视语言Scratch:想象、编程、共享

 nxhujiee 2010-10-29

可视语言Scratch:想象、编程、共享 收藏

近日从网上看到一款称为Scratch的语言,感觉它是属于很久以前了解过的可视语言(Visual Language)。可视编程(Visual Programming)众所周知,类似VBDelphi等都可归入可视编程范畴,但完全的可视编程应基于可视语言,而非传统中的程序设计语言。

    言归正传,我们先上官方网站看看,网址是http://scratch.

         

        SCRATCH下面的三个关键词:imagineprogramshare,很好地点出了它的用途:你先想象你要做的、然后把它变成程序、最后共享给大家看。

下面三幅图片组成的流程图,基本上描绘了Scratch的工作过程。首先看第一幅图,它是把blocks(积木块)snap到一起,就象玩乐高玩具一样。事实上这就是编程!积木块相当于语句,snap到一起就编成了程序,图形化的语句和图形化的操纵过程,这便是可视语言和可视编程。

然后第二幅图表示程序的运行画面,这是一个以精灵为主角的表演舞台,演出的正是你想象中的故事,那只猫就是Scratch默认的精灵,你完全可以创作你自己的精灵。

最后一幅图片上的地球,代表共享。共享是Scratch的核心思想之一,事实上Scratch本身就是一个开源的软件,你可以随意下载它的源代码,不过要看懂可不容易哦,因为它是用smalltalk-80语言写的!

接下来的一幅一幅图片,正是世界各地用户上传的作品。如果你时不时刷新一下页面,就会发现这些作品画面在不断变化、更新,这足以证明该软件的用户群已相当庞大,上传的作品源源不断。

准备工具

好了,我们还是来体验一下这个工具吧。哪怕它是个玩具,我们也先来玩一把,编程的日子实在太枯燥了。

在首页上右面就有Download Scratch,点进去下载一个Windows下的执行文件就可以了,安装实在是简单,一路下去就OK

现在我们启动这个编程工具,主界面如下:

从界面看,它可不象通常的商业软件样子,事实上它是一款教育软件,用来帮助8岁以上年轻人开发学习技能。看来学习是最枯燥的,所以人家搞出这种好玩的工具来帮助学习。那么对我等专业程序员来说,这玩具还玩儿么?不管怎么,它可是MIT媒体实验室的成果,而且是受美国NSF资助的。

我们观察一下主界面上布局,发现左边是语句,分为很多类,比如Motion(控制精灵运动)、Control(控制类,包括传统语言中的条件、循环)。中间就是程序区了,它叫Scripts,而不称Program,真有自知之明。右边应该是运行结果显示区,也就是精灵表演的舞台。

想象

既然它是一种新的语言,那么它的编程能力如何呢?显然,我们不能把它和C/C++Java等相比,那是通用的程序设计语言。关于可视语言,大多应该是面向专门领域的,象很久以前研究过的AVSKhoros就是面向图像处理和科学可视化的数据流可视语言。

不过我们还是出个题目来检验一下Scratch的能力,那就是从1-100中找出所有素数来,这个程序实在简单,两个循环就可以搞定,我们想看到的是Scratch如果能够编制出来,会是什么样子?

为了少走弯路,毕竟Scratch问世不久,还在更新发展阶段,不能指望过高,我们先用传统语言写出这个程序来做参考。因为手上只有PHP环境,那就用PHP写吧:

<?php

echo '2<br>';

for($num=3;$num<100;$num++)

{

       $isprime=1;

    for($i=2;$i<sqrt($num)+1;$i++)

    {

             if($num%$i==0)

             {

                   $isprime=0;

                   break;

             }

    }

    if($isprime==1)echo $num.'<br>';

}

?>

编程

我们要编程,首先想到要定义变量,那么Scratch中果然有Variables这个类,其中可以Make一个变量,从而产生这个变量和两个语句(一个是设置值,另一个是改变值),不过我们发现它没有数组,而且变量值除了是数字外,并不支持字符串,好在我们的测试程序只涉及到数字。

程序的核心是两重循环,我们发现Scratchforeach循环后面不能再接语句,因为它的图标下边缘是平的,不能snap上去其它积木块。幸好它还有repeat until语句可以下接其它语句,所以这个问题也可以解决。

关于输出,比如象PHP中的echo,开始为Scratch中没有对应的语句发愁。原来打算定义一个结果变量放到舞台上,在它上面显示结果,由于没有数组,那就等待一定时间显示一个结果(无意中变成了动画!)。后来发现一个更好的方式,那就是使用Scratchsay语句,让那个小精灵在舞台上say出结果,岂不妙哉!

最后要说明的是Scratch中没有break跳转语句,所以不能跳出循环省时间了,程序运行效率会受到一定影响。

为了直观起见,考虑以上Scratch语言情况,我们将测试程序重新编写,并根据它搭建出了Scratch的脚本程序,整个过程简单而Happy,下面就是两种语言所写程序的对照,基本上是一一对应。

    原来可视语言Scratch编写的程序就是这个模样,真的象是用乐高拼接的玩具作品。

共享

下面我们可以运行一下这个程序,显然精灵cat不断say出了正确的结果:

独乐乐不如众乐乐,我们在Scratch主界面上方菜单条中发现Share!,正是让你共享你的作品,这是Internet和开源时代的精神。你可以点击进去,共享上传,当然你首先要在它的官方网站上注册一个用户名。

 

共享上传后,我们发现在网页上也能运行,而且在浏览器状态栏中显示小应用程序ScratchApplet启动,莫非它用Java Applet制作了一个解析器来解析Scratch作品(其作品文件扩展名是sb,老外这不是骂人吧)。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多