欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

使用鲁班:让编程变得像拼装玩具一样简单

最编程 2024-08-04 19:34:05
...

鲁班是一个面向部件的编程语言. 鲁班也是一个整合语言或者叫脚本语言.鲁班语言中的很多构筑和搭积木,做家具,造房子非常相似. 所以作者把这个新语言命名为鲁班, 以凸显鲁班建筑工艺和鲁班语言特色的异曲同工之处. 也算是对自己的文化渊源的一种反映和尊重.

有的朋友可能说, 现在脚本语言已经很多, 我们真的需要另一种脚本语言吗? 鲁班的作者确实对脚本语言非常推崇. 因为容易上手, 非专业人士都可以学会. 然而从实践中作者发现, 现有的脚本语言有一个有一个很大的弱点, 就是没有一个适合的部件模型(Component Model). 就象在沙子上做东西, 容易开始, 可做不大. 有朋友可能又指出, 已有面向对象脚本语言, 可用对象模型来组织代码. 对于这点, 作者个人认为, 在脚本语言里构筑对象模型不是脚本语言强项. 因为对象模型对于专业人士都难于把握, 完全超出了一般脚本语言用户的掌握范围. 用脚本语言写对象类型没有优势, 比不过更正式的语言象C++JAVA.

由此来看, 脚本语言要超越写小脚本程序的圈子, 就需要一个适于脚本语言环境的部件模型. 在编程语言光谱上确实存在一个空白地带. 鲁班的发明就是着眼于填补这个空缺.

鲁班首先是一个脚本语言, 易学易用, 无须编译. 而且鲁班是一个更好的脚本语言, 因为它的语法更简洁, 类似于C++/JAVA. 一般编程用户几乎不用学新的东西就可以开始用鲁班写程序.

鲁班超越一般脚本语言之处是鲁班部件模型. 鲁班语言把部件定义为属性构成的对象, 类似于JAVA BEAN的概念. 部件的定义, 归类, 存放及组合是鲁班语言的核心特色. 还有一点和面向对象语言不一样的是, 如果你只是用鲁班写一点小脚本程序, 你可以不用知道什么是鲁班部件. 鲁班把对新用户的要求降到最低.

还有值得一提的是鲁班的部件组合功能. 部件组合是一种全新的编程方法. 传统的编程都是定义代码的执行顺序, 而部件组合定义的是一个模块内部件之间的数据依赖关系, 就象搭积木. 鲁班引进部件组合是因为它简单而直接, 一看即明. 最好的证明是EXCEL. 几乎人人都会用EXCEL. 编写EXCEL实际上就是部件组合. 鲁班是第一个正式支持部件组合的软件编程语言.

鲁班语言是一个以人为中心设计的语言, 希望是更多的人能有效的用计算机做事情, 而且能共享他们的工作成果. 鲁班是一个脚本语言, 可作者希望它能走的更远. 所以也叫它整合语言.

 

顺便说一句, 本书每章开头的引言, 是作者随意摘抄的, 有些是歌词, 有些是有人随意说的话. 和鲁班技术细节没有直接关系. 这些东西很难翻译, 我就不糟蹋别人了. 想看的朋友可以看着玩, 不想看不看就罢了.


  1. 脚本鲁班

 

 

In the beginner's mind there are many possibilities,

 in the expert's mind there are few.
- Shunryu Suzuki, Zen Master

 

这一章讲述基本的鲁班顺序执行语句构造, 包括变量, 常数, 表达式和语句. 看完这一章就可以用鲁班写一般的脚本程序了. 已经掌握C++/JAVA的朋友, 用五分钟就可以看完这章. 因为鲁班的语句和表达式和C++/JAVA基本相似, 需要看的只是鲁班扩展和不同的部分. 而那部分也是很简单, 一看即明的.

 

2.1 第一个鲁班程序

学习一个新的语言的最有效的办法莫过于看看程序例子. 好的语言总是以一个世界, 你好程序例子开始. 鲁班也不例外. 下面是鲁班的世界, 你好程序.

 

            std::println(obj=”Hello, World”);

 

 

把以上代码敲进一个叫helloworld.lbn的文件里. 然后在你的操作系统命令行敲以下命令.

 

            Mycomputer > luban helloworld.lbn

     Hello, world!

 

 

这个鲁班程序有一点象C”HELLOWORLD”程序. 里面代码做的事就是调用一个叫做std::println的鲁班部件, 调用时把字串”Hello, World”设置到一个叫obj的输入属性上. 程序的执行结果是在终端上印出”Hello, World”字串.

 

2.2 鲁班脚本基本结构

鲁班的脚本程序是由一系列的鲁班语句或表达式构成. 这些语句和表达式之间用分号隔开. 换行和空白字符会被忽略. 这样的结构和C++/JAVA是一样的. 以下是一个简单的鲁班脚本程序.

 

 

            X=1;

            Y=2;

            Z=X+Y;

            std::println(obj=Z);

 

 

把以上程序输入到一个叫oneplustwo.lbn的文件里然后在命令行打入以下命令:

 

            Mycomputer > luban oneplustwo.lbn

     3

 

 

从以上程序可以看出鲁班脚本程序的大概样子.

 

2.3 常数, 变量和表达式

鲁班的表达式和C++/JAVA基本一样. 由常数,变量和操作符组成. 以下列举表达式的基本构造. 列举大致按运算的优先级排练.

 

常数本身是一种表达式. 鲁班的常数有如下几种.

            3.1415; 2; “Hello”; ‘a’; ‘/n’;true; false;

变量也是表达式. 鲁班变量起名规则和C语言一样, 如下都是合法的变量名.

            varx; _varx_; v123;

数据类型对象建造及部件建造.

            [ 1,2,3, x, y, z, a+b ];  // 数组建造

            { “one”: 1, “two” : 2 }; // 字典建造

            { “one”, “two” };   //集合建造

            double(“3.1415”);  //双精度浮点数建造

            std::file(mydatafile”, ‘r’);  // 打开文件

            mynamespace::mycomponentX(); //部件建造

            mynamespace::mycomponetX( prp1 = 100 ); // 部件类型调用

容器类型成员访问, 对象成员函数调用, 部件属性访问, 部件调用.

            mymap[“one”]; // 字典查找

            x[1] = y[2]; // 字典或数组成员读取及赋值

            mymap.remove(“one”); // 对象成员函数调用

            linevector = allines.split(‘/n’); //对象成员函数调用, 分解字串

            mycalculator( input1=1.1, input2=2.2); // 部件对象调用

单目操作符运算,

            ++i; --i; i++; i--;   // 操作会改变变量i的值

            y = -x;   // 变量x值不变, 运算结果赋予y

常见算术类操作, 加减乘除及求余数

1+2; 10.0*3.0; 50%3; 50/3; “Hello, “+”world!”;

数据类型检查操作

      objx isa string;     // 检查objx是否字串类型

      typeof(objx) == string;  // 检查objx是否字串类型

相等关系及顺序关系检查

            x == y;  x != y; x > y; x < y; x >= y; x <= y;

逻辑表达式

            true or false; x and y; not true; not a and not b;

三元条件表达式

            x > y ? x: y;

赋值表达式

x = 1.23; x += 1; x[index] = 2; x.property = 3;  x*=2;  x/=3;  x=y=z;

以上表达式中有一些构造包括类型检查和部件调用表达式在以后章节中还会讲述.

 

2.4 鲁班顺序执行语句

鲁班的顺序执行语句和C/C++/JAVA基本一样. 只是加了几个鲁班自己的语句. 以下列举所有的鲁班顺序执行语句.

 

赋值语句: 赋值语句也是表达式, 在此再列为语句.

x = 1; x += 1; x[index] = 2; x.property = 3;  x*=2;  x/=3;  x=y=z=1;

条件语句

            if ( a>b )

 result=a;

条件否则语句

            if ( a>b )

 result = a;

else

result = b;

条件循环语句

            while ( x < 100 ) ++ x;

步进循环语句

            for( i=0; i<100; ++i)

std::console().writeline(vec[i]);

            for(;;); // 死循环

枚举循环语句

            foreach( key, value in themap )

std::console().writeline(key, ‘ ‘, value);

跳出循环语句

            for( i=0; ; i++)

if ( i>100 )  break;

继续循环语句, 跳回循环起始点

            for( i=0; ; i++)

 if ( i<=100 )

 continue;

else

break;

空白语句

            ;

结束语句,终止一个脚本或部件的执行

            finish;

 

 

等待语句: 等待所有启动的线程结束

            wait;

特指等待语句: 等待和等待变量相关的线程结束

            waitfor x,y,z;

撤消语句: 撤消所有启动的线程并等待它们结束

            cancel;

以上线程有关的语句细节在后面有叙述.

 

组语句. 把一个或多个语句用花括号包起来, 就成为一个组语句.

            {  x = 1; y = 2; z = x+y; }

            if ( z == 3 ) { z = z-3; x =0; y =0; }

 

多个属性设置语句, 一次设置一个部件的多个属性值.确具体的细节再部件定义一章还有讲述

             Xcomponent.(prp1=1, prp2=2, prp3=3);

 

注解语句. 鲁班的注解语句与C++/JAVA一样

            //  one comment

            /*  another comment */

 

 

2.5 鲁班数据类型

鲁班语言提供一系列最常用的数据类型给用户. 这些类型包括整数, 双精度浮点数, 字串, 逻辑类型, 字符类型, 数组, 字典, 集合. 以下逐一介绍它们.

 

2.5.1 整数和双精度浮点数

整数和双精度浮点数是两个不同的数据类型. 但是它们可以*混合使用. 运算规则和C语言一样. 整数的类型关键字是int, 浮点数类型关键字是double.

            10/3;                // 结果为整数 3

            10.0/3.0;          //结果为浮点数 3 3.333333…