第 1 分钟:序曲
只有十分钟,时间紧迫,让我们立刻开始,不多说一句废话(这一句话本身算不算废话?哈哈)。
其实用不着那么紧张,以人均每分钟阅读300字计算,10分钟足以读完3000字。况且我也不打算写那么长,因为还要给亲爱的读者留足思考时间。
本文作为十分钟入门教程,无法面面俱到,只能重点介绍初学者着重关注、关心或感兴趣的部分。本文的主要目的是:让读者在很短的时间内对“易语言.飞扬”有一个大概的了解和感性的认识。如果想获取更深入、更详尽、更权威、更条理、更富逻辑性(或者更抽象、更死板?)的资料,请去拜读易语言官方提供的《“易语言.飞扬”白皮书》——这本书写的很好!本文大量参考该白皮书。
(在本文中,我偶尔会把“易语言.飞扬”简称为EF,EF是其英文名称。)
第 2 分钟:“易语言.飞扬”初相识
先通过简单几句话,了解一下EF大概:
- 完全面向对象,具有类和接口的完整概念(从现在开始忘掉结构化编程吧)
- 具有自动垃圾回收机制(你只管创建对象,而不必自己释放,轻松多了)
- 源代码将被编译为本地机器码,程序具有很高的执行效率(当然还是比不上C语言)
- 同一套源代码,可以被编译为多个操作系统(Windows/Linux/...)下的可执行文件,这是其跨平台机制
- 可将源代码编译为易语言类库,以达到代码复用。此外,还可以使用C/C++开发易语言“本地类库”。开发类库非常轻松。
- 有一个“系统”类库(类似于原易语言中的“核心支持库”)为程序提供最核心支持,是程序运行所必需的,其文件大小不足300K,小巧玲珑。
- 有一个跨平台的图形用户界面(GUI)类库,基于wxWidgets,目前还不太成熟。
- 目前各方面的类库都非常缺乏,不过时间会完善一切
- 正在开发一个包括“可视化界面设计”在内的完善的集成开发环境(IDE),其大部分代码将使用飞扬易语言自身编写。(暂时先用文本编辑器写程序吧,呵呵,推荐emEdit,对汉字的语法高亮支持比较好)
- 飞扬易语言有不少特色语法,如“友好名称(类自然语言编程)”、“三联判断式”、“多返回值”、“双向赋值”、“属性表”等等。
我想有必要再强调一遍:“易语言.飞扬”跟原来的易语言(1.x - 4.x)是完全不同的两个编程语言(如果非要找出相同点话,它们都是易语言公司的产品,作者都是吴涛——“易语言之父”)。前者在编程理念上要先进许多,是未来发展的趋势;后者在编程资源上更具优势,是已经逐渐成熟的实用产品。
第 3 分钟:第一个程序
公开类启动类
{
公开静态启动()
{
控制台.输出行("祖国您好!");
}
}
请将以上代码保存为纯文本文件 hello.ef,注意编码格式必须是Unicode(如UTF-8)。
编译命令行:
ec hello.ef -ecl_name="程序" -starter_cls="启动类" -out_mode=runable -out=hello.exe
以上命令行将编译生成 hello.exe 文件,要执行此程序,请确保EF系统类库文件“系统.ncl”在当前目录下。
hello.exe 的执行结果是在屏幕上输出:祖国您好!
还记得吗?吴涛教给我们的第一个易语言(旧版)程序也是“祖国您好!”。许多人喜欢写的“Hello world”,不过是一句淡淡的问候而已,哪象“祖国您好!”这样饱含深情?中国永远不缺少国际主义者,但我们亟需的是民族主义者!
(亲爱的朋友,如果您只有三分钟的时间,现在可以回去工作或休息了。但是我诚挚地邀请您在百忙之中仍然抽出七分钟时间来继续读完本文!)
第 4 分钟:第一个类库
把上面“第一个程序”的源代码文件拿过来,不做任何改动,就可以把它编译为EF类库。
编译命令行:
ec hello.ef -out_mode=ecl -ecl_name="liigo"
其中,“-out_mode=ecl”表示编译类库(而不可执行文件), “-ecl_name="liigo"”指定的编译后的类库名称(请您务必把其中的“liigo”替换成您自己的名字,因为这是您自己编译的第一个EF类库啊,很有纪念意义呀)。
执行上面的命令行,将编译出类库文件“liigo.ecl”(如果您已经把“liigo”替换为您的名字“张三”,那么生成的文件就是“张三.ecl”)。“.ecl”是EF类库的固定后缀名,其含义是“EF Class Library”(EF类库)。
现在知道了吧,写类库跟写程序一样简单啊。
要使用编译后的类库,需注意两点:1、“引入”该类库;2、确保此类库位于系统环境变量“ECLS_PATHS”所指定的目录中。
第 5 分钟:猜数字游戏
“猜数字”这个小游戏实在是非常非常非常经典。通过这个小小的游戏源代码,我们不仅可以学到“易语言.飞扬”的基本语法(定义类、定义类方法、定义变量、如果、循环、方法调用……),还可以充分领略到面向对象的编程思想。
接下来的三分钟里,我们的主题就是它了!第 5 分钟,请您把它编译成可执行文件(编译方式见下文),自己玩游戏吧;第 6 分钟,我将分别解释其中涉及的EF基本语法;第 7 分钟,我将讲解其中的面向对象思想。
公开类启动类//第1行
{
公开静态启动()//第3行
{
猜数字猜=创建猜数字();//第5行
//猜数字猜=创建全自动猜数字();
猜.猜();//第7行
}
}
类猜数字
{
私有整数内定数字=66;//TODO:随机选择一个数//第13行
公开猜()
{
循环(猜数字()==假)//第17行
{
}
}
私有逻辑猜数字()
{
控制台.输出行("请猜1-100中的一个数:");
整数数=获取数字();
控制台.输出(数);
如果(数==内定数字)//第28行
{
控制台.输出行("猜对了,恭喜!!");
返回真;
}
如果(数>内定数字)//第34行
控制台.输出行("太大了,再来一次。 ");
否则
控制台.输出行("太小了,再来一次。 ");
返回假;//第39行
}
扩展整数获取数字()
{
返回控制台.输入整数();
}
}
类全自动猜数字<基类=猜数字>//第49行
{
整数当前数字=0;
扩展整数获取数字()
{
当前数字++;//第55行
返回当前数字;
}
}
编译方法:将以上代码存为“猜数字.ef”文件(编码为UTF-8),然后执行以下命令行:
ec 猜数字.ef -ecl_name="程序" -starter_cls="启动类" -out_mode=runable -out=猜数字.exe
第 6 分钟:基本语法
第 1 行,定义类,“公开”“类”为关键字(注:“公开”“扩展”“私有”“静态”等在白皮书中被称为属性,其实与关键字等同,下面不再明确区分);“//”为注释的开始,直至本行结束(另一种多行注释形式是“/* ... */”)
第 3 行,定义类成员方法“启动()”,其含义等同于C/C++或Java中的“main()”,或C#中的“Main()”
第 5 行,定义类型为“猜数字”的变量“猜”,创建类型为“猜数字”的对象,并将创建后的对象赋值给变量“猜”(即变量“猜”引用了该对象)
第 7 行,调用“猜”(严格的说是“变量‘猜’所引用的对象”)的成员方法“猜()”
第 13 行,定义一个“私有”的、数据类型为“整数”的类成员变量“内定数字”,并指定初始值为66
第 17 行,“循环”语句,只要小括号内的条件(“猜数字()”返回值为“假”)成立,就循环执行花括号中的代码,直至小括号内的条件不成立时结束循环。“循环”等同于C/C++/Java/C#中的“while”
第 28 行,“如果”语句,判断两个变量“数”和“内定数字”的值是否相等,相等则执行后面花括号中的代码
第 34 行,“如果 - 否则”语句,判断变量“数”的值是否大于“内定数字”的值,大于则执行第35行,否则执行第37行
第 39 行,“返回”语句,结束本方法,并返回相应的值(此处为“假”)
第 49 行,定义一个类“全自动猜数字”,并指定其“基类”为“猜数字”
第 55 行,将变量“当前数字”的值自增1,即在原有值的基础上加1
第 7 分钟:面向对象
现实世界是由万事万物(对象)组成的。在程序中以对象的概念抽象地描述和表达现实世界中的万事万物,这就是面向对象的设计思想。
基于前面的“猜数字”源代码,这里简单讲一下面向对象中的“封装”“继承”和“多态”的概念。
看一下“猜数字”这个类,其数据成员“内定数字”是“私有”的,其方法成员“猜数字()”也是“私有”的,也就是说,它们对外界来说是不可见的,也就是说,它们被严格限制只能在“猜数字”这个类内部使用。既然不能被类外面的代码直接操作,那么这个类就保持了相对的独立性。“获取数字()”这个成员方法是“扩展”的,即它允许外界(子类)有条件的使用。只有成员方法“猜()”是“公开”的,允许外界任意使用。通过“私有”“扩展”“公开”机制,类既对外隐藏了实现细节,同时又对外公开了操作接口。这就是“封装”的概念。
再看“全自动猜数字”这个类,它并没有定义“猜()”这个成员方法,但外界却可以调用它的“猜()”,为什么呢?这是因为“全自动猜数字”的基类是“猜数字”,“猜()”正是从其基类“猜数字”中“继承”而来的。面向对象中“继承”的概念,类似于现实生活中子女继承父辈的财产。子类只能继承基类中“公开”和“扩展”的成员,而不能继承“私有”成员。
“多态”的概念就更复杂一些,更难理解,也更难解释。通俗的说,就是根据对象的实际类型(而非变量的类型)动态地(程序运行时,而非编译时)决定应该调用的成员方法。多态机制通常依赖于继承和覆盖(子类定义“与其父类‘公开或扩展的成员方法’声明形式相同的”成员方法,子类中的方法将覆盖基类中的方法)。
下面根据这几句代码具体讲解一下:
猜数字猜=创建猜数字();
//猜数字猜=创建全自动猜数字();
猜.猜();
把第二行注释起来仅执行第一行,与把第一行注释起来仅执行第二行,程序有截然不同的运行结果,其中的主要“秘密”就在于多态机制。而在本程序中,多态机制主要体现在“获取数字()”这个成员方法上——它是一个“扩展”方法,可以被覆盖,也已经被覆盖(基类“猜数字”中定义了一个“获取数字()”,子类“全自动猜数字”中也定义了一个“获取数字()”,后者覆盖前者)。程序之所以会出现两个运行结果,也正是因为有两个“获取数字()”,至于哪个“获取数字()”被执行,取决于对象的真实类型(创建时确定,且永不改变):如果对象的类型是“猜数字”(第一行),那么“猜数字.获取数字()”被调用;如果对象的类型是“全自动猜数字”(第二行),那么“全自动猜数字.获取数字()”被调用。您可能还在疑惑,这两个类只有一个“猜()”方法啊,定义于基类“猜数字”中的“猜()”方法能够调用到子类“全自动猜数字”中的“获取数字()”方法吗?可以的,因为子类的“获取数字()”覆盖了基类的“获取数字()”。这是多态的精髓,也是最难理解之处。
面向对象的思想不是很快就可以领会和掌握的,需要细致的品味和长期的实践。面向对象是一门科学。许多人一辈子都在学习。
第 8 分钟:特色语法
友好名称——用类自然语言格式书写程序:
如果定义了如下友好名称:
友好名称将<某>写到屏幕=控制台.输出行(某);
那么程序可以这么写:
'将123写到屏幕上';
'将"易语言"写到屏幕上';
'将<x>写到屏幕上'(x=100.123);
三联判断式:
可以这么写“如果(0 < x < 10)”,而不必象C/C++,Java,C#那样必需写成“if(x > 0 && x < 10)”。“0 < x < 10”,数学中最通用的写法,多自然呀,为什么其它编程语言就是不支持呢?我想所有程序员学数学都早于学编程,一开始看到怪怪的“x > 0 && x < 10”,必然有此疑问,可是各编程语言设计大师就是对此视而不见!
方法多返回值:
定义一个具有多返回值的方法:
文本,整数取姓名和年龄()
{
返回("中国",5000);
}
调用以上方法,接收多返回值:
文本姓名;整数年龄;
(姓名,年龄)=取姓名和年龄();
双向赋值运算符“<=>”——交换两个变量的值:
整数a=1,b=2;
a<=>b;//执行后,a的值为2,b的值为1;
如果没有双向赋值运算符,大概要写成“c = a; a = b; b = c;”或“a = a + b; b = a - b; a = a - b;”或“a = a^ b; b = a^ b; a = a^ b;”,多麻烦啊。
测试版1.1.0又引入了一些非常有用的语法特性,如“遍历循环”“参数默认值/扩展参数”“嵌入类型/嵌入方法”“中英文双语关键字”“通用型”等。关于“中英文双语关键字”,本人也曾专门写过一文:考考你,能看出这一段代码是用哪个编程语言写的吗?。
第 9 分钟:答题时间
有了易语言,为什么还要重新搞“易语言.飞扬”?
官方有回答,请看这里:http://www.dotef.cn/faq.html
“易语言.飞扬”跟原易语言比,有哪些本质改进?
完全面向对象、自动垃圾回收、可自行开发类库、与C/C++等语言水融、纯文本源代码、支持Unicode……
已经有很多编程语言了,我们还需要一个全新的编程语言吗?
汇编语言诞生时,C语言诞生时,C++诞生时,Pascal诞生时,Java诞生时,C#诞生时,都会有相同的疑问,答案都是一个:“需要”。 “易语言.飞扬”也一样。
“与C/C++语言等水融”体现在哪里?
可以使用C/C++等语言开发易语言本地类库,和易语言自身开发的类库完全等效,可相互引用,融合互补。
“易语言.飞扬”在哪些方面跟Java比较相似?
语法方面基本照抄;面向对象方面基本照抄;都有自动垃圾回收机制;都有“引用”的概念,都没有“指针”的概念;都可以跨平台;都有自已的类库;都支持Unicode、多线程、类反射;都有类似“Class Path”“Java Doc”“JNI”等东东……
为什么跟Java这么像?
语法方面没得说,两者都抄C语言;其它方面,我觉得“易语言.飞扬”向目前最先进的编程理念靠拢是正常的,也是合理的。
哪些方面跟Java不同?
编译型语言,直接执行机器码,运行效率高(Java是由JVM解释执行字节码,配合JIT);最精巧的运行时环境(Runtime Environment);以“类库”而非“包(package)”为单位引入(import);对源代码文件的路径没有严格要求(Java要求源文件必须位于特定子目录中,与package一致);不限制一个源代码文件只能写一个公开类;类的构造方法固定为“初始化()”,析构方法固定为“清理()”(Java类的构造方法名称与类名称相同,没有析构函数);暂时不支持异常处理机制;前面提到的特色语法;
垃圾收集器(GC)的质量和效率如何?
尚未经过实践检验,不好说。根据我个人不严格测试,在10000个对象相互引用且存在大量的循环引用的情况下,垃圾收集器工作正常,平均每次回收动作约耗时20毫秒。GC工作期间好像会中断程序执行。每次回收间隔约6到10秒,应该可调。具体的垃圾收集算法不详。
现在有多少类库可用?
从各方面分析来看,系统.ncl、反射.ncl、调试.ncl应该是比较成熟的类库,其它的类库还有:用户界面,工具,正则表达式,编码转换、XML……。用户界面类库好像一直都在变化之中,但基于此类库的“EF IDE”已经有了雏形(据EF官方博客)。
第 10 分钟:收工喽
我突然意识到文章写的有点长了,您读到这里也许已用完20分钟?对此我表示抱歉。但是请不要抱怨,因为我花费在此文中的时间远不止20小时!
我希望您读完本文能有所收获,多谢您的宝贵时间,欢迎批评指正。
向我们中国的IT精英吴涛高级总工程师致敬,向他领导的易语言开发团队致敬!
相关推荐
飞扬初级教程及实例》是一套专为初学者设计的学习资源,旨在帮助用户掌握易语言.飞扬这一全新编程版本。易语言.飞扬在公测阶段就以其独特的汉语关键字支持吸引了众多爱好者,使得编程变得更加亲民和易懂。 在压缩包...
### "易语言.飞扬”与 JAVA、C#、C++ 的异同 #### 易语言.飞扬简介 “易语言.飞扬”是中国本土开发的一款面向对象的编程语言,旨在为国内程序员提供一种更加贴近中文思维习惯的编程工具。相较于其他编程语言,...
飞扬”(EF)打造的跨平台的集成开发环境,使用“易语言.飞扬”自身开发而成。 EFIDE 为“易语言.飞扬”提供了一个完善的集成开发环境,集 工程管理、界面设计、代码编辑、编译、调试 等众多功能于一身。 <br>...
易语言.飞扬 的免安装补丁. 将补丁文件 EFPake.exe 复制到 易语言.飞扬目录下运行 点击绿化即可
“易语言.飞扬”是一种易学易用、高效实用、面向对象、跨平台的计算机编程语言。 它是一个全新的易语言版本,从核心架构上明显区别于原有的易语言(4.x及以前版本),它与以前的易语言共同构成了一个可以面向更广泛...
易语言编程入门教程、易语言教程【约150套】 全部目录截图https://www.vbjcw.cn/24803.html 缘正则表达式系列教程+例程源码【全套打包下载解压后3.7G】.rar 易语言辅助教程(爱易编程论坛讲师 24课+讲师:远航 9课+...
易语言Fotushop易语言.rar 易语言Fotushop易语言.rar 易语言Fotushop易语言.rar 易语言Fotushop易语言.rar 易语言Fotushop易语言.rar 易语言Fotushop易语言.rar
【易语言介绍】 易语言是中国本土开发的一款全中文编程语言,它的设计目标是为了让编程变得更加简单、易学。易语言使用中文编程,降低了学习编程的门槛,特别适合不具备英语基础的学习者。其内核由C++编写,与其他...
易语言源码Fotushop易语言.rar 易语言源码Fotushop易语言.rar 易语言源码Fotushop易语言.rar 易语言源码Fotushop易语言.rar 易语言源码Fotushop易语言.rar 易语言源码Fotushop易语言.rar易语言源码Fotushop...
迷离易语言微信公众号开发教程第二课-易语言.zip
目前已有易语言、易语言.飞扬和易乐谷三种类易语言的版本,都有专用的集成开发环境。其中,易语言的最新版本为5.3完整版,支持静态编译,目标二进制代码体积小,执行效率高。易乐谷采用易语言进行了二次开发,最新...
易语言源码易语言操作网页教程操作手机版网页源码.rar 易语言源码易语言操作网页教程操作手机版网页源码.rar 易语言源码易语言操作网页教程操作手机版网页源码.rar 易语言源码易语言操作网页教程操作手机版网页...
易语言API 易语言例程 易语言教程 泪闯天涯教程 易语言源码.rar 易语言API 易语言例程 易语言教程 泪闯天涯教程 易语言源码.rar 易语言API 易语言例程 易语言教程 泪闯天涯教程 易语言源码.rar 易语言API 易语言...
通过这个易语言XML支持库入门教程,学习者不仅能掌握XML的基本知识,还能学会在易语言环境中高效地处理XML数据,为开发更复杂的应用打下坚实基础。同时,了解并实践这些内容,也能提升开发者的数据处理能力和软件的...
采用易语言开发,完全不依赖易语言核心库的一套GUI图形界面库。 借助斩月工具可以使得您的图形界面程序不依赖易语言核心支持库运行。 本界面库提供Windows通用组件的封装 以及一些扩展组件。 您可以继承...
然”编程思想》一书主要探讨了“易语言.飞扬”(EF)编程系统,这是一种简洁易学、高效实用且面向对象的编程语言,旨在提供跨平台的软件开发能力。该语言在面向对象机制上与Java、C#等现代编程语言有共通之处,而其...
8套易语言编程入门教程【独立团易语言教程】 【共8套】独立团易语言教程 独立团vip.rar 独立团VC++教程-第1与2章.rar 独立团易语言教程第一套-中级辅助CALL篇,挺不错的教程-(共计14课).rar 独立团易语言教程第一...
而“易语言入门教程.rar”压缩包文件正是为这些初学者准备的一份入门学习宝典,它包含了系统性的学习资料,旨在帮助初学者从零基础起步,逐步掌握易语言编程的精髓。 易语言的核心设计思想是让编程简单化,让普通人...
在压缩包中的“易语言.exe”文件,很可能是易语言的安装程序。安装后,你可以启动易语言的IDE,跟随教程逐步实践,通过编写实际的代码来加深对易语言的理解。此外,还可以在易语言的官方网站上找到更多的教程和资源...
易语言源码易语言裙角飞扬游戏源码.rar 易语言源码易语言裙角飞扬游戏源码.rar 易语言源码易语言裙角飞扬游戏源码.rar 易语言源码易语言裙角飞扬游戏源码.rar 易语言源码易语言裙角飞扬游戏源码.rar 易语言源码...