程序人生 - 开发程序不写代码,而是靠拼图?

简介: 程序人生 - 开发程序不写代码,而是靠拼图?


【导语】:Blockly 是 Google 开源的基于 web 的可视化程序编辑器,用户可以将一些定义好的图形块拼接在一起,用来构建应用程序。

简介

Blockly 是一个向 Web 和移动应用程序添加可视化代码编辑器的库,块之间使用互锁的图形块来表示代码,如变量,逻辑表达式,循环等。该编辑器将代码表示为一个个的图形块,通过图形块之间的连接保证语法的正确性,同时支持自定义块以连接到应用程序中。

image.png从用户的角度看,Blockly 是一种直观。可视化的代码构建方式,对于开发人员来说,Blockly 是一种现成的 UI,用于创建一种可视化语言,该语言可以生成语法正确的用户代码。目前支持JS、Python、PHP、Lua、Dart。

它是一个纯 JavaScript 库,不依赖于服务端,与主流浏览器兼容,包括Chrome、Firefox、Safari、Opera和IE(IE11),并且支持定制和扩展。

Blockly 具有以下特点和优势:

  • 可导出代码。用户可以将基于块的程序提取导出,并用于自己的文本编程中。
  • 开源。Blockly的所有内容都是开放的。
  • 可扩展。支持自定义块或删除不需要的块和功能来进行功能调整定制。
  • 功能强大。可以用来执行计算复杂的编程任务,如计算标准差。
  • 国际化。目前已经被翻译成40多种语言。
  • 其他类似的工具:Scratch Blocks、PXT、Droplet、Snap。

解决 Blockly Games 的迷宫问题的例子:

image.png项目地址:

https://github.com/google/blockly

简单使用

下载安装方法很简单,使用npm直接安装即可:

npm install blockly

Blockly工具箱

工具箱是用户可以从中创建新块的侧边菜单,使用XML或JSON指定工具箱的结构,并在注入页面后被传递给Blockly。

XML格式:

<xmlid="toolbox"style="display: none"><categoryname="Logic"colour="210">...</category><categoryname="Loops"colour="120">...</category><categoryname="Math"colour="230">...</category><categoryname="Colour"colour="20">...</category><categoryname="Variables"colour="330"custom="VARIABLE"></category><categoryname="Functions"colour="290"custom="PROCEDURE"></category></xml>

JSON格式:

{ 
"contents": [ 
{ 
"kind": "category", 
"name": "Logic", 
"colour": "210"}, 
{ 
"kind": "category", 
"name": "Loops", 
"colour": "120"} 
] 
} 

效果如下

image.png

创建固定大小的Blockly工作区

引入Blockly库和用户语言集

<scriptsrc="blockly_compressed.js"></script><scriptsrc="blocks_compressed.js"></script><scriptsrc="msg/js/en.js"></script>

添加空白div元素

<divid="blocklyDiv"style="height: 480px; width: 600px;"></div>

添加工具箱

<xmlid="toolbox"style="display: none"><blocktype="controls_if"></block><blocktype="controls_repeat_ext"></block><blocktype="logic_compare"></block><blocktype="math_number"></block><blocktype="math_arithmetic"></block><blocktype="text"></block><blocktype="text_print"></block></xml>

执行以下代码将Blockly注入到div中

<script>varworkspace=Blockly.inject('blocklyDiv', 
{toolbox: document.getElementById('toolbox')}); 
</script>

效果如下

image.png

代码生成器

确认所需的语言生成器,引入不同的库文件

<scriptsrc="javascript_compressed.js"></script><scriptsrc="python_compressed.js"></script><scriptsrc="php_compressed.js"></script><scriptsrc="lua_compressed.js"></script><scriptsrc="dart_compressed.js"></script>

语言生成器库要紧接着blockly_compressed.js引入

<scriptsrc="blockly_compressed.js"></script><scriptsrc="javascript_compressed.js"></script>

导出代码

varcode=Blockly.JavaScript.workspaceToCode(workspace); 

实时生成。生成代码的效率非常高,频繁调用不会有什么大问题,可以通过向Blockly的change事件添加监听器来实时生成和显示代码

functionmyUpdateFunction(event) { 
varcode=Blockly.JavaScript.workspaceToCode(workspace); 
document.getElementById('textarea').value=code; 
} 
workspace.addChangeListener(myUpdateFunction); 

效果如下

image.png

image.png

创建自定义块

Blockly拥有大量预定义的块,从数学函数导循环结构等应有尽有。但是有时候我们仍然需要自定义块以符合我们个性化的需求。在通常情况下,自定义块最快的方法就是找到一个最符合需求并且已经存在的块,在已有基础上对其进行修改。

小结

以上只是对 Blockly 基础和核心的功能做简要介绍,更详细的文档请参考官方网站。

https://developers.google.com/blockly/

目录
相关文章
|
6月前
|
人工智能 开发者 UED
Devchat究竟好用在那些地方呢?
Devchat究竟好用在那些地方呢?
65 0
|
9月前
|
新零售 移动开发 JavaScript
分享74个Java源代码总有一个是你想要的
分享74个Java源代码总有一个是你想要的
93 0
每次都要写一堆样式代码?试试ViewModifier建立统一的样式规范吧
每次都要写一堆样式代码?试试ViewModifier建立统一的样式规范吧
92 1
《C++避坑神器·十六》函数默认参数和占位参数
《C++避坑神器·十六》函数默认参数和占位参数
77 0
EasyX基础内容(和易错的地方)(一)
注意代码里面的文字,是易错点
186 0
EasyX基础内容(和易错的地方)(二)
EasyX基础内容(和易错的地方)
286 0
|
Java Maven
编写一个 spootboot 程序,有二个方法,一个问早上好,一个说再见
编写一个 spootboot 程序,有二个方法,一个问早上好,一个说再见
|
编译器
为何代码没错,却出不来结果,你可能...
为何代码没错,却出不来结果,你可能...
143 0
为何代码没错,却出不来结果,你可能...
|
JavaScript 前端开发
我输入,你生成代码,手写代码生成
我输入,你生成代码,手写代码生成
185 0
我输入,你生成代码,手写代码生成
千万别再一直无脑使用ES6的箭头函数了,它虽然很有用但并不是万能的
相信很多小伙伴自从知道了ES6的箭头函数以后,都疯狂得使用,渐渐的淡忘了普通函数的使用。不过确实,箭头函数看起来比较简洁,用起来也舒服,不过它的出现是为了解决某一部分问题的,并不是用来替代普通函数的,所以我们不能在每一个地方都使用箭头函数
162 0
千万别再一直无脑使用ES6的箭头函数了,它虽然很有用但并不是万能的