运用对象进行编程的意义
对于初学者来说,怎样理解用易语言来编程?象VB、DELPHI、VC++等编程工具一样,可视化编程都是围绕对象、运用现成的对象来进行编程的。我们理解了对象的含义及其作用,就能很好地理解可视化编程,包括易语言,更能使我们培养编程思路,并培养独立完成程序编写的能力。比如前面的例程“祖国,您好!”,就是先设计好按钮、标签这两个对象,用“单击按钮”这个对象事件来作为执行指令的依据,然后就围绕这两个对象来进行编程。
所谓对象,指窗口、控件、数据库等之类的东西。所谓运用对象进行编程,其程序设计是以对象为中心,以事件作为执行程序的依据, 一般是指用具体的控件(即对象)来发出指令、接收指令、传送指令并反馈指令的一种编程方法。这种编程方法由于具有形象性和具体性,故易于为人们所理解。比如单击一下某个按钮(对象)就可以开始或结束一个程序,“单击”这个指令为某一个“事件”,点击后程序怎样运行(“移动”、“关闭”、“加入内容”之类)为“命令”或“方法”,“过程”(包括结果)通常表现为对象的属性(变量或常量)的变化(如“编辑框3.内容=(变为)“祖国,你好!”)。也即说运用对象进行编程的方法主要是运用对象(一般表现为具体的控件,有时也不一定)的属性(实质就是变量或常量)、事件、方法(动作)和过程来完成程序的一种编程思想和方法。
在易语言中我们就经常提及“对象”,并且通过改变对象的属性来设置各对象。
可能有朋友要问运用对象、创建对象有什么好处?不运用对象行吗?这我们要从头说起。人类初期的编程语言都是面向过程的,由于没有任何现成的对象(窗口、控件、数据库等)可供编程时运用,单是创建一个控件可能就要用到数百行代码,并且大量的时间耗费在创建对象中。有一个著名的等式:数据结构+语法=程序,就是形容这种面向过程的编程方式的。
后来编程界出现运用现成的对象进行编程的方法,将常用的程序过程和数据结构模块化、对象化,以便供人们在编程时引用。用这种方式进行编程,你不必再去编写冗长的界面程序(如绘制坐标轴、绘制按钮及其按钮下陷的效果等等),你的重点完全在程序功能的实现上,而不是在界面的绘制上,这样的编程方式大大缩短了软件的开发时间,提高了程序员的开发效率,也使编程就象网页设计或画画一样简单。随着软件不断向复杂性、大规模、多功能性发展,加上某些发展成熟的编程语言既能使用对象,又能创建对象,使这种运用对象的编程方式越来越显示它的强大魅力。
打个比方来说明,人们一般在吃饭的时候用到筷子、碗、叉子等,但你想一想,如果人们都在吃饭的时候才去用原料制造一些器具,那么情况又如何呢?明白了运用对象的意义了吗?当然如果你是编程天才,那么你也可以开发自己的“对象”甚至是开发自己的编程语言,像吴涛先生那样运用面向底层、面向对象的编程方式,也就是相当于自己使用筷子、碗、叉子来吃饭,也给别人制造筷子、碗、叉子,或者可以比喻成“既建楼房,又开砖厂”。这种编程方式又比单纯运用对象的方式更高了一层次。
至于运用对象进行编程的含义,试举一例说明:
子程序:_按钮1_被单击
※由对象名和事件名构成该子程序名称
如果 (编辑框1.内容 = “” 或 编辑框1.内容 = “金善喜”)
※判断该对象的内容属性值是否为空或"金善喜"
编辑框1.内容 = “朱茵”
※该对象的内容属性值变为"朱茵"
否则
编辑框1.内容 = “金善喜”
※该对象的内容属性值变为"金善喜"
如果结束
以上代码在易语言代码编辑区里如下表示,注意虚线及箭头方向:
以上例子通过“单击”事件触动“按钮1”对象发出指令,而“编辑框1”对象接收并反馈该指令,使其属性值发生变化,,从而完成程序。程序运行效果如图1-6-1所示。
(图1-6-1)
再看下一例:
子程序:_按钮1_被单击
编辑框2.内容 = 编辑框1.内容
※当单击按钮1时,把编辑框1的内容传给编辑框2
编辑框1.内容 = “”
※然后再清空编辑框1,为下次输入内容作准备
在这一例中,“编辑框1”的内容属性值和“编辑框2”的内容属性值都不是固定的。没有固定值的数据类型或在程序运行过程中可以随时发生变化的量我们就称为“变量”(即易语言所说的“容器”)。一般我们先要声明变量(即建立容器),以便跟常量区别开来,然后再赋予属性值(范围)。如果没有声明变量就运行程序,一般会提示:“对不起,没有找到相关容器”。就象你填履历表,如果你没有把你的属性(年龄、性别、学历等)填好填正确,上面就发下来让你重填,道理一样。
但上面例子没有经过声明就可以赋予属性值(即“编辑框2.内容 = 编辑框1.内容),这是为什么?因为易程序已经通过将属性型变量预先封装到对象中建立好了属性变量。什么时候要建立容器?什么时候不用建立容器?且看第八章第一节的分解 。
易语言常用语句
对于初学者来说,即使代码是全中文的,也需要别人讲解才能明白其中的意思。如果我们能够理解其中大多数的代码的意思,那我们学习易语言就会相对容易。为此下面列举易语言常见的各类语句供大家学习或编程时参考。
一、赋值型语句(特征:有一个“=”号将左右两边连起来)。
这是我们学易语言首先会接触的一类语句。比如:标签1.标题 = “祖国,您好!”,这句代码的意思是:标签1的标题是“祖国,你好!”— 即将标签1的标题属性值设置为“祖国,你好!”(所谓赋值也)。我们所见的给变量赋值就是用此类语句。赋值语句常见有以下几类:
⑴、将某一对象的某种属性值赋给另一对象。
比如:标签1.标题=编辑框5.内容。意思即是“标签1的标题跟编辑框5中的内容一样”。比如我们在编辑框5中输入“易语言使英语盲也学会了编程”,那么在相关事件(比如单击按钮)的驱动下,标签1的标题也相应显示为“易语言使英语盲也学会了编程”。
⑵、将某一类型的属性值赋予某个对象。
比如:标签1.标题=“祖国,你好!”,将“祖国,你好!”赋给标签1的标题。
所赋予的属性值可以是各种类型的,比如:窗口1.可视=真,这个“真”是一个逻辑型数值。如果是文本型数值要用双引号识别,比如刚才的例子:标签1.标题=“祖国,你好!”即是。
又如,我们会发现这类句子:标签2.标题 = 到文本 (取小时 (取现行时间 ())) + “:” + 到文本 (取分钟 (取现行时间 ())) + “:” + 到文本 (取秒 (取现行时间 ()))。因为标签类对象只接受文本型数据,所以要把时间型数据转化为文本型,否则测试时会提示:“所接受的数据类型与传递给它的数据类型不一致”。
有时我们会发现此类句子:容器1=容器1+10,这个语句的意思是:“将容器1加10之后,再将新值传回给容器1”。 从这里可以看出,这里的“=”号跟数学中的“=”号在含义上是不同的,在数学中不可能出现b=b+2之类的表达式,而在易语言中这种表达式却是允许的,而且是经常运用的。 举例:1+1=2 和 “1”+“1”=“11”,前者是两个数值型数据相加,后者是两个文本型数据相连接。
另外,我们又会看到这类句子:编辑框1.高度=取用户区高度 ()。“=”号的右边表示操控程序的命令,也即是说有时可以将系统命令、执行条件、项目、常量、子程序、函数、资源乃至其他对象的方法等,只要具有运算结果(返回值),都可以当作是属性值赋给对象。编辑框1.高度=取用户区高度 ()可以理解为取得“取用户区高度 ()”的返回值(运算结果),然后将此值赋给编辑框1的内容属性。
二、非运行语句。
非运行语句包括以下几种。
(1)、注释型语句。易语言的注释型语句的格式是:
※ 具体注释语句
注释语句不能执行程序,只是用来解释上一行代码的意思。易语言是把注释代码隐藏起来的。显示某行代码的注释语句的方法是:选中某行代码,如果在该行代码前出现“+”号,说明该行代码有注解,点击该“+”号可以打开该行代码的注解,点击“-”可以重新隐藏注解。
上述注释型语句是易程序中固有的,我们也可以自己添加注释型语句。方法:直接改动某一备注或用右键选“修改备注”。
除了上述的备注方法外,在下方的“提示夹”里有对该行代码更详细的解释。
我们也可以把下面的草稿型语句作为备注。
(2)、草稿型语句。易语言的草稿型语句的格式是:
※草稿:程序代码
草稿型语句也不能被程序执行,有两种情况会出现草稿型语句:①、没有转为正式语句,在代码前会有“※草稿:”字样,转化为可以运行的正式代码的方法:双击该行代码使之变灰,然后按回车键(即Enter键)。②、该行代码有错误,不能转化为正式语句。处理:修改错误,然后确定代码。
(3)、测试型语句。测试型语句仅在易程序的调试版本中被执行,在发布版本中将被直接跳过,在编译发布程序中不运行的语句包括“输出调试文本”、“暂停”、“检查”这三个命令。
三、方法型语句。
如果我们理解了控件的属性、事件和方法,就会理解方法是一个具体对象能够执行的动作。有的方法会有参数表,有的方法则不用参数,“参数”大概相当于调用这个方法的各种相关数据,包括相关对象属性值、系统命令、执行条件、项目、常量、子程序、函数乃至其他对象的方法等,只要具有返回值,都是可以调用的参数。不同的方法有不同的参数,一种方法可以有多种类型的参数。执行、调用一个对象的方法的一般格式如下:
对象名.方法名 ( 参数1,参数2,... )
例如需要在一个名为“购物篮”的列表框里添加一个叫“苹果”的列表项目,其语句如下:
购物篮.加入项目 ( ”苹果” , )
上面这句话的意思可以理解为:将购物篮的加入项目(方法)定为“苹果”。在这个例句中,“加入项目”是“购物篮”的方法,“苹果”是其参数。其中调用列表框的“加入项目”方法的句式是:
列表框.加入项目 (欲加入项目的文本,[与欲加入项目相关的数值])
同时我们又会发现另一类句式,比如“销毁()”,这个句式跟命令型句式很象,但其实它是下面这个句式的省略表达:窗口单元.销毁 ()。也即是说调用当前窗口单元的方法句式可省略前面的对象名前缀,它仍然是一种方法型语句。再举另一例子,窗口单元.弹出菜单 (欲弹出的菜单,[水平显示位置],[垂直显示位置]),可以省略表达成:弹出菜单 (欲弹出的菜单,[水平显示位置],[垂直显示位置])。
欲查看某类窗口单元具有哪些方法、这些方法的详细解释以及有哪些可用参数等,请到易语言设计界面的支持库夹中的“数据类型”分枝中寻找。譬如:想了解画板的所有方法,可以到“数据类型 -> 画板”下查看。
下面列举几个调用对象方法的例子,以便让各位菜鸟举一反三:
(1)、在程序中使用常量时其名称前必须加上“#”符号,所以如果调用的参数中有常量,就在常量前面加上“#”符号,比如:
列表框1.调整层次 (#底层)
(2)、调用系统命令作为参数。例句:
画板1.滚动写行 (数值到人民币 (100, 假))
这句的意思是,调用“画板1”的“滚动写行”方法。而其欲写出的数据(参数)是 数值到人民币 (100, 假)(这句的语法请看帮助),这是一种数值转换命令语句。
(3)、调用相关对象的属性值作为方法的参数。例句:
列表框.加入项目 (编辑框1.内容 , )
其他用法就不一一列举了。
四、命令型语句。
命令型语句跟方法型语句差不多,看看下面两者的对比就知道它们的差别了— 方法型语句:对象名称.方法名称(参数,......),而命令型语句的基本格式是:
命令名称 (参数,......)
“命令”的意思也跟“方法”差不多,都是一种程序运行动作指令,只不过“方法”是某个具体对象所具有的能供调用的指令,而“命令”则是整个易语言系统固有的、可以供任何程序任何对象调用的指令,所以命令名称前面没有前缀的对象名。
有时候命令的参数不是必需的(即“可选的”),比如:取随机数 ([欲取随机数的最小值],[欲取随机数的最大值]),“[]”表示该参数不是必需的。如果是这种情况,该参数可为空,比如:取随机数 ()。
那么,我们怎样调用命令呢(怎样编辑命令代码)?怎样查找易语言系统提供的命令呢?也是有两种方法:①、请到易语言设计界面的支持库夹中的“数据类型”分枝中寻找。譬如:想了解文件读写的“插入文本”命令,可以到“核心支持库-> 文件读写->插入文本”查看。点击该命令名称可以快速地在代码编辑区插入该命令的代码;②、选“帮助→易语言知识库→目录→参考手册首页→系统核心支持库”,我们会发现那里列举了易语言提供的所有命令类别,可以选中某类命令类别来查看。
通过查找,我们会发现易语言提供以下几种类型的命令可供调用:
(1)、核心支持库命令,包括以下几大类型:
流程控制 算术运算 逻辑比较 位运算
容器操作 数组操作 环境存取 拼音处理
文本操作 字节集操作 数值转换 时间操作
磁盘操作 文件读写 系统处理 媒体播放
程序调试 其他 数据库 网络通信
比如 取现行时间 () 是属于时间操作命令,而 数值到人民币 (100, 假) 是一种数值转换命令。
(2)、调用其他程序(包括窗口程序集、子程序等)、易模块、API函数等的命令。
有时候我们会发现某个命令在核心支持库里找不到,那可能是调用以上的东西,比如在某一个例子中有一个“添加用户()”的命令,这个命令在系统命令列表里找不到,我们再看下面有一个子程序叫“添加用户”,原来该命令是调用“添加用户”子程序。
下面再列举一些常见的命令以便举一反三:
①、载入窗口命令。我们想通过一个窗口启动其他窗口,可用此命令,其句式是:
载入 (欲载入的窗口,[父窗口],是否采用对话框方式)
它的意思请查看有关说明。
②、运行命令。使本程序或其他程序运行,其句式为:
运行 (欲运行的命令行,是否等待程序运行完毕,[被运行程序窗口显示方式])
示例:运行(”E:\易语言\e.exe” , 假)。
③、信息框命令 。有时我们想使系统反馈指令,比如弹出相关提示,但又找不到有“信息框”这个控件(窗口单元),原来易语言是通过命令调用信息框的(类似的还有输入框命令),其格式是:
信息框 ( 提示信息,按钮,[窗口标题])
④、关闭命令。这是一种数据库操作命令,当指定数据库操作完毕后,关闭已经被打开的指定数据库,以便清空数据变量,节约系统资源,其句式是:
关闭 ([数据库别名或名称])
⑤、结束命令。本命令结束当前易程序的运行,参数为空(无返回值),其格式是:
结束 ()
最后要说的是,我们只介绍了命令型的基本语句,我们在以后的学习中将会继续讲解命令型基本语句中的各类语句,包括流程控制语句中的条件语句、选择语句、循环语句等,还有容器操作、逻辑比较等命令语句都要继续讲解。
五、表格型语句(声明型语句)。
学过其他编程语言的朋友初次用易语言一般会不太适应,因为代码都是用中文表示的,呵呵。其实易语言的语法规则跟其他编程语言是差不多的,可能他们比较不习惯的是声明型语句是用表格来表达。
比如VB中声明变量的句式是“dim 变量名 as 变量类型”之类,而易语言是用表格声明容器来表示,表格所要填写的内容包括容器名(变量名)、容器类型(变量类型)等项目。用表格能更直观地了解、查找或插入所要声明的东西,例如变量、子程序、常数、dll函数、声音或图片资源等数据类型。
如果我们把易语言的表格型代码复制粘贴到记事簿等文件中,会发现表格型代码转化为文字型代码,比如其他编程语言对子程序的声明类似下面的语句:
子程序:哈哈哈
返回值类型:逻辑型
而以上代码在易语言中是这样表示:
其中第一行表格代码在创建该子程序时已自动生成,不用再填写,我们只需填写第二行表格中的代码,包括“哈哈哈”和“逻辑型”。
易语言声明各种类型的数据的方法很简单,选菜单“插入”,再选要声明的数据类型即可,如图1-7-1所示。
(图1-7-1)
下面来列举一下声明型语句的几种类型和声明方法:
(1)、建立(声明)容器(变量)。需要声明(定义)的项目包括容器名、容器类型、是静态容器还是非静态容器、数组、备注等。
建立容器的方法:①、局部容器—在子程序下面按下“Ctrl + L” 加入一个空容器; ②、窗口程序集容器—在窗口程序集下面按回车键;③、全局容器—在工作夹里选“程序→全局容器”,或在菜单里选“插入→新全局容器”。
(2)、建立子程序。声明项目包括子程序名、返回值类型、参数名等。
建立子程序的三种方法:①、在菜单里选“插入→新子程序”;②、或者按“Ctrl + N”插入一个新子程序;③、也可以选定需要对其事件进行编程的控件对象(如按钮1)然后在属性夹里选取相关事件(如“被单击”),会同时在代码编辑区插入“按钮1.被单击”之类的子程序。
(3)、建立dll命令(api函数)。
跟其他编程语言一样,易语言本身提供的系统命令是有限的,但在易应用程序中可以直接调用系统外部动态连接库(即 Dll 库)中的命令。在VB里声明api函数的语句类似于下面的句子:
Declare Function ClipCursor& Lib "user32" (lpRect As RECT)
这句话翻译成中文是:
声明函数:ClipCursor 函数所在库:user32 ( 函数参数名:lpRect 参数类型:RECT )
那么在易语言里,声明dll命令也包括api函数名、函数所在库、函数参数名和参数类型等项目,如下面的空表格型代码所示。
建立dll命令来调用api函数有两种方法:①、在工作夹里选“程序→dll命令”;②、菜单里选“插入→新dll命令”。
(4)、其他的表格型语句还包括建立程序集、建立新数据类型、建立常量、建立声音或图片资源等。一般来说用表格来插入以上这些东西的方法有两种:①、在工作夹里选“程序→”;②、菜单里选“插入→”。
如何编写程序代码
有人说,编写程序代码不是很简单吗?切换到代码编辑区,把代码填上去就行了啊。说是这么说,但真正精通还不是很简单的。如果我们精通了,就可以减少代码的编写时间,提高程序效率和工作效率,不用查来查去,或老是要引用别人的代码。还是让我们对代码的编辑多了解一些吧。
一、了解程序的构成及其操作。
在可视化编程还没有产生之前,对于程序有一个著名的公式:程序 = 数据结构 + 算法。现在易语言已经将数据结构封装为程序窗口、程序集、子程序、变量等各种数据类型(对象);算法是解决问题的过程和步骤,具体地把各种数据类型联系起来构成程序代码块或子程序,算法是一个程序的灵魂;而语法则是代码的语素单位,代码行由语法所构成。在一个易程序中,各种数据类型相当于程序的框架,当我们按照上一节的方法建立好一个程序中所有需要的数据类型时,程序或子程序的框架就已经建好;而语法就是我们在上一节所讲的各种语法句式,它具体地通过各种数据类型之间的关系使这些数据类型发生变化,从而达成该程序所需要的功能。下面我们随便举一例来说明数据结构与语法的关系:
在上一例的程序中有两种数据类型:启动窗口和成绩变量。这两者的关系是这样:当启动窗口被创建于程序中时(事件),成绩变量的值发生变化(响应事件)。那么成绩变量怎样发生变化?用两个语法句式来确定:赋值句式、信息框命令句式。用赋值句式使变量发生变化,用信息框命令句式来显示这种变化。用“销毁 ()”这个语法句式关闭启动窗口,使被建立起来的数据类型同归于灭亡以释放系统资源。
理解了易程序的构成及其语法,对于我们学会开发易模块、开发支持库等也都会带来重要的帮助。
易程序的各种数据类型包括程序窗口、程序集、子程序、自定义数据类型、全局容器、DLL命令定义、常量、资源等。下面解释其中的一些数据类型:
⑴、程序窗口:分为启动窗口和其他窗口等。
启动窗口的名称固定为“_启动窗口”不可改变,缺少启动窗口的程序不能运行。其他窗口的名称可以改变,当然我们也可以把其他窗口变为启动窗口,只要把它的名称改为“_启动窗口”、原来的启动窗口改为其他名称就行了。
操作:若要在各个窗口之间切换,可以在左边的属性区选“程序→程序数据→窗口”,点击某个窗口名称可以切换到该窗口编辑界面。如图1-8-1所示。
(图1-8-1)
若要开一个新窗口,可在菜单中选“插入→新窗口”,或在左边的属性区选“程序→窗口”,再点右键插入。以下新程序、新容器、新常量等的插入与此一样。
⑵、程序集:一个程序窗口常常对应一个程序集名。比如有一个窗口叫“_启动窗口”,那它所对应的程序集名称可能为“窗口程序集1”。如图1-8-2所示。
(图1-8-2)
⑶、子程序:是一个窗口程序集内的分程序,在程序中有独立的功能,常常由事件所触发。事件型子程序的名称由“_对象名_事件名”构成。
⑷、窗口单元数据类型。封装在窗口单元里的数据类型包括属性、事件和方法。对象常常通过控件(窗口单元)来表现,或者说很多对象都表现为具体的控件。
操作:选“工作夹→支持库子夹→系统核心支持库→数据类型→”可以查看各种窗口单元数据类型。选中某一数据类型,会在提示夹里显示详细解释,对于我们编写代码带来不可缺少的即时帮助。如图1-8-3所示。
(图1-8-3)
具体查找各种窗口单元数据类型可用的属性、事件和方法应参看《易语言知识库及例程》,如图1-8-4所示。
(图1-8-4)
⑸、用户自定义数据类型。在程序中的任何位置,只要可以使用系统基本数据类型(如:整数型、文本型等),就可以使用自定义数据类型。用户自定义数据类型由用户自行在自定义数据类型表中加入。如图1-8-5所示。
(图1-8-5)
⑹、变量(易语言称为“容器”)。变量在一个程序中就象人体的血液一样不可缺少,它是程序中临时储存数据的地方。至于详细的解释请看以后的章节。
变量分为局部变量(只在某一子程序中应用)、程序集变量和全局变量三种。比如在一例子中有一个叫“密码”的变量在程序集1的各个子程序中都有应用,即是程序集变量。三种变量中以全局变量损耗的资源最多,所以一般尽量避免使用。
⑺、其他程序部分。在以后的章节中会逐步解释。
二、了解语法的种类及其操作。
打开易语言编辑界面,在左边有“支持库”,里面列举了多种表达式和语法,即是易语言代码的主要种类。所谓命令其实就是算法的封装。
若要在程序中插入某个种类的代码,可在左边是属性区选“支持库”,再点击某个代码种类,就会在代码编辑区显示该类型代码的框架。比如你想输入条件式流程控制命令,可先在要插入该代码的地方点一下左键,再选“支持库→流程控制→如果”,点“如果”后就会在代码编辑区出现该类型代码的框架,你将代码填上去就行了。如图1-8-6所示。
(图1-8-6)
三、编写代码的一般步骤和思路。
就象第五节(第一个易程序)所说,设计一个程序通常包括设计程序界面、编写程序代码、测试运行等步骤。
1、设计程序界面。设计程序界面包括绘制控件到界面,并结合属性区设置对象的属性值。当然我们也可以用代码来设置对象的属性。
2、编写程序代码。
⑴、确定整个程序的各个构成部分。前面说过程序的实质就是用语法来确立各种数据类型之间的关系及其属性变化,所以我们先要确定程序中需要用到的数据类型。首先初步确定有哪些窗口,然后初步确定有用哪几个程序集及子程序来达成程序所需的功能,再分别建立变量(容器)及常量。一建全局变量,二建程序集变量,三建各子程序中的局部变量,在确定变量的的过程中需要确定其数据类型。
如果你缺少了哪个部分,在编写代码或调试程序时,系统会给予相关的错误提示。
⑵、运用核心支持库来编写语法代码。如前面所说。
3、测试运行程序。
在编写代码或调试时假如出现错误,会在用信息框或在左下方的状态区显示提示,并且在代码编辑区用指针指示出错的地方。虽然初学者不太明白它的错误提示的意思,但也大体能够知道出错的地方,马马虎虎知道出错的类型是子程序还是变量还是常量等。具体的调试方法请看第八章的内容。
可在菜单中选“调试”或“运行”来进行调试。
另外选中某行代码,如果在代码前有“+”号,点击“+”号可以打开该行代码的注解,你可以自己修改这注解 ,点击“—”号可以隐藏注解。
另外初学者容易出现一个问题:在子程序中添加的语句怎么总是显示 “草稿”这两个字?因为它是草稿,所以不能在程序中运行。按一下回车键“草稿”两字就会消失。一般该行代码有错不能确定时,也显示为草稿。
易程序的文件组成
与一个易程序相关的文件格式常用的有以下几种,一个易程序中的某些功能可能要依赖于下面的某些文件来实现。一个易程序在编译发布时可能会附带上其他需要的文件,但只有后缀名为“.e”的易程序主文件才是每一个易程序都需要的。现罗列相关文件类型如下:
1、主程序:后缀名为“.e”。
2、易模块:后缀名为“.ec”,是易语言外部子程序文件之一,类似于中文“DLL”。
3、内部数据库文件:
.edb 数据库主文件
.edt 数据库辅助数据文件,仅在数据库中存在备注型或者字节集型字段时才存在,文件名称除了后缀外与数据库主文件相同,它必须与.edb文件放在同一目录中。
.enx 数据库索引文件。使用 B+树结构,由用户根据需要自行创建,用作加快记录的查找速度。
4、支持库文件:
. fne: 带编辑信息、有运行支持代码的支持库。
. fnl: 带编辑信息、无运行支持代码的支持库。
. fnr: 不带编辑信息、有运行支持代码的支持库。
5、专用报表文件:后缀名为“.grd”。
6、其他依赖文件:如“.dll”(动态链接库 — 包含外部应用子程序)、“.ocx”(外部控件)、“.opk”(外部控件汉化文件)、“.txt”(文本文件)、“.htm”(网页文件)、“.chm”(帮助文件)、“.mdb”(外部数据库文件类型之一)等。
以上各种文件类型中,易主程序(.e)、易模块(.ec)、易数据库(.edb)、易支持库(.fne)、易报表(.grd)、易组件汉化(.opk)等是易语言的专用文件类型。
分支语句的使用方法
易语言的分支语句有如果、如果真、判断,它们都属于流程控制命令。三者的功能近似,而又有细微的区别,使不少初学者感到困惑。分支语句使用得当,可使程序简洁,加快运行速度。否则,适得其反,甚至发生错误。学会正确使用分支语句,是每个编程人员必需掌握的基本功之一。
1. 命令简介
此节内容均摘自易语言帮助文件,为保持原意,中间未穿插解释。
1.1 如果
调用格式: 〈无返回值〉 如果 (条件)
本命令根据提供的逻辑参数的值,来决定是否改变程序的执行位置,如果提供的逻辑参数值为真,程序继续顺序向下执行,否则跳转到左侧箭头线指向的命令处去执行。本命令为初级命令。
参数<1>的名称为“条件”,类型为“逻辑型(bool)”。本条件值的结果决定下一步程序执行位置。
1.2 如果真
调用格式: 〈无返回值〉 如果真 (条件)
本命令根据提供的逻辑参数的值,来决定是否改变程序的执行位置,如果提供的逻辑参数值为真,程序继续顺序向下执行,否则跳转到左侧箭头线指向的命令处去执行。同“如果”命令相比,本命令没有为假时的程序部分。本命令为初级命令。
参数<1>的名称为“条件”,类型为“逻辑型(bool)”。本条件值的结果决定下一步程序执行位置。
1.3 判断
调用格式: 〈无返回值〉 判断 (条件)
本命令根据提供的逻辑参数的值,来决定是否改变程序的执行位置,如果提供的逻辑参数值为真,程序继续顺序向下执行,否则跳转到下一分支处去继续判断。本命令为初级命令。
参数<1>的名称为“条件”,类型为“逻辑型(bool)”。本条件值的结果决定下一步程序执行位置。
2. 条件表达式的书写
3个分支语句的参数都是“条件”(必须的),即条件表达式。学会正确书写条件表达式就显得尤为重要了。
2.1 条件表达式的运算符
条件表达式,也叫“布尔表达式”或“逻辑表达式”(布尔和逻辑可看作同义词),它的运算结果为逻辑型(也可称为布尔型),逻辑型数据只有“真”和“假”。条件表达式的运算符有关系运算符和逻辑运算符:
关系运算符有:<(小于)、>(大于)、=(等于)、<=(小于等于)、>=(大于等于)、<>(不等于)。这些符号和数学上的含义相同。
逻辑运算符有:取反、且、或。逻辑运算在中学阶段没有学过,在本文最后做些介绍。
这些运算符可以用英文输入也可以用中文输入,回车后都变成中文(或全角符号)显示,见下表:
表1.运算符表
逻辑命令名称 |
中文输入 |
英文输入 |
中文显示方式 |
说明 |
等于() |
= |
= |
= |
|
大于() |
> |
> |
> |
|
小于() |
< |
< |
< |
|
大于或等于() |
≥ |
>= |
≥ |
|
小于或等于() |
≤ |
<= |
≤ |
|
不等于() |
≠ |
<>或!= |
≠ |
|
取反() |
取反() |
not |
取反() |
逻辑非 |
并且() |
且 |
And或&& |
且 |
逻辑与 |
或者() |
或 |
Or或|| |
或 |
逻辑或 |
2.2 条件表达式输入法说明
前6项可以采用直接输入法,就是输入顺序和显示顺序相同。如:输入a>b时,在键盘依次键入a、>、b即可;输入a≥b时,依次键入a、>、=、b即可。
后2项采用直接输入法时,需要在逻辑运算符的两边各加一个空格。如:输入a或b时,依次键入a、空格、h、空格、b,回车后变成:a或b。
取反()的输入和一般命令的输入相同,取反的参数是一个条件表达式。如:
取反(a>b)
上面的语句表示,当“a>b”为假时返回真;当“a>b”为真时返回假。
其它各项也可以采用这种方法输入。如:a或b,可以这样输入:
hz(a,b)
3. 分支结构的流程控制
3.1分支语句的流程线
流程线是易语言独有的功能,通过流程线,可以使初学者明了程序运行的流向。首先看看“如果”命令的流程线,如图1所示:
图1.“如果”的流程线
从上图可以看出,“如果”左面有一个向下的箭头↓,和一个向左的箭头←。向下的箭头旁边有一个对号√,向左的箭头下面有一个×,当这一行被选中时,√和×交替显示。表示“如果”的参数为真时程序向下执行,即执行第一个信息框;参数为假时,程序沿左键头所指的虚线绕过第一个信息框,执行第二个信息框。这是个典型的二分支语句,程序执行哪一个分支,完全取决于“如果”的参数,即对条件表达式的判断结果。当条件表达式成立时,返回“真”,执行第一个分支;当条件表达式不成立时,返回“假”,执行第二个分支。
“如果真”的流程线与“如果”的流程线非常相似,只是没有条件为假时的分支。见图2所示。
图2.“如果真”的流程线
由此可见,当程序面临一种选择时,条件为真就执行下面的语句,条件为假,就什么也不做,直接执行后续代码。这种情况,使用“如果真”比使用“如果”运行速度更快,因为程序不需要去寻找条件为假时的代码。
“判断”是一个多分支语句,通常把两个以上“判断”连续使用,若干“判断”组成一个整体使用。见图3所示。
图3.“判断”的流程线
上图是由4个判断组成的判断成绩的例子。由“判断”组成的多分支语句块是从一组供选择的路径中只挑选一条路径执行。执行此命令时,系统依次查看每个“判断”后的条件。当查看到第一个满足条件的时候,则执行该“判断”下的语句序列,然后其它“判断”,直接执行这个多分支语句块后面的语句。若所有条件均不成立时,则执行多分支语句块的最后一个语句序列。如本例中分数为负数时。
这种由若干“判断”组成的多分支语句块,每次最多只有一个语句序列被执行。当多个“判断”的条件成立时,系统只执行最前面那个“判断”下的语句序列。所以,此例中的“判断”不可以用“如果真”代替。可想而知,此例的“判断”若用“如果真”替代,当 分数大于等于90时,4个“如果真”的条件都成立,从“成绩优秀”到“不及格”4个信息框会陆续跳出,谁有兴趣可以试试。见例程分支结构流程线。
4. 分支语句的嵌套
分支语句可以多层嵌套使用。既可以同一种语句嵌套,也可以不同语句嵌套。由于易语言的分支语句能自动生成流程线,嵌套层次比较清晰,即使初学者也不难掌握。 多层嵌套的使用方法可参考例程解方程。例中设二次方程的二次项的系数为a,一次项的系数为b,常数为c,a、b、c都可能为0。以a=0作为第一层分支语句的条件,当条件为真时是一次方程,当条件为假时是二次方程。
图4.分支语句的多层嵌套
附:介绍一点逻辑代数知识
逻辑,是指事务的前因与后果所遵循的规律。在日常生活和科学实践中搭理存在着完全对立而又相互依存的两个逻辑状态,如事情的“真”和“假”,物体的“有”和“无”,门户的“开”和“闭”,电灯的“亮”和“灭”等等,它们通常可用逻辑“真”和逻辑“假”两个对立统一的逻辑值表示。当一个为逻辑“真”时,另一个就为逻辑“假”,为简化起见,逻辑“真”通常用逻辑“1”表示,逻辑“假”通常用逻辑“0”表示。这里的逻辑“1”和“0”与二进制的“1”和“0”是不同的概念,它们不表示数量的大小,仅作为一种符号。
逻辑代数,又称布尔代数,是专门研究逻辑值运算的一门科学。逻辑运算有三种基本运算:与运算、或运算和非运算。
1. 与运算
若决定某一事件的所有条件都成立,这个事件才能发生,否则这个事件就不发生。这样的逻辑关系称为逻辑与或称为逻辑乘。在易语言中逻辑与用“并且”命令实现。
2. 或运算
决定某一事件的条件中只要有一个或一个以上成立,这件事情就发生。否则就不发生。这样的逻辑关系称为逻辑或或称逻辑加。在易语言中逻辑或用“或者”命令实现。
3. 非运算
某件事情的发生取决于某个事件的否定:即该条件成立,这件事不发生;而该条件不成立,这件事反而会发生。这样的逻辑关系称逻辑非。
这三种运算可用下表简要说明:
表2.逻辑与及其逻辑非运算
逻辑值 |
逻辑与 |
逻辑非 |
|
A |
B |
||
真 |
真 |
真 |
假 |
真 |
假 |
假 |
真 |
假 |
真 |
假 |
真 |
假 |
假 |
假 |
真 |
表3.逻辑或及其逻辑非运算
逻辑值 |
逻辑或 |
逻辑非 |
|
A |
B |
||
真 |
真 |
真 |
假 |
真 |
假 |
真 |
假 |
假 |
真 |
真 |
假 |
假 |
假 |
假 |
真 |
从上面的表中可以看到,逻辑非运算就是对它的运算对象的否定。易语言用了通俗易懂的“取反()”命令来实现这个运算。下图是一个电灯电路示意图,我们规定,开关闭合为逻辑“1”(真),断开为逻辑“0”(假),灯泡亮为逻辑“1”(真),灯泡灭为逻辑“0”(假)。
左图的两个开关是串联的,只有开关A与开关B都闭合时灯泡才会亮;两个开关有一个断开或两个开关同时断开灯泡都会灭。用逻辑与运算,就是:
1×1=1,1×0=0,0×1=0,0×0=0。(式中的×号不是普通代数中的乘号)
右图的两个开关是并联的,开关A或开关B闭合灯泡都会亮,只有两个开关都断开灯泡才会灭。用逻辑或运算,就是:
1+1=1,1+0=1,0+1=1,0+0=0。(式中的+号不是普通代数中的加号)
图5.电灯电路示意图